echarts-all.js 1.9 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995
  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.1';
  149. self.dependencies = { zrender: '2.0.8' };
  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. if (type != 'HOVER' && type != 'MOUSEOUT') {
  228. setTimeout(function () {
  229. self._messageCenterOutSide.dispatchWithContext(type, eventPackage, that);
  230. }, 50);
  231. } else {
  232. self._messageCenterOutSide.dispatchWithContext(type, eventPackage, that);
  233. }
  234. };
  235. this._onevent = function (param) {
  236. return self.__onevent(param);
  237. };
  238. for (var e in ecConfig.EVENT) {
  239. if (e != 'CLICK' && e != 'DBLCLICK' && e != 'HOVER' && e != 'MOUSEOUT' && e != 'MAP_ROAM') {
  240. this._messageCenter.bind(ecConfig.EVENT[e], this._onevent, this);
  241. }
  242. }
  243. var eventBehaviors = {};
  244. this._onzrevent = function (param) {
  245. return self[eventBehaviors[param.type]](param);
  246. };
  247. for (var i = 0, len = ZR_EVENT_LISTENS.length; i < len; i++) {
  248. var eventName = ZR_EVENT_LISTENS[i];
  249. var eventValue = ZR_EVENT[eventName];
  250. eventBehaviors[eventValue] = '_on' + eventName.toLowerCase();
  251. _zr.on(eventValue, this._onzrevent);
  252. }
  253. this.chart = {};
  254. this.component = {};
  255. var Island = require('./chart/island');
  256. this._island = new Island(this._themeConfig, this._messageCenter, _zr, {}, this);
  257. this.chart.island = this._island;
  258. var Toolbox = require('./component/toolbox');
  259. this._toolbox = new Toolbox(this._themeConfig, this._messageCenter, _zr, {}, this);
  260. this.component.toolbox = this._toolbox;
  261. var componentLibrary = require('./component');
  262. componentLibrary.define('title', require('./component/title'));
  263. componentLibrary.define('tooltip', require('./component/tooltip'));
  264. componentLibrary.define('legend', require('./component/legend'));
  265. if (_zr.getWidth() === 0 || _zr.getHeight() === 0) {
  266. console.error('Dom’s width & height should be ready before init.');
  267. }
  268. },
  269. __onevent: function (param) {
  270. param.__echartsId = param.__echartsId || this.id;
  271. var fromMyself = param.__echartsId === this.id;
  272. if (!this._curEventType) {
  273. this._curEventType = param.type;
  274. }
  275. switch (param.type) {
  276. case ecConfig.EVENT.LEGEND_SELECTED:
  277. this._onlegendSelected(param);
  278. break;
  279. case ecConfig.EVENT.DATA_ZOOM:
  280. if (!fromMyself) {
  281. var dz = this.component.dataZoom;
  282. if (dz) {
  283. dz.silence(true);
  284. dz.absoluteZoom(param.zoom);
  285. dz.silence(false);
  286. }
  287. }
  288. this._ondataZoom(param);
  289. break;
  290. case ecConfig.EVENT.DATA_RANGE:
  291. fromMyself && this._ondataRange(param);
  292. break;
  293. case ecConfig.EVENT.MAGIC_TYPE_CHANGED:
  294. if (!fromMyself) {
  295. var tb = this.component.toolbox;
  296. if (tb) {
  297. tb.silence(true);
  298. tb.setMagicType(param.magicType);
  299. tb.silence(false);
  300. }
  301. }
  302. this._onmagicTypeChanged(param);
  303. break;
  304. case ecConfig.EVENT.DATA_VIEW_CHANGED:
  305. fromMyself && this._ondataViewChanged(param);
  306. break;
  307. case ecConfig.EVENT.TOOLTIP_HOVER:
  308. fromMyself && this._tooltipHover(param);
  309. break;
  310. case ecConfig.EVENT.RESTORE:
  311. this._onrestore();
  312. break;
  313. case ecConfig.EVENT.REFRESH:
  314. fromMyself && this._onrefresh(param);
  315. break;
  316. case ecConfig.EVENT.TOOLTIP_IN_GRID:
  317. case ecConfig.EVENT.TOOLTIP_OUT_GRID:
  318. if (!fromMyself) {
  319. var grid = this.component.grid;
  320. if (grid) {
  321. this._zr.trigger('mousemove', {
  322. connectTrigger: true,
  323. zrenderX: grid.getX() + param.x * grid.getWidth(),
  324. zrenderY: grid.getY() + param.y * grid.getHeight()
  325. });
  326. }
  327. } else if (this._connected) {
  328. var grid = this.component.grid;
  329. if (grid) {
  330. param.x = (param.event.zrenderX - grid.getX()) / grid.getWidth();
  331. param.y = (param.event.zrenderY - grid.getY()) / grid.getHeight();
  332. }
  333. }
  334. break;
  335. }
  336. if (this._connected && fromMyself && this._curEventType === param.type) {
  337. for (var c in this._connected) {
  338. this._connected[c].connectedEventHandler(param);
  339. }
  340. this._curEventType = null;
  341. }
  342. if (!fromMyself || !this._connected && fromMyself) {
  343. this._curEventType = null;
  344. }
  345. },
  346. _onclick: function (param) {
  347. callChartListMethodReverse(this, 'onclick', param);
  348. if (param.target) {
  349. var ecData = this._eventPackage(param.target);
  350. if (ecData && ecData.seriesIndex != null) {
  351. this._messageCenter.dispatch(ecConfig.EVENT.CLICK, param.event, ecData, this);
  352. }
  353. }
  354. },
  355. _ondblclick: function (param) {
  356. callChartListMethodReverse(this, 'ondblclick', param);
  357. if (param.target) {
  358. var ecData = this._eventPackage(param.target);
  359. if (ecData && ecData.seriesIndex != null) {
  360. this._messageCenter.dispatch(ecConfig.EVENT.DBLCLICK, param.event, ecData, this);
  361. }
  362. }
  363. },
  364. _onmouseover: function (param) {
  365. if (param.target) {
  366. var ecData = this._eventPackage(param.target);
  367. if (ecData && ecData.seriesIndex != null) {
  368. this._messageCenter.dispatch(ecConfig.EVENT.HOVER, param.event, ecData, this);
  369. }
  370. }
  371. },
  372. _onmouseout: function (param) {
  373. if (param.target) {
  374. var ecData = this._eventPackage(param.target);
  375. if (ecData && ecData.seriesIndex != null) {
  376. this._messageCenter.dispatch(ecConfig.EVENT.MOUSEOUT, param.event, ecData, this);
  377. }
  378. }
  379. },
  380. _ondragstart: function (param) {
  381. this._status = {
  382. dragIn: false,
  383. dragOut: false,
  384. needRefresh: false
  385. };
  386. callChartListMethodReverse(this, 'ondragstart', param);
  387. },
  388. _ondragenter: function (param) {
  389. callChartListMethodReverse(this, 'ondragenter', param);
  390. },
  391. _ondragover: function (param) {
  392. callChartListMethodReverse(this, 'ondragover', param);
  393. },
  394. _ondragleave: function (param) {
  395. callChartListMethodReverse(this, 'ondragleave', param);
  396. },
  397. _ondrop: function (param) {
  398. callChartListMethodReverse(this, 'ondrop', param, this._status);
  399. this._island.ondrop(param, this._status);
  400. },
  401. _ondragend: function (param) {
  402. callChartListMethodReverse(this, 'ondragend', param, this._status);
  403. this._timeline && this._timeline.ondragend(param, this._status);
  404. this._island.ondragend(param, this._status);
  405. if (this._status.needRefresh) {
  406. this._syncBackupData(this._option);
  407. var messageCenter = this._messageCenter;
  408. messageCenter.dispatch(ecConfig.EVENT.DATA_CHANGED, param.event, this._eventPackage(param.target), this);
  409. messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  410. }
  411. },
  412. _onlegendSelected: function (param) {
  413. this._status.needRefresh = false;
  414. callChartListMethodReverse(this, 'onlegendSelected', param, this._status);
  415. if (this._status.needRefresh) {
  416. this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  417. }
  418. },
  419. _ondataZoom: function (param) {
  420. this._status.needRefresh = false;
  421. callChartListMethodReverse(this, 'ondataZoom', param, this._status);
  422. if (this._status.needRefresh) {
  423. this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  424. }
  425. },
  426. _ondataRange: function (param) {
  427. this._clearEffect();
  428. this._status.needRefresh = false;
  429. callChartListMethodReverse(this, 'ondataRange', param, this._status);
  430. if (this._status.needRefresh) {
  431. this._zr.refreshNextFrame();
  432. }
  433. },
  434. _onmagicTypeChanged: function () {
  435. this._clearEffect();
  436. this._render(this._toolbox.getMagicOption());
  437. },
  438. _ondataViewChanged: function (param) {
  439. this._syncBackupData(param.option);
  440. this._messageCenter.dispatch(ecConfig.EVENT.DATA_CHANGED, null, param, this);
  441. this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  442. },
  443. _tooltipHover: function (param) {
  444. var tipShape = [];
  445. callChartListMethodReverse(this, 'ontooltipHover', param, tipShape);
  446. },
  447. _onrestore: function () {
  448. this.restore();
  449. },
  450. _onrefresh: function (param) {
  451. this._refreshInside = true;
  452. this.refresh(param);
  453. this._refreshInside = false;
  454. },
  455. _syncBackupData: function (curOption) {
  456. this.component.dataZoom && this.component.dataZoom.syncBackupData(curOption);
  457. },
  458. _eventPackage: function (target) {
  459. if (target) {
  460. var ecData = require('./util/ecData');
  461. var seriesIndex = ecData.get(target, 'seriesIndex');
  462. var dataIndex = ecData.get(target, 'dataIndex');
  463. dataIndex = seriesIndex != -1 && this.component.dataZoom ? this.component.dataZoom.getRealDataIndex(seriesIndex, dataIndex) : dataIndex;
  464. return {
  465. seriesIndex: seriesIndex,
  466. seriesName: (ecData.get(target, 'series') || {}).name,
  467. dataIndex: dataIndex,
  468. data: ecData.get(target, 'data'),
  469. name: ecData.get(target, 'name'),
  470. value: ecData.get(target, 'value'),
  471. special: ecData.get(target, 'special')
  472. };
  473. }
  474. return;
  475. },
  476. _noDataCheck: function (magicOption) {
  477. var series = magicOption.series;
  478. for (var i = 0, l = series.length; i < l; i++) {
  479. 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) {
  480. return false;
  481. }
  482. }
  483. var loadOption = this._option && this._option.noDataLoadingOption || this._themeConfig.noDataLoadingOption || ecConfig.noDataLoadingOption || {
  484. text: this._option && this._option.noDataText || this._themeConfig.noDataText || ecConfig.noDataText,
  485. effect: this._option && this._option.noDataEffect || this._themeConfig.noDataEffect || ecConfig.noDataEffect
  486. };
  487. this.clear();
  488. this.showLoading(loadOption);
  489. return true;
  490. },
  491. _render: function (magicOption) {
  492. this._mergeGlobalConifg(magicOption);
  493. if (this._noDataCheck(magicOption)) {
  494. return;
  495. }
  496. var bgColor = magicOption.backgroundColor;
  497. if (bgColor) {
  498. if (!_canvasSupported && bgColor.indexOf('rgba') != -1) {
  499. var cList = bgColor.split(',');
  500. this.dom.style.filter = 'alpha(opacity=' + cList[3].substring(0, cList[3].lastIndexOf(')')) * 100 + ')';
  501. cList.length = 3;
  502. cList[0] = cList[0].replace('a', '');
  503. this.dom.style.backgroundColor = cList.join(',') + ')';
  504. } else {
  505. this.dom.style.backgroundColor = bgColor;
  506. }
  507. }
  508. this._zr.clearAnimation();
  509. this._chartList = [];
  510. var chartLibrary = require('./chart');
  511. var componentLibrary = require('./component');
  512. if (magicOption.xAxis || magicOption.yAxis) {
  513. magicOption.grid = magicOption.grid || {};
  514. magicOption.dataZoom = magicOption.dataZoom || {};
  515. }
  516. var componentList = [
  517. 'title',
  518. 'legend',
  519. 'tooltip',
  520. 'dataRange',
  521. 'roamController',
  522. 'grid',
  523. 'dataZoom',
  524. 'xAxis',
  525. 'yAxis',
  526. 'polar'
  527. ];
  528. var ComponentClass;
  529. var componentType;
  530. var component;
  531. for (var i = 0, l = componentList.length; i < l; i++) {
  532. componentType = componentList[i];
  533. component = this.component[componentType];
  534. if (magicOption[componentType]) {
  535. if (component) {
  536. component.refresh && component.refresh(magicOption);
  537. } else {
  538. ComponentClass = componentLibrary.get(/^[xy]Axis$/.test(componentType) ? 'axis' : componentType);
  539. component = new ComponentClass(this._themeConfig, this._messageCenter, this._zr, magicOption, this, componentType);
  540. this.component[componentType] = component;
  541. }
  542. this._chartList.push(component);
  543. } else if (component) {
  544. component.dispose();
  545. this.component[componentType] = null;
  546. delete this.component[componentType];
  547. }
  548. }
  549. var ChartClass;
  550. var chartType;
  551. var chart;
  552. var chartMap = {};
  553. for (var i = 0, l = magicOption.series.length; i < l; i++) {
  554. chartType = magicOption.series[i].type;
  555. if (!chartType) {
  556. console.error('series[' + i + '] chart type has not been defined.');
  557. continue;
  558. }
  559. if (!chartMap[chartType]) {
  560. chartMap[chartType] = true;
  561. ChartClass = chartLibrary.get(chartType);
  562. if (ChartClass) {
  563. if (this.chart[chartType]) {
  564. chart = this.chart[chartType];
  565. chart.refresh(magicOption);
  566. } else {
  567. chart = new ChartClass(this._themeConfig, this._messageCenter, this._zr, magicOption, this);
  568. }
  569. this._chartList.push(chart);
  570. this.chart[chartType] = chart;
  571. } else {
  572. console.error(chartType + ' has not been required.');
  573. }
  574. }
  575. }
  576. for (chartType in this.chart) {
  577. if (chartType != ecConfig.CHART_TYPE_ISLAND && !chartMap[chartType]) {
  578. this.chart[chartType].dispose();
  579. this.chart[chartType] = null;
  580. delete this.chart[chartType];
  581. }
  582. }
  583. this.component.grid && this.component.grid.refixAxisShape(this.component);
  584. this._island.refresh(magicOption);
  585. this._toolbox.refresh(magicOption);
  586. magicOption.animation && !magicOption.renderAsImage ? this._zr.refresh() : this._zr.render();
  587. var imgId = 'IMG' + this.id;
  588. var img = document.getElementById(imgId);
  589. if (magicOption.renderAsImage && _canvasSupported) {
  590. if (img) {
  591. img.src = this.getDataURL(magicOption.renderAsImage);
  592. } else {
  593. img = this.getImage(magicOption.renderAsImage);
  594. img.id = imgId;
  595. img.style.position = 'absolute';
  596. img.style.left = 0;
  597. img.style.top = 0;
  598. this.dom.firstChild.appendChild(img);
  599. }
  600. this.un();
  601. this._zr.un();
  602. this._disposeChartList();
  603. this._zr.clear();
  604. } else if (img) {
  605. img.parentNode.removeChild(img);
  606. }
  607. img = null;
  608. this._option = magicOption;
  609. },
  610. restore: function () {
  611. this._clearEffect();
  612. this._option = zrUtil.clone(this._optionRestore);
  613. this._disposeChartList();
  614. this._island.clear();
  615. this._toolbox.reset(this._option, true);
  616. this._render(this._option);
  617. },
  618. refresh: function (param) {
  619. this._clearEffect();
  620. param = param || {};
  621. var magicOption = param.option;
  622. if (!this._refreshInside && magicOption) {
  623. magicOption = this.getOption();
  624. zrUtil.merge(magicOption, param.option, true);
  625. zrUtil.merge(this._optionRestore, param.option, true);
  626. this._toolbox.reset(magicOption);
  627. }
  628. this._island.refresh(magicOption);
  629. this._toolbox.refresh(magicOption);
  630. this._zr.clearAnimation();
  631. for (var i = 0, l = this._chartList.length; i < l; i++) {
  632. this._chartList[i].refresh && this._chartList[i].refresh(magicOption);
  633. }
  634. this.component.grid && this.component.grid.refixAxisShape(this.component);
  635. this._zr.refresh();
  636. },
  637. _disposeChartList: function () {
  638. this._clearEffect();
  639. this._zr.clearAnimation();
  640. var len = this._chartList.length;
  641. while (len--) {
  642. var chart = this._chartList[len];
  643. if (chart) {
  644. var chartType = chart.type;
  645. this.chart[chartType] && delete this.chart[chartType];
  646. this.component[chartType] && delete this.component[chartType];
  647. chart.dispose && chart.dispose();
  648. }
  649. }
  650. this._chartList = [];
  651. },
  652. _mergeGlobalConifg: function (magicOption) {
  653. var mergeList = [
  654. 'backgroundColor',
  655. 'calculable',
  656. 'calculableColor',
  657. 'calculableHolderColor',
  658. 'nameConnector',
  659. 'valueConnector',
  660. 'animation',
  661. 'animationThreshold',
  662. 'animationDuration',
  663. 'animationDurationUpdate',
  664. 'animationEasing',
  665. 'addDataAnimation',
  666. 'symbolList',
  667. 'DRAG_ENABLE_TIME'
  668. ];
  669. var len = mergeList.length;
  670. while (len--) {
  671. var mergeItem = mergeList[len];
  672. if (magicOption[mergeItem] == null) {
  673. magicOption[mergeItem] = this._themeConfig[mergeItem] != null ? this._themeConfig[mergeItem] : ecConfig[mergeItem];
  674. }
  675. }
  676. var themeColor = magicOption.color;
  677. if (!(themeColor && themeColor.length)) {
  678. themeColor = this._themeConfig.color || ecConfig.color;
  679. }
  680. this._zr.getColor = function (idx) {
  681. var zrColor = require('zrender/tool/color');
  682. return zrColor.getColor(idx, themeColor);
  683. };
  684. if (!_canvasSupported) {
  685. magicOption.animation = false;
  686. magicOption.addDataAnimation = false;
  687. }
  688. },
  689. setOption: function (option, notMerge) {
  690. if (!option.timeline) {
  691. return this._setOption(option, notMerge);
  692. } else {
  693. return this._setTimelineOption(option);
  694. }
  695. },
  696. _setOption: function (option, notMerge) {
  697. if (!notMerge && this._option) {
  698. this._option = zrUtil.merge(this.getOption(), zrUtil.clone(option), true);
  699. } else {
  700. this._option = zrUtil.clone(option);
  701. }
  702. this._optionRestore = zrUtil.clone(this._option);
  703. if (!this._option.series || this._option.series.length === 0) {
  704. this._zr.clear();
  705. return;
  706. }
  707. 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)) {
  708. this.component.dataZoom.syncOption(this._option);
  709. }
  710. this._toolbox.reset(this._option);
  711. this._render(this._option);
  712. return this;
  713. },
  714. getOption: function () {
  715. var magicOption = zrUtil.clone(this._option);
  716. var self = this;
  717. function restoreOption(prop) {
  718. var restoreSource = self._optionRestore[prop];
  719. if (restoreSource) {
  720. if (restoreSource instanceof Array) {
  721. var len = restoreSource.length;
  722. while (len--) {
  723. magicOption[prop][len].data = zrUtil.clone(restoreSource[len].data);
  724. }
  725. } else {
  726. magicOption[prop].data = zrUtil.clone(restoreSource.data);
  727. }
  728. }
  729. }
  730. restoreOption('xAxis');
  731. restoreOption('yAxis');
  732. restoreOption('series');
  733. return magicOption;
  734. },
  735. setSeries: function (series, notMerge) {
  736. if (!notMerge) {
  737. this.setOption({ series: series });
  738. } else {
  739. this._option.series = series;
  740. this.setOption(this._option, notMerge);
  741. }
  742. return this;
  743. },
  744. getSeries: function () {
  745. return this.getOption().series;
  746. },
  747. _setTimelineOption: function (option) {
  748. this._timeline && this._timeline.dispose();
  749. var Timeline = require('./component/timeline');
  750. var timeline = new Timeline(this._themeConfig, this._messageCenter, this._zr, option, this);
  751. this._timeline = timeline;
  752. this.component.timeline = this._timeline;
  753. return this;
  754. },
  755. addData: function (seriesIdx, data, isHead, dataGrow, additionData) {
  756. var params = seriesIdx instanceof Array ? seriesIdx : [[
  757. seriesIdx,
  758. data,
  759. isHead,
  760. dataGrow,
  761. additionData
  762. ]];
  763. var magicOption = this.getOption();
  764. var optionRestore = this._optionRestore;
  765. for (var i = 0, l = params.length; i < l; i++) {
  766. seriesIdx = params[i][0];
  767. data = params[i][1];
  768. isHead = params[i][2];
  769. dataGrow = params[i][3];
  770. additionData = params[i][4];
  771. var seriesItem = optionRestore.series[seriesIdx];
  772. var inMethod = isHead ? 'unshift' : 'push';
  773. var outMethod = isHead ? 'pop' : 'shift';
  774. if (seriesItem) {
  775. var seriesItemData = seriesItem.data;
  776. var mSeriesItemData = magicOption.series[seriesIdx].data;
  777. seriesItemData[inMethod](data);
  778. mSeriesItemData[inMethod](data);
  779. if (!dataGrow) {
  780. seriesItemData[outMethod]();
  781. data = mSeriesItemData[outMethod]();
  782. }
  783. if (additionData != null) {
  784. var legend;
  785. var legendData;
  786. if (seriesItem.type === ecConfig.CHART_TYPE_PIE && (legend = optionRestore.legend) && (legendData = legend.data)) {
  787. var mLegendData = magicOption.legend.data;
  788. legendData[inMethod](additionData);
  789. mLegendData[inMethod](additionData);
  790. if (!dataGrow) {
  791. var legendDataIdx = zrUtil.indexOf(legendData, data.name);
  792. legendDataIdx != -1 && legendData.splice(legendDataIdx, 1);
  793. legendDataIdx = zrUtil.indexOf(mLegendData, data.name);
  794. legendDataIdx != -1 && mLegendData.splice(legendDataIdx, 1);
  795. }
  796. } else if (optionRestore.xAxis != null && optionRestore.yAxis != null) {
  797. var axisData;
  798. var mAxisData;
  799. var axisIdx = seriesItem.xAxisIndex || 0;
  800. if (optionRestore.xAxis[axisIdx].type == null || optionRestore.xAxis[axisIdx].type === 'category') {
  801. axisData = optionRestore.xAxis[axisIdx].data;
  802. mAxisData = magicOption.xAxis[axisIdx].data;
  803. axisData[inMethod](additionData);
  804. mAxisData[inMethod](additionData);
  805. if (!dataGrow) {
  806. axisData[outMethod]();
  807. mAxisData[outMethod]();
  808. }
  809. }
  810. axisIdx = seriesItem.yAxisIndex || 0;
  811. if (optionRestore.yAxis[axisIdx].type === 'category') {
  812. axisData = optionRestore.yAxis[axisIdx].data;
  813. mAxisData = magicOption.yAxis[axisIdx].data;
  814. axisData[inMethod](additionData);
  815. mAxisData[inMethod](additionData);
  816. if (!dataGrow) {
  817. axisData[outMethod]();
  818. mAxisData[outMethod]();
  819. }
  820. }
  821. }
  822. }
  823. this._option.series[seriesIdx].data = magicOption.series[seriesIdx].data;
  824. }
  825. }
  826. this._zr.clearAnimation();
  827. var chartList = this._chartList;
  828. var chartAnimationCount = 0;
  829. var chartAnimationDone = function () {
  830. chartAnimationCount--;
  831. if (chartAnimationCount === 0) {
  832. animationDone();
  833. }
  834. };
  835. for (var i = 0, l = chartList.length; i < l; i++) {
  836. if (magicOption.addDataAnimation && chartList[i].addDataAnimation) {
  837. chartAnimationCount++;
  838. chartList[i].addDataAnimation(params, chartAnimationDone);
  839. }
  840. }
  841. this.component.dataZoom && this.component.dataZoom.syncOption(magicOption);
  842. this._option = magicOption;
  843. var self = this;
  844. function animationDone() {
  845. if (!self._zr) {
  846. return;
  847. }
  848. self._zr.clearAnimation();
  849. for (var i = 0, l = chartList.length; i < l; i++) {
  850. chartList[i].motionlessOnce = magicOption.addDataAnimation && chartList[i].addDataAnimation;
  851. }
  852. self._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, { option: magicOption }, self);
  853. }
  854. if (!magicOption.addDataAnimation) {
  855. setTimeout(animationDone, 0);
  856. }
  857. return this;
  858. },
  859. addMarkPoint: function (seriesIdx, markData) {
  860. return this._addMark(seriesIdx, markData, 'markPoint');
  861. },
  862. addMarkLine: function (seriesIdx, markData) {
  863. return this._addMark(seriesIdx, markData, 'markLine');
  864. },
  865. _addMark: function (seriesIdx, markData, markType) {
  866. var series = this._option.series;
  867. var seriesItem;
  868. if (series && (seriesItem = series[seriesIdx])) {
  869. var seriesR = this._optionRestore.series;
  870. var seriesRItem = seriesR[seriesIdx];
  871. var markOpt = seriesItem[markType];
  872. var markOptR = seriesRItem[markType];
  873. markOpt = seriesItem[markType] = markOpt || { data: [] };
  874. markOptR = seriesRItem[markType] = markOptR || { data: [] };
  875. for (var key in markData) {
  876. if (key === 'data') {
  877. markOpt.data = markOpt.data.concat(markData.data);
  878. markOptR.data = markOptR.data.concat(markData.data);
  879. } else if (typeof markData[key] != 'object' || markOpt[key] == null) {
  880. markOpt[key] = markOptR[key] = markData[key];
  881. } else {
  882. zrUtil.merge(markOpt[key], markData[key], true);
  883. zrUtil.merge(markOptR[key], markData[key], true);
  884. }
  885. }
  886. var chart = this.chart[seriesItem.type];
  887. chart && chart.addMark(seriesIdx, markData, markType);
  888. }
  889. return this;
  890. },
  891. delMarkPoint: function (seriesIdx, markName) {
  892. return this._delMark(seriesIdx, markName, 'markPoint');
  893. },
  894. delMarkLine: function (seriesIdx, markName) {
  895. return this._delMark(seriesIdx, markName, 'markLine');
  896. },
  897. _delMark: function (seriesIdx, markName, markType) {
  898. var series = this._option.series;
  899. var seriesItem;
  900. var mark;
  901. var dataArray;
  902. if (!(series && (seriesItem = series[seriesIdx]) && (mark = seriesItem[markType]) && (dataArray = mark.data))) {
  903. return this;
  904. }
  905. markName = markName.split(' > ');
  906. var targetIndex = -1;
  907. for (var i = 0, l = dataArray.length; i < l; i++) {
  908. var dataItem = dataArray[i];
  909. if (dataItem instanceof Array) {
  910. if (dataItem[0].name === markName[0] && dataItem[1].name === markName[1]) {
  911. targetIndex = i;
  912. break;
  913. }
  914. } else if (dataItem.name === markName[0]) {
  915. targetIndex = i;
  916. break;
  917. }
  918. }
  919. if (targetIndex > -1) {
  920. dataArray.splice(targetIndex, 1);
  921. this._optionRestore.series[seriesIdx][markType].data.splice(targetIndex, 1);
  922. var chart = this.chart[seriesItem.type];
  923. chart && chart.delMark(seriesIdx, markName.join(' > '), markType);
  924. }
  925. return this;
  926. },
  927. getDom: function () {
  928. return this.dom;
  929. },
  930. getZrender: function () {
  931. return this._zr;
  932. },
  933. getDataURL: function (imgType) {
  934. if (!_canvasSupported) {
  935. return '';
  936. }
  937. if (this._chartList.length === 0) {
  938. var imgId = 'IMG' + this.id;
  939. var img = document.getElementById(imgId);
  940. if (img) {
  941. return img.src;
  942. }
  943. }
  944. var tooltip = this.component.tooltip;
  945. tooltip && tooltip.hideTip();
  946. switch (imgType) {
  947. case 'jpeg':
  948. break;
  949. default:
  950. imgType = 'png';
  951. }
  952. var bgColor = this._option.backgroundColor;
  953. if (bgColor && bgColor.replace(' ', '') === 'rgba(0,0,0,0)') {
  954. bgColor = '#fff';
  955. }
  956. return this._zr.toDataURL('image/' + imgType, bgColor);
  957. },
  958. getImage: function (imgType) {
  959. var title = this._optionRestore.title;
  960. var imgDom = document.createElement('img');
  961. imgDom.src = this.getDataURL(imgType);
  962. imgDom.title = title && title.text || 'ECharts';
  963. return imgDom;
  964. },
  965. getConnectedDataURL: function (imgType) {
  966. if (!this.isConnected()) {
  967. return this.getDataURL(imgType);
  968. }
  969. var tempDom = this.dom;
  970. var imgList = {
  971. 'self': {
  972. img: this.getDataURL(imgType),
  973. left: tempDom.offsetLeft,
  974. top: tempDom.offsetTop,
  975. right: tempDom.offsetLeft + tempDom.offsetWidth,
  976. bottom: tempDom.offsetTop + tempDom.offsetHeight
  977. }
  978. };
  979. var minLeft = imgList.self.left;
  980. var minTop = imgList.self.top;
  981. var maxRight = imgList.self.right;
  982. var maxBottom = imgList.self.bottom;
  983. for (var c in this._connected) {
  984. tempDom = this._connected[c].getDom();
  985. imgList[c] = {
  986. img: this._connected[c].getDataURL(imgType),
  987. left: tempDom.offsetLeft,
  988. top: tempDom.offsetTop,
  989. right: tempDom.offsetLeft + tempDom.offsetWidth,
  990. bottom: tempDom.offsetTop + tempDom.offsetHeight
  991. };
  992. minLeft = Math.min(minLeft, imgList[c].left);
  993. minTop = Math.min(minTop, imgList[c].top);
  994. maxRight = Math.max(maxRight, imgList[c].right);
  995. maxBottom = Math.max(maxBottom, imgList[c].bottom);
  996. }
  997. var zrDom = document.createElement('div');
  998. zrDom.style.position = 'absolute';
  999. zrDom.style.left = '-4000px';
  1000. zrDom.style.width = maxRight - minLeft + 'px';
  1001. zrDom.style.height = maxBottom - minTop + 'px';
  1002. document.body.appendChild(zrDom);
  1003. var zrImg = require('zrender').init(zrDom);
  1004. var ImageShape = require('zrender/shape/Image');
  1005. for (var c in imgList) {
  1006. zrImg.addShape(new ImageShape({
  1007. style: {
  1008. x: imgList[c].left - minLeft,
  1009. y: imgList[c].top - minTop,
  1010. image: imgList[c].img
  1011. }
  1012. }));
  1013. }
  1014. zrImg.render();
  1015. var bgColor = this._option.backgroundColor;
  1016. if (bgColor && bgColor.replace(/ /g, '') === 'rgba(0,0,0,0)') {
  1017. bgColor = '#fff';
  1018. }
  1019. var image = zrImg.toDataURL('image/png', bgColor);
  1020. setTimeout(function () {
  1021. zrImg.dispose();
  1022. zrDom.parentNode.removeChild(zrDom);
  1023. zrDom = null;
  1024. }, 100);
  1025. return image;
  1026. },
  1027. getConnectedImage: function (imgType) {
  1028. var title = this._optionRestore.title;
  1029. var imgDom = document.createElement('img');
  1030. imgDom.src = this.getConnectedDataURL(imgType);
  1031. imgDom.title = title && title.text || 'ECharts';
  1032. return imgDom;
  1033. },
  1034. on: function (eventName, eventListener) {
  1035. this._messageCenterOutSide.bind(eventName, eventListener, this);
  1036. return this;
  1037. },
  1038. un: function (eventName, eventListener) {
  1039. this._messageCenterOutSide.unbind(eventName, eventListener);
  1040. return this;
  1041. },
  1042. connect: function (connectTarget) {
  1043. if (!connectTarget) {
  1044. return this;
  1045. }
  1046. if (!this._connected) {
  1047. this._connected = {};
  1048. }
  1049. if (connectTarget instanceof Array) {
  1050. for (var i = 0, l = connectTarget.length; i < l; i++) {
  1051. this._connected[connectTarget[i].id] = connectTarget[i];
  1052. }
  1053. } else {
  1054. this._connected[connectTarget.id] = connectTarget;
  1055. }
  1056. return this;
  1057. },
  1058. disConnect: function (connectTarget) {
  1059. if (!connectTarget || !this._connected) {
  1060. return this;
  1061. }
  1062. if (connectTarget instanceof Array) {
  1063. for (var i = 0, l = connectTarget.length; i < l; i++) {
  1064. delete this._connected[connectTarget[i].id];
  1065. }
  1066. } else {
  1067. delete this._connected[connectTarget.id];
  1068. }
  1069. for (var k in this._connected) {
  1070. return k, this;
  1071. }
  1072. this._connected = false;
  1073. return this;
  1074. },
  1075. connectedEventHandler: function (param) {
  1076. if (param.__echartsId != this.id) {
  1077. this._onevent(param);
  1078. }
  1079. },
  1080. isConnected: function () {
  1081. return !!this._connected;
  1082. },
  1083. showLoading: function (loadingOption) {
  1084. var effectList = {
  1085. bar: require('zrender/loadingEffect/Bar'),
  1086. bubble: require('zrender/loadingEffect/Bubble'),
  1087. dynamicLine: require('zrender/loadingEffect/DynamicLine'),
  1088. ring: require('zrender/loadingEffect/Ring'),
  1089. spin: require('zrender/loadingEffect/Spin'),
  1090. whirling: require('zrender/loadingEffect/Whirling')
  1091. };
  1092. this._toolbox.hideDataView();
  1093. loadingOption = loadingOption || {};
  1094. var textStyle = loadingOption.textStyle || {};
  1095. loadingOption.textStyle = textStyle;
  1096. var finalTextStyle = zrUtil.merge(zrUtil.merge(zrUtil.clone(textStyle), this._themeConfig.textStyle), ecConfig.textStyle);
  1097. textStyle.textFont = finalTextStyle.fontStyle + ' ' + finalTextStyle.fontWeight + ' ' + finalTextStyle.fontSize + 'px ' + finalTextStyle.fontFamily;
  1098. textStyle.text = loadingOption.text || this._option && this._option.loadingText || this._themeConfig.loadingText || ecConfig.loadingText;
  1099. if (loadingOption.x != null) {
  1100. textStyle.x = loadingOption.x;
  1101. }
  1102. if (loadingOption.y != null) {
  1103. textStyle.y = loadingOption.y;
  1104. }
  1105. loadingOption.effectOption = loadingOption.effectOption || {};
  1106. loadingOption.effectOption.textStyle = textStyle;
  1107. var Effect = loadingOption.effect;
  1108. if (typeof Effect === 'string' || Effect == null) {
  1109. Effect = effectList[loadingOption.effect || this._option && this._option.loadingEffect || this._themeConfig.loadingEffect || ecConfig.loadingEffect] || effectList.spin;
  1110. }
  1111. this._zr.showLoading(new Effect(loadingOption.effectOption));
  1112. return this;
  1113. },
  1114. hideLoading: function () {
  1115. this._zr.hideLoading();
  1116. return this;
  1117. },
  1118. setTheme: function (theme) {
  1119. if (theme) {
  1120. if (typeof theme === 'string') {
  1121. switch (theme) {
  1122. case 'macarons':
  1123. theme = require('./theme/macarons');
  1124. break;
  1125. case 'infographic':
  1126. theme = require('./theme/infographic');
  1127. break;
  1128. default:
  1129. theme = {};
  1130. }
  1131. } else {
  1132. theme = theme || {};
  1133. }
  1134. this._themeConfig = theme;
  1135. }
  1136. if (!_canvasSupported) {
  1137. var textStyle = this._themeConfig.textStyle;
  1138. textStyle && textStyle.fontFamily && textStyle.fontFamily2 && (textStyle.fontFamily = textStyle.fontFamily2);
  1139. textStyle = ecConfig.textStyle;
  1140. textStyle.fontFamily = textStyle.fontFamily2;
  1141. }
  1142. this._timeline && this._timeline.setTheme(true);
  1143. this._optionRestore && this.restore();
  1144. },
  1145. resize: function () {
  1146. var self = this;
  1147. return function () {
  1148. self._clearEffect();
  1149. self._zr.resize();
  1150. if (self._option && self._option.renderAsImage && _canvasSupported) {
  1151. self._render(self._option);
  1152. return self;
  1153. }
  1154. self._zr.clearAnimation();
  1155. self._island.resize();
  1156. self._toolbox.resize();
  1157. self._timeline && self._timeline.resize();
  1158. for (var i = 0, l = self._chartList.length; i < l; i++) {
  1159. self._chartList[i].resize && self._chartList[i].resize();
  1160. }
  1161. self.component.grid && self.component.grid.refixAxisShape(self.component);
  1162. self._zr.refresh();
  1163. self._messageCenter.dispatch(ecConfig.EVENT.RESIZE, null, null, self);
  1164. return self;
  1165. };
  1166. },
  1167. _clearEffect: function () {
  1168. this._zr.modLayer(ecConfig.EFFECT_ZLEVEL, { motionBlur: false });
  1169. this._zr.painter.clearLayer(ecConfig.EFFECT_ZLEVEL);
  1170. },
  1171. clear: function () {
  1172. this._disposeChartList();
  1173. this._zr.clear();
  1174. this._option = {};
  1175. this._optionRestore = {};
  1176. this.dom.style.backgroundColor = null;
  1177. return this;
  1178. },
  1179. dispose: function () {
  1180. var key = this.dom.getAttribute(DOM_ATTRIBUTE_KEY);
  1181. key && delete _instances[key];
  1182. this._island.dispose();
  1183. this._toolbox.dispose();
  1184. this._timeline && this._timeline.dispose();
  1185. this._messageCenter.unbind();
  1186. this.clear();
  1187. this._zr.dispose();
  1188. this._zr = null;
  1189. }
  1190. };
  1191. return self;
  1192. });define('echarts/config', [], function () {
  1193. var config = {
  1194. CHART_TYPE_LINE: 'line',
  1195. CHART_TYPE_BAR: 'bar',
  1196. CHART_TYPE_SCATTER: 'scatter',
  1197. CHART_TYPE_PIE: 'pie',
  1198. CHART_TYPE_RADAR: 'radar',
  1199. CHART_TYPE_MAP: 'map',
  1200. CHART_TYPE_K: 'k',
  1201. CHART_TYPE_ISLAND: 'island',
  1202. CHART_TYPE_FORCE: 'force',
  1203. CHART_TYPE_CHORD: 'chord',
  1204. CHART_TYPE_GAUGE: 'gauge',
  1205. CHART_TYPE_FUNNEL: 'funnel',
  1206. CHART_TYPE_EVENTRIVER: 'eventRiver',
  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. symbolList: [
  1345. 'circle',
  1346. 'rectangle',
  1347. 'triangle',
  1348. 'diamond',
  1349. 'emptyCircle',
  1350. 'emptyRectangle',
  1351. 'emptyTriangle',
  1352. 'emptyDiamond'
  1353. ],
  1354. loadingEffect: 'spin',
  1355. loadingText: '数据读取中...',
  1356. noDataEffect: 'bubble',
  1357. noDataText: '暂无数据',
  1358. calculable: false,
  1359. calculableColor: 'rgba(255,165,0,0.6)',
  1360. calculableHolderColor: '#ccc',
  1361. nameConnector: ' & ',
  1362. valueConnector: ': ',
  1363. animation: true,
  1364. addDataAnimation: true,
  1365. animationThreshold: 2000,
  1366. animationDuration: 2000,
  1367. animationDurationUpdate: 500,
  1368. animationEasing: 'ExponentialOut'
  1369. };
  1370. return config;
  1371. });define('zrender/tool/util', [
  1372. 'require',
  1373. '../dep/excanvas'
  1374. ], function (require) {
  1375. var BUILTIN_OBJECT = {
  1376. '[object Function]': 1,
  1377. '[object RegExp]': 1,
  1378. '[object Date]': 1,
  1379. '[object Error]': 1,
  1380. '[object CanvasGradient]': 1
  1381. };
  1382. var objToString = Object.prototype.toString;
  1383. function isDom(obj) {
  1384. return obj && obj.nodeType === 1 && typeof obj.nodeName == 'string';
  1385. }
  1386. function clone(source) {
  1387. if (typeof source == 'object' && source !== null) {
  1388. var result = source;
  1389. if (source instanceof Array) {
  1390. result = [];
  1391. for (var i = 0, len = source.length; i < len; i++) {
  1392. result[i] = clone(source[i]);
  1393. }
  1394. } else if (!BUILTIN_OBJECT[objToString.call(source)] && !isDom(source)) {
  1395. result = {};
  1396. for (var key in source) {
  1397. if (source.hasOwnProperty(key)) {
  1398. result[key] = clone(source[key]);
  1399. }
  1400. }
  1401. }
  1402. return result;
  1403. }
  1404. return source;
  1405. }
  1406. function mergeItem(target, source, key, overwrite) {
  1407. if (source.hasOwnProperty(key)) {
  1408. var targetProp = target[key];
  1409. if (typeof targetProp == 'object' && !BUILTIN_OBJECT[objToString.call(targetProp)] && !isDom(targetProp)) {
  1410. merge(target[key], source[key], overwrite);
  1411. } else if (overwrite || !(key in target)) {
  1412. target[key] = source[key];
  1413. }
  1414. }
  1415. }
  1416. function merge(target, source, overwrite) {
  1417. for (var i in source) {
  1418. mergeItem(target, source, i, overwrite);
  1419. }
  1420. return target;
  1421. }
  1422. var _ctx;
  1423. function getContext() {
  1424. if (!_ctx) {
  1425. require('../dep/excanvas');
  1426. if (window['G_vmlCanvasManager']) {
  1427. var _div = document.createElement('div');
  1428. _div.style.position = 'absolute';
  1429. _div.style.top = '-1000px';
  1430. document.body.appendChild(_div);
  1431. _ctx = G_vmlCanvasManager.initElement(_div).getContext('2d');
  1432. } else {
  1433. _ctx = document.createElement('canvas').getContext('2d');
  1434. }
  1435. }
  1436. return _ctx;
  1437. }
  1438. var _canvas;
  1439. var _pixelCtx;
  1440. var _width;
  1441. var _height;
  1442. var _offsetX = 0;
  1443. var _offsetY = 0;
  1444. function getPixelContext() {
  1445. if (!_pixelCtx) {
  1446. _canvas = document.createElement('canvas');
  1447. _width = _canvas.width;
  1448. _height = _canvas.height;
  1449. _pixelCtx = _canvas.getContext('2d');
  1450. }
  1451. return _pixelCtx;
  1452. }
  1453. function adjustCanvasSize(x, y) {
  1454. var _v = 100;
  1455. var _flag;
  1456. if (x + _offsetX > _width) {
  1457. _width = x + _offsetX + _v;
  1458. _canvas.width = _width;
  1459. _flag = true;
  1460. }
  1461. if (y + _offsetY > _height) {
  1462. _height = y + _offsetY + _v;
  1463. _canvas.height = _height;
  1464. _flag = true;
  1465. }
  1466. if (x < -_offsetX) {
  1467. _offsetX = Math.ceil(-x / _v) * _v;
  1468. _width += _offsetX;
  1469. _canvas.width = _width;
  1470. _flag = true;
  1471. }
  1472. if (y < -_offsetY) {
  1473. _offsetY = Math.ceil(-y / _v) * _v;
  1474. _height += _offsetY;
  1475. _canvas.height = _height;
  1476. _flag = true;
  1477. }
  1478. if (_flag) {
  1479. _pixelCtx.translate(_offsetX, _offsetY);
  1480. }
  1481. }
  1482. function getPixelOffset() {
  1483. return {
  1484. x: _offsetX,
  1485. y: _offsetY
  1486. };
  1487. }
  1488. function indexOf(array, value) {
  1489. if (array.indexOf) {
  1490. return array.indexOf(value);
  1491. }
  1492. for (var i = 0, len = array.length; i < len; i++) {
  1493. if (array[i] === value) {
  1494. return i;
  1495. }
  1496. }
  1497. return -1;
  1498. }
  1499. function inherits(clazz, baseClazz) {
  1500. var clazzPrototype = clazz.prototype;
  1501. function F() {
  1502. }
  1503. F.prototype = baseClazz.prototype;
  1504. clazz.prototype = new F();
  1505. for (var prop in clazzPrototype) {
  1506. clazz.prototype[prop] = clazzPrototype[prop];
  1507. }
  1508. clazz.constructor = clazz;
  1509. }
  1510. return {
  1511. inherits: inherits,
  1512. clone: clone,
  1513. merge: merge,
  1514. getContext: getContext,
  1515. getPixelContext: getPixelContext,
  1516. getPixelOffset: getPixelOffset,
  1517. adjustCanvasSize: adjustCanvasSize,
  1518. indexOf: indexOf
  1519. };
  1520. });define('zrender/tool/event', [
  1521. 'require',
  1522. '../mixin/Eventful'
  1523. ], function (require) {
  1524. 'use strict';
  1525. var Eventful = require('../mixin/Eventful');
  1526. function getX(e) {
  1527. 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;
  1528. }
  1529. function getY(e) {
  1530. 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;
  1531. }
  1532. function getDelta(e) {
  1533. return typeof e.zrenderDelta != 'undefined' && e.zrenderDelta || typeof e.wheelDelta != 'undefined' && e.wheelDelta || typeof e.detail != 'undefined' && -e.detail;
  1534. }
  1535. var stop = typeof window.addEventListener === 'function' ? function (e) {
  1536. e.preventDefault();
  1537. e.stopPropagation();
  1538. e.cancelBubble = true;
  1539. } : function (e) {
  1540. e.returnValue = false;
  1541. e.cancelBubble = true;
  1542. };
  1543. return {
  1544. getX: getX,
  1545. getY: getY,
  1546. getDelta: getDelta,
  1547. stop: stop,
  1548. Dispatcher: Eventful
  1549. };
  1550. });define('zrender/tool/env', [], function () {
  1551. function detect(ua) {
  1552. var os = this.os = {};
  1553. var browser = this.browser = {};
  1554. var webkit = ua.match(/Web[kK]it[\/]{0,1}([\d.]+)/);
  1555. var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
  1556. var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
  1557. var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
  1558. var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/);
  1559. var webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/);
  1560. var touchpad = webos && ua.match(/TouchPad/);
  1561. var kindle = ua.match(/Kindle\/([\d.]+)/);
  1562. var silk = ua.match(/Silk\/([\d._]+)/);
  1563. var blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/);
  1564. var bb10 = ua.match(/(BB10).*Version\/([\d.]+)/);
  1565. var rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/);
  1566. var playbook = ua.match(/PlayBook/);
  1567. var chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/);
  1568. var firefox = ua.match(/Firefox\/([\d.]+)/);
  1569. var ie = ua.match(/MSIE ([\d.]+)/);
  1570. var safari = webkit && ua.match(/Mobile\//) && !chrome;
  1571. var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;
  1572. var ie = ua.match(/MSIE\s([\d.]+)/);
  1573. if (browser.webkit = !!webkit)
  1574. browser.version = webkit[1];
  1575. if (android)
  1576. os.android = true, os.version = android[2];
  1577. if (iphone && !ipod)
  1578. os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');
  1579. if (ipad)
  1580. os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');
  1581. if (ipod)
  1582. os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
  1583. if (webos)
  1584. os.webos = true, os.version = webos[2];
  1585. if (touchpad)
  1586. os.touchpad = true;
  1587. if (blackberry)
  1588. os.blackberry = true, os.version = blackberry[2];
  1589. if (bb10)
  1590. os.bb10 = true, os.version = bb10[2];
  1591. if (rimtabletos)
  1592. os.rimtabletos = true, os.version = rimtabletos[2];
  1593. if (playbook)
  1594. browser.playbook = true;
  1595. if (kindle)
  1596. os.kindle = true, os.version = kindle[1];
  1597. if (silk)
  1598. browser.silk = true, browser.version = silk[1];
  1599. if (!silk && os.android && ua.match(/Kindle Fire/))
  1600. browser.silk = true;
  1601. if (chrome)
  1602. browser.chrome = true, browser.version = chrome[1];
  1603. if (firefox)
  1604. browser.firefox = true, browser.version = firefox[1];
  1605. if (ie)
  1606. browser.ie = true, browser.version = ie[1];
  1607. if (safari && (ua.match(/Safari/) || !!os.ios))
  1608. browser.safari = true;
  1609. if (webview)
  1610. browser.webview = true;
  1611. if (ie)
  1612. browser.ie = true, browser.version = ie[1];
  1613. os.tablet = !!(ipad || playbook || android && !ua.match(/Mobile/) || firefox && ua.match(/Tablet/) || ie && !ua.match(/Phone/) && ua.match(/Touch/));
  1614. 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/)));
  1615. return {
  1616. browser: browser,
  1617. os: os,
  1618. canvasSupported: document.createElement('canvas').getContext ? true : false
  1619. };
  1620. }
  1621. return detect(navigator.userAgent);
  1622. });define('zrender', ['zrender/zrender'], function (main) {return main;});
  1623. define('zrender/zrender', [
  1624. 'require',
  1625. './dep/excanvas',
  1626. './tool/util',
  1627. './tool/log',
  1628. './tool/guid',
  1629. './Handler',
  1630. './Painter',
  1631. './Storage',
  1632. './animation/Animation',
  1633. './tool/env'
  1634. ], function (require) {
  1635. require('./dep/excanvas');
  1636. var util = require('./tool/util');
  1637. var log = require('./tool/log');
  1638. var guid = require('./tool/guid');
  1639. var Handler = require('./Handler');
  1640. var Painter = require('./Painter');
  1641. var Storage = require('./Storage');
  1642. var Animation = require('./animation/Animation');
  1643. var _instances = {};
  1644. var zrender = {};
  1645. zrender.version = '2.0.8';
  1646. zrender.init = function (dom) {
  1647. var zr = new ZRender(guid(), dom);
  1648. _instances[zr.id] = zr;
  1649. return zr;
  1650. };
  1651. zrender.dispose = function (zr) {
  1652. if (zr) {
  1653. zr.dispose();
  1654. } else {
  1655. for (var key in _instances) {
  1656. _instances[key].dispose();
  1657. }
  1658. _instances = {};
  1659. }
  1660. return zrender;
  1661. };
  1662. zrender.getInstance = function (id) {
  1663. return _instances[id];
  1664. };
  1665. zrender.delInstance = function (id) {
  1666. delete _instances[id];
  1667. return zrender;
  1668. };
  1669. function getFrameCallback(zrInstance) {
  1670. return function () {
  1671. var animatingElements = zrInstance.animatingElements;
  1672. for (var i = 0, l = animatingElements.length; i < l; i++) {
  1673. zrInstance.storage.mod(animatingElements[i].id);
  1674. }
  1675. if (animatingElements.length || zrInstance._needsRefreshNextFrame) {
  1676. zrInstance.refresh();
  1677. }
  1678. };
  1679. }
  1680. var ZRender = function (id, dom) {
  1681. this.id = id;
  1682. this.env = require('./tool/env');
  1683. this.storage = new Storage();
  1684. this.painter = new Painter(dom, this.storage);
  1685. this.handler = new Handler(dom, this.storage, this.painter);
  1686. this.animatingElements = [];
  1687. this.animation = new Animation({ stage: { update: getFrameCallback(this) } });
  1688. this.animation.start();
  1689. var self = this;
  1690. this.painter.refreshNextFrame = function () {
  1691. self.refreshNextFrame();
  1692. };
  1693. this._needsRefreshNextFrame = false;
  1694. var self = this;
  1695. var storage = this.storage;
  1696. var oldDelFromMap = storage.delFromMap;
  1697. storage.delFromMap = function (elId) {
  1698. var el = storage.get(elId);
  1699. self.stopAnimation(el);
  1700. oldDelFromMap.call(storage, elId);
  1701. };
  1702. };
  1703. ZRender.prototype.getId = function () {
  1704. return this.id;
  1705. };
  1706. ZRender.prototype.addShape = function (shape) {
  1707. this.addElement(shape);
  1708. return this;
  1709. };
  1710. ZRender.prototype.addGroup = function (group) {
  1711. this.addElement(group);
  1712. return this;
  1713. };
  1714. ZRender.prototype.delShape = function (shapeId) {
  1715. this.delElement(shapeId);
  1716. return this;
  1717. };
  1718. ZRender.prototype.delGroup = function (groupId) {
  1719. this.delElement(groupId);
  1720. return this;
  1721. };
  1722. ZRender.prototype.modShape = function (shapeId, shape) {
  1723. this.modElement(shapeId, shape);
  1724. return this;
  1725. };
  1726. ZRender.prototype.modGroup = function (groupId, group) {
  1727. this.modElement(groupId, group);
  1728. return this;
  1729. };
  1730. ZRender.prototype.addElement = function (el) {
  1731. this.storage.addRoot(el);
  1732. this._needsRefreshNextFrame = true;
  1733. return this;
  1734. };
  1735. ZRender.prototype.delElement = function (el) {
  1736. this.storage.delRoot(el);
  1737. this._needsRefreshNextFrame = true;
  1738. return this;
  1739. };
  1740. ZRender.prototype.modElement = function (el, params) {
  1741. this.storage.mod(el, params);
  1742. this._needsRefreshNextFrame = true;
  1743. return this;
  1744. };
  1745. ZRender.prototype.modLayer = function (zLevel, config) {
  1746. this.painter.modLayer(zLevel, config);
  1747. this._needsRefreshNextFrame = true;
  1748. return this;
  1749. };
  1750. ZRender.prototype.addHoverShape = function (shape) {
  1751. this.storage.addHover(shape);
  1752. return this;
  1753. };
  1754. ZRender.prototype.render = function (callback) {
  1755. this.painter.render(callback);
  1756. this._needsRefreshNextFrame = false;
  1757. return this;
  1758. };
  1759. ZRender.prototype.refresh = function (callback) {
  1760. this.painter.refresh(callback);
  1761. this._needsRefreshNextFrame = false;
  1762. return this;
  1763. };
  1764. ZRender.prototype.refreshNextFrame = function () {
  1765. this._needsRefreshNextFrame = true;
  1766. return this;
  1767. };
  1768. ZRender.prototype.refreshHover = function (callback) {
  1769. this.painter.refreshHover(callback);
  1770. return this;
  1771. };
  1772. ZRender.prototype.refreshShapes = function (shapeList, callback) {
  1773. this.painter.refreshShapes(shapeList, callback);
  1774. return this;
  1775. };
  1776. ZRender.prototype.resize = function () {
  1777. this.painter.resize();
  1778. return this;
  1779. };
  1780. ZRender.prototype.animate = function (el, path, loop) {
  1781. if (typeof el === 'string') {
  1782. el = this.storage.get(el);
  1783. }
  1784. if (el) {
  1785. var target;
  1786. if (path) {
  1787. var pathSplitted = path.split('.');
  1788. var prop = el;
  1789. for (var i = 0, l = pathSplitted.length; i < l; i++) {
  1790. if (!prop) {
  1791. continue;
  1792. }
  1793. prop = prop[pathSplitted[i]];
  1794. }
  1795. if (prop) {
  1796. target = prop;
  1797. }
  1798. } else {
  1799. target = el;
  1800. }
  1801. if (!target) {
  1802. log('Property "' + path + '" is not existed in element ' + el.id);
  1803. return;
  1804. }
  1805. var animatingElements = this.animatingElements;
  1806. if (el.__animators == null) {
  1807. el.__animators = [];
  1808. }
  1809. var animators = el.__animators;
  1810. if (animators.length === 0) {
  1811. animatingElements.push(el);
  1812. }
  1813. var animator = this.animation.animate(target, { loop: loop }).done(function () {
  1814. var idx = util.indexOf(el.__animators, animator);
  1815. if (idx >= 0) {
  1816. animators.splice(idx, 1);
  1817. }
  1818. if (animators.length === 0) {
  1819. var idx = util.indexOf(animatingElements, el);
  1820. animatingElements.splice(idx, 1);
  1821. }
  1822. });
  1823. animators.push(animator);
  1824. return animator;
  1825. } else {
  1826. log('Element not existed');
  1827. }
  1828. };
  1829. ZRender.prototype.stopAnimation = function (el) {
  1830. if (el.__animators) {
  1831. var animators = el.__animators;
  1832. var len = animators.length;
  1833. for (var i = 0; i < len; i++) {
  1834. animators[i].stop();
  1835. }
  1836. if (len > 0) {
  1837. var animatingElements = this.animatingElements;
  1838. var idx = util.indexOf(animatingElements, el);
  1839. if (idx >= 0) {
  1840. animatingElements.splice(idx, 1);
  1841. }
  1842. }
  1843. animators.length = 0;
  1844. }
  1845. return this;
  1846. };
  1847. ZRender.prototype.clearAnimation = function () {
  1848. this.animation.clear();
  1849. this.animatingElements.length = 0;
  1850. return this;
  1851. };
  1852. ZRender.prototype.showLoading = function (loadingEffect) {
  1853. this.painter.showLoading(loadingEffect);
  1854. return this;
  1855. };
  1856. ZRender.prototype.hideLoading = function () {
  1857. this.painter.hideLoading();
  1858. return this;
  1859. };
  1860. ZRender.prototype.getWidth = function () {
  1861. return this.painter.getWidth();
  1862. };
  1863. ZRender.prototype.getHeight = function () {
  1864. return this.painter.getHeight();
  1865. };
  1866. ZRender.prototype.toDataURL = function (type, backgroundColor, args) {
  1867. return this.painter.toDataURL(type, backgroundColor, args);
  1868. };
  1869. ZRender.prototype.shapeToImage = function (e, width, height) {
  1870. var id = guid();
  1871. return this.painter.shapeToImage(id, e, width, height);
  1872. };
  1873. ZRender.prototype.on = function (eventName, eventHandler, context) {
  1874. this.handler.on(eventName, eventHandler, context);
  1875. return this;
  1876. };
  1877. ZRender.prototype.un = function (eventName, eventHandler) {
  1878. this.handler.un(eventName, eventHandler);
  1879. return this;
  1880. };
  1881. ZRender.prototype.trigger = function (eventName, event) {
  1882. this.handler.trigger(eventName, event);
  1883. return this;
  1884. };
  1885. ZRender.prototype.clear = function () {
  1886. this.storage.delRoot();
  1887. this.painter.clear();
  1888. return this;
  1889. };
  1890. ZRender.prototype.dispose = function () {
  1891. this.animation.stop();
  1892. this.clear();
  1893. this.storage.dispose();
  1894. this.painter.dispose();
  1895. this.handler.dispose();
  1896. this.animation = this.animatingElements = this.storage = this.painter = this.handler = null;
  1897. zrender.delInstance(this.id);
  1898. };
  1899. return zrender;
  1900. });define('zrender/config', [], function () {
  1901. var config = {
  1902. EVENT: {
  1903. RESIZE: 'resize',
  1904. CLICK: 'click',
  1905. DBLCLICK: 'dblclick',
  1906. MOUSEWHEEL: 'mousewheel',
  1907. MOUSEMOVE: 'mousemove',
  1908. MOUSEOVER: 'mouseover',
  1909. MOUSEOUT: 'mouseout',
  1910. MOUSEDOWN: 'mousedown',
  1911. MOUSEUP: 'mouseup',
  1912. GLOBALOUT: 'globalout',
  1913. DRAGSTART: 'dragstart',
  1914. DRAGEND: 'dragend',
  1915. DRAGENTER: 'dragenter',
  1916. DRAGOVER: 'dragover',
  1917. DRAGLEAVE: 'dragleave',
  1918. DROP: 'drop',
  1919. touchClickDelay: 300
  1920. },
  1921. catchBrushException: false,
  1922. debugMode: 0,
  1923. devicePixelRatio: Math.max(window.devicePixelRatio || 1, 1)
  1924. };
  1925. return config;
  1926. });define('echarts/chart/island', [
  1927. 'require',
  1928. './base',
  1929. 'zrender/shape/Circle',
  1930. '../config',
  1931. '../util/ecData',
  1932. 'zrender/tool/util',
  1933. 'zrender/tool/event',
  1934. 'zrender/tool/color',
  1935. '../util/accMath',
  1936. '../chart'
  1937. ], function (require) {
  1938. var ChartBase = require('./base');
  1939. var CircleShape = require('zrender/shape/Circle');
  1940. var ecConfig = require('../config');
  1941. ecConfig.island = {
  1942. zlevel: 0,
  1943. z: 5,
  1944. r: 15,
  1945. calculateStep: 0.1
  1946. };
  1947. var ecData = require('../util/ecData');
  1948. var zrUtil = require('zrender/tool/util');
  1949. var zrEvent = require('zrender/tool/event');
  1950. function Island(ecTheme, messageCenter, zr, option, myChart) {
  1951. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  1952. this._nameConnector;
  1953. this._valueConnector;
  1954. this._zrHeight = this.zr.getHeight();
  1955. this._zrWidth = this.zr.getWidth();
  1956. var self = this;
  1957. self.shapeHandler.onmousewheel = function (param) {
  1958. var shape = param.target;
  1959. var event = param.event;
  1960. var delta = zrEvent.getDelta(event);
  1961. delta = delta > 0 ? -1 : 1;
  1962. shape.style.r -= delta;
  1963. shape.style.r = shape.style.r < 5 ? 5 : shape.style.r;
  1964. var value = ecData.get(shape, 'value');
  1965. var dvalue = value * self.option.island.calculateStep;
  1966. value = dvalue > 1 ? Math.round(value - dvalue * delta) : +(value - dvalue * delta).toFixed(2);
  1967. var name = ecData.get(shape, 'name');
  1968. shape.style.text = name + ':' + value;
  1969. ecData.set(shape, 'value', value);
  1970. ecData.set(shape, 'name', name);
  1971. self.zr.modShape(shape.id);
  1972. self.zr.refreshNextFrame();
  1973. zrEvent.stop(event);
  1974. };
  1975. }
  1976. Island.prototype = {
  1977. type: ecConfig.CHART_TYPE_ISLAND,
  1978. _combine: function (tarShape, srcShape) {
  1979. var zrColor = require('zrender/tool/color');
  1980. var accMath = require('../util/accMath');
  1981. var value = accMath.accAdd(ecData.get(tarShape, 'value'), ecData.get(srcShape, 'value'));
  1982. var name = ecData.get(tarShape, 'name') + this._nameConnector + ecData.get(srcShape, 'name');
  1983. tarShape.style.text = name + this._valueConnector + value;
  1984. ecData.set(tarShape, 'value', value);
  1985. ecData.set(tarShape, 'name', name);
  1986. tarShape.style.r = this.option.island.r;
  1987. tarShape.style.color = zrColor.mix(tarShape.style.color, srcShape.style.color);
  1988. },
  1989. refresh: function (newOption) {
  1990. if (newOption) {
  1991. newOption.island = this.reformOption(newOption.island);
  1992. this.option = newOption;
  1993. this._nameConnector = this.option.nameConnector;
  1994. this._valueConnector = this.option.valueConnector;
  1995. }
  1996. },
  1997. getOption: function () {
  1998. return this.option;
  1999. },
  2000. resize: function () {
  2001. var newWidth = this.zr.getWidth();
  2002. var newHieght = this.zr.getHeight();
  2003. var xScale = newWidth / (this._zrWidth || newWidth);
  2004. var yScale = newHieght / (this._zrHeight || newHieght);
  2005. if (xScale === 1 && yScale === 1) {
  2006. return;
  2007. }
  2008. this._zrWidth = newWidth;
  2009. this._zrHeight = newHieght;
  2010. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  2011. this.zr.modShape(this.shapeList[i].id, {
  2012. style: {
  2013. x: Math.round(this.shapeList[i].style.x * xScale),
  2014. y: Math.round(this.shapeList[i].style.y * yScale)
  2015. }
  2016. });
  2017. }
  2018. },
  2019. add: function (shape) {
  2020. var name = ecData.get(shape, 'name');
  2021. var value = ecData.get(shape, 'value');
  2022. var seriesName = ecData.get(shape, 'series') != null ? ecData.get(shape, 'series').name : '';
  2023. var font = this.getFont(this.option.island.textStyle);
  2024. var islandShape = {
  2025. zlevel: this.getZlevelBase(),
  2026. z: this.getZBase(),
  2027. style: {
  2028. x: shape.style.x,
  2029. y: shape.style.y,
  2030. r: this.option.island.r,
  2031. color: shape.style.color || shape.style.strokeColor,
  2032. text: name + this._valueConnector + value,
  2033. textFont: font
  2034. },
  2035. draggable: true,
  2036. hoverable: true,
  2037. onmousewheel: this.shapeHandler.onmousewheel,
  2038. _type: 'island'
  2039. };
  2040. if (islandShape.style.color === '#fff') {
  2041. islandShape.style.color = shape.style.strokeColor;
  2042. }
  2043. this.setCalculable(islandShape);
  2044. islandShape.dragEnableTime = 0;
  2045. ecData.pack(islandShape, { name: seriesName }, -1, value, -1, name);
  2046. islandShape = new CircleShape(islandShape);
  2047. this.shapeList.push(islandShape);
  2048. this.zr.addShape(islandShape);
  2049. },
  2050. del: function (shape) {
  2051. this.zr.delShape(shape.id);
  2052. var newShapeList = [];
  2053. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  2054. if (this.shapeList[i].id != shape.id) {
  2055. newShapeList.push(this.shapeList[i]);
  2056. }
  2057. }
  2058. this.shapeList = newShapeList;
  2059. },
  2060. ondrop: function (param, status) {
  2061. if (!this.isDrop || !param.target) {
  2062. return;
  2063. }
  2064. var target = param.target;
  2065. var dragged = param.dragged;
  2066. this._combine(target, dragged);
  2067. this.zr.modShape(target.id);
  2068. status.dragIn = true;
  2069. this.isDrop = false;
  2070. return;
  2071. },
  2072. ondragend: function (param, status) {
  2073. var target = param.target;
  2074. if (!this.isDragend) {
  2075. if (!status.dragIn) {
  2076. target.style.x = zrEvent.getX(param.event);
  2077. target.style.y = zrEvent.getY(param.event);
  2078. this.add(target);
  2079. status.needRefresh = true;
  2080. }
  2081. } else {
  2082. if (status.dragIn) {
  2083. this.del(target);
  2084. status.needRefresh = true;
  2085. }
  2086. }
  2087. this.isDragend = false;
  2088. return;
  2089. }
  2090. };
  2091. zrUtil.inherits(Island, ChartBase);
  2092. require('../chart').define('island', Island);
  2093. return Island;
  2094. });define('echarts/component/toolbox', [
  2095. 'require',
  2096. './base',
  2097. 'zrender/shape/Line',
  2098. 'zrender/shape/Image',
  2099. 'zrender/shape/Rectangle',
  2100. '../util/shape/Icon',
  2101. '../config',
  2102. 'zrender/tool/util',
  2103. 'zrender/config',
  2104. 'zrender/tool/event',
  2105. './dataView',
  2106. '../component'
  2107. ], function (require) {
  2108. var Base = require('./base');
  2109. var LineShape = require('zrender/shape/Line');
  2110. var ImageShape = require('zrender/shape/Image');
  2111. var RectangleShape = require('zrender/shape/Rectangle');
  2112. var IconShape = require('../util/shape/Icon');
  2113. var ecConfig = require('../config');
  2114. ecConfig.toolbox = {
  2115. zlevel: 0,
  2116. z: 6,
  2117. show: false,
  2118. orient: 'horizontal',
  2119. x: 'right',
  2120. y: 'top',
  2121. color: [
  2122. '#1e90ff',
  2123. '#22bb22',
  2124. '#4b0082',
  2125. '#d2691e'
  2126. ],
  2127. disableColor: '#ddd',
  2128. effectiveColor: 'red',
  2129. backgroundColor: 'rgba(0,0,0,0)',
  2130. borderColor: '#ccc',
  2131. borderWidth: 0,
  2132. padding: 5,
  2133. itemGap: 10,
  2134. itemSize: 16,
  2135. showTitle: true,
  2136. feature: {
  2137. mark: {
  2138. show: false,
  2139. title: {
  2140. mark: '辅助线开关',
  2141. markUndo: '删除辅助线',
  2142. markClear: '清空辅助线'
  2143. },
  2144. lineStyle: {
  2145. width: 1,
  2146. color: '#1e90ff',
  2147. type: 'dashed'
  2148. }
  2149. },
  2150. dataZoom: {
  2151. show: false,
  2152. title: {
  2153. dataZoom: '区域缩放',
  2154. dataZoomReset: '区域缩放后退'
  2155. }
  2156. },
  2157. dataView: {
  2158. show: false,
  2159. title: '数据视图',
  2160. readOnly: false,
  2161. lang: [
  2162. '数据视图',
  2163. '关闭',
  2164. '刷新'
  2165. ]
  2166. },
  2167. magicType: {
  2168. show: false,
  2169. title: {
  2170. line: '折线图切换',
  2171. bar: '柱形图切换',
  2172. stack: '堆积',
  2173. tiled: '平铺',
  2174. force: '力导向布局图切换',
  2175. chord: '和弦图切换',
  2176. pie: '饼图切换',
  2177. funnel: '漏斗图切换'
  2178. },
  2179. type: []
  2180. },
  2181. restore: {
  2182. show: false,
  2183. title: '还原'
  2184. },
  2185. saveAsImage: {
  2186. show: false,
  2187. title: '保存为图片',
  2188. type: 'png',
  2189. lang: ['点击保存']
  2190. }
  2191. }
  2192. };
  2193. var zrUtil = require('zrender/tool/util');
  2194. var zrConfig = require('zrender/config');
  2195. var zrEvent = require('zrender/tool/event');
  2196. var _MAGICTYPE_STACK = 'stack';
  2197. var _MAGICTYPE_TILED = 'tiled';
  2198. function Toolbox(ecTheme, messageCenter, zr, option, myChart) {
  2199. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  2200. this.dom = myChart.dom;
  2201. this._magicType = {};
  2202. this._magicMap = {};
  2203. this._isSilence = false;
  2204. this._iconList;
  2205. this._iconShapeMap = {};
  2206. this._featureTitle = {};
  2207. this._featureIcon = {};
  2208. this._featureColor = {};
  2209. this._featureOption = {};
  2210. this._enableColor = 'red';
  2211. this._disableColor = '#ccc';
  2212. this._markShapeList = [];
  2213. var self = this;
  2214. self._onMark = function (param) {
  2215. self.__onMark(param);
  2216. };
  2217. self._onMarkUndo = function (param) {
  2218. self.__onMarkUndo(param);
  2219. };
  2220. self._onMarkClear = function (param) {
  2221. self.__onMarkClear(param);
  2222. };
  2223. self._onDataZoom = function (param) {
  2224. self.__onDataZoom(param);
  2225. };
  2226. self._onDataZoomReset = function (param) {
  2227. self.__onDataZoomReset(param);
  2228. };
  2229. self._onDataView = function (param) {
  2230. self.__onDataView(param);
  2231. };
  2232. self._onRestore = function (param) {
  2233. self.__onRestore(param);
  2234. };
  2235. self._onSaveAsImage = function (param) {
  2236. self.__onSaveAsImage(param);
  2237. };
  2238. self._onMagicType = function (param) {
  2239. self.__onMagicType(param);
  2240. };
  2241. self._onCustomHandler = function (param) {
  2242. self.__onCustomHandler(param);
  2243. };
  2244. self._onmousemove = function (param) {
  2245. return self.__onmousemove(param);
  2246. };
  2247. self._onmousedown = function (param) {
  2248. return self.__onmousedown(param);
  2249. };
  2250. self._onmouseup = function (param) {
  2251. return self.__onmouseup(param);
  2252. };
  2253. self._onclick = function (param) {
  2254. return self.__onclick(param);
  2255. };
  2256. }
  2257. Toolbox.prototype = {
  2258. type: ecConfig.COMPONENT_TYPE_TOOLBOX,
  2259. _buildShape: function () {
  2260. this._iconList = [];
  2261. var toolboxOption = this.option.toolbox;
  2262. this._enableColor = toolboxOption.effectiveColor;
  2263. this._disableColor = toolboxOption.disableColor;
  2264. var feature = toolboxOption.feature;
  2265. var iconName = [];
  2266. for (var key in feature) {
  2267. if (feature[key].show) {
  2268. switch (key) {
  2269. case 'mark':
  2270. iconName.push({
  2271. key: key,
  2272. name: 'mark'
  2273. });
  2274. iconName.push({
  2275. key: key,
  2276. name: 'markUndo'
  2277. });
  2278. iconName.push({
  2279. key: key,
  2280. name: 'markClear'
  2281. });
  2282. break;
  2283. case 'magicType':
  2284. for (var i = 0, l = feature[key].type.length; i < l; i++) {
  2285. feature[key].title[feature[key].type[i] + 'Chart'] = feature[key].title[feature[key].type[i]];
  2286. if (feature[key].option) {
  2287. feature[key].option[feature[key].type[i] + 'Chart'] = feature[key].option[feature[key].type[i]];
  2288. }
  2289. iconName.push({
  2290. key: key,
  2291. name: feature[key].type[i] + 'Chart'
  2292. });
  2293. }
  2294. break;
  2295. case 'dataZoom':
  2296. iconName.push({
  2297. key: key,
  2298. name: 'dataZoom'
  2299. });
  2300. iconName.push({
  2301. key: key,
  2302. name: 'dataZoomReset'
  2303. });
  2304. break;
  2305. case 'saveAsImage':
  2306. if (this.canvasSupported) {
  2307. iconName.push({
  2308. key: key,
  2309. name: 'saveAsImage'
  2310. });
  2311. }
  2312. break;
  2313. default:
  2314. iconName.push({
  2315. key: key,
  2316. name: key
  2317. });
  2318. break;
  2319. }
  2320. }
  2321. }
  2322. if (iconName.length > 0) {
  2323. var name;
  2324. var key;
  2325. for (var i = 0, l = iconName.length; i < l; i++) {
  2326. name = iconName[i].name;
  2327. key = iconName[i].key;
  2328. this._iconList.push(name);
  2329. this._featureTitle[name] = feature[key].title[name] || feature[key].title;
  2330. if (feature[key].icon) {
  2331. this._featureIcon[name] = feature[key].icon[name] || feature[key].icon;
  2332. }
  2333. if (feature[key].color) {
  2334. this._featureColor[name] = feature[key].color[name] || feature[key].color;
  2335. }
  2336. if (feature[key].option) {
  2337. this._featureOption[name] = feature[key].option[name] || feature[key].option;
  2338. }
  2339. }
  2340. this._itemGroupLocation = this._getItemGroupLocation();
  2341. this._buildBackground();
  2342. this._buildItem();
  2343. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  2344. this.zr.addShape(this.shapeList[i]);
  2345. }
  2346. if (this._iconShapeMap['mark']) {
  2347. this._iconDisable(this._iconShapeMap['markUndo']);
  2348. this._iconDisable(this._iconShapeMap['markClear']);
  2349. }
  2350. if (this._iconShapeMap['dataZoomReset'] && this._zoomQueue.length === 0) {
  2351. this._iconDisable(this._iconShapeMap['dataZoomReset']);
  2352. }
  2353. }
  2354. },
  2355. _buildItem: function () {
  2356. var toolboxOption = this.option.toolbox;
  2357. var iconLength = this._iconList.length;
  2358. var lastX = this._itemGroupLocation.x;
  2359. var lastY = this._itemGroupLocation.y;
  2360. var itemSize = toolboxOption.itemSize;
  2361. var itemGap = toolboxOption.itemGap;
  2362. var itemShape;
  2363. var color = toolboxOption.color instanceof Array ? toolboxOption.color : [toolboxOption.color];
  2364. var textFont = this.getFont(toolboxOption.textStyle);
  2365. var textPosition;
  2366. var textAlign;
  2367. var textBaseline;
  2368. if (toolboxOption.orient === 'horizontal') {
  2369. textPosition = this._itemGroupLocation.y / this.zr.getHeight() < 0.5 ? 'bottom' : 'top';
  2370. textAlign = this._itemGroupLocation.x / this.zr.getWidth() < 0.5 ? 'left' : 'right';
  2371. textBaseline = this._itemGroupLocation.y / this.zr.getHeight() < 0.5 ? 'top' : 'bottom';
  2372. } else {
  2373. textPosition = this._itemGroupLocation.x / this.zr.getWidth() < 0.5 ? 'right' : 'left';
  2374. }
  2375. this._iconShapeMap = {};
  2376. var self = this;
  2377. for (var i = 0; i < iconLength; i++) {
  2378. itemShape = {
  2379. type: 'icon',
  2380. zlevel: this.getZlevelBase(),
  2381. z: this.getZBase(),
  2382. style: {
  2383. x: lastX,
  2384. y: lastY,
  2385. width: itemSize,
  2386. height: itemSize,
  2387. iconType: this._iconList[i],
  2388. lineWidth: 1,
  2389. strokeColor: this._featureColor[this._iconList[i]] || color[i % color.length],
  2390. brushType: 'stroke'
  2391. },
  2392. highlightStyle: {
  2393. lineWidth: 1,
  2394. text: toolboxOption.showTitle ? this._featureTitle[this._iconList[i]] : undefined,
  2395. textFont: textFont,
  2396. textPosition: textPosition,
  2397. strokeColor: this._featureColor[this._iconList[i]] || color[i % color.length]
  2398. },
  2399. hoverable: true,
  2400. clickable: true
  2401. };
  2402. if (this._featureIcon[this._iconList[i]]) {
  2403. itemShape.style.image = this._featureIcon[this._iconList[i]].replace(new RegExp('^image:\\/\\/'), '');
  2404. itemShape.style.opacity = 0.8;
  2405. itemShape.highlightStyle.opacity = 1;
  2406. itemShape.type = 'image';
  2407. }
  2408. if (toolboxOption.orient === 'horizontal') {
  2409. if (i === 0 && textAlign === 'left') {
  2410. itemShape.highlightStyle.textPosition = 'specific';
  2411. itemShape.highlightStyle.textAlign = textAlign;
  2412. itemShape.highlightStyle.textBaseline = textBaseline;
  2413. itemShape.highlightStyle.textX = lastX;
  2414. itemShape.highlightStyle.textY = textBaseline === 'top' ? lastY + itemSize + 10 : lastY - 10;
  2415. }
  2416. if (i === iconLength - 1 && textAlign === 'right') {
  2417. itemShape.highlightStyle.textPosition = 'specific';
  2418. itemShape.highlightStyle.textAlign = textAlign;
  2419. itemShape.highlightStyle.textBaseline = textBaseline;
  2420. itemShape.highlightStyle.textX = lastX + itemSize;
  2421. itemShape.highlightStyle.textY = textBaseline === 'top' ? lastY + itemSize + 10 : lastY - 10;
  2422. }
  2423. }
  2424. switch (this._iconList[i]) {
  2425. case 'mark':
  2426. itemShape.onclick = self._onMark;
  2427. break;
  2428. case 'markUndo':
  2429. itemShape.onclick = self._onMarkUndo;
  2430. break;
  2431. case 'markClear':
  2432. itemShape.onclick = self._onMarkClear;
  2433. break;
  2434. case 'dataZoom':
  2435. itemShape.onclick = self._onDataZoom;
  2436. break;
  2437. case 'dataZoomReset':
  2438. itemShape.onclick = self._onDataZoomReset;
  2439. break;
  2440. case 'dataView':
  2441. if (!this._dataView) {
  2442. var DataView = require('./dataView');
  2443. this._dataView = new DataView(this.ecTheme, this.messageCenter, this.zr, this.option, this.myChart);
  2444. }
  2445. itemShape.onclick = self._onDataView;
  2446. break;
  2447. case 'restore':
  2448. itemShape.onclick = self._onRestore;
  2449. break;
  2450. case 'saveAsImage':
  2451. itemShape.onclick = self._onSaveAsImage;
  2452. break;
  2453. default:
  2454. if (this._iconList[i].match('Chart')) {
  2455. itemShape._name = this._iconList[i].replace('Chart', '');
  2456. itemShape.onclick = self._onMagicType;
  2457. } else {
  2458. itemShape.onclick = self._onCustomHandler;
  2459. }
  2460. break;
  2461. }
  2462. if (itemShape.type === 'icon') {
  2463. itemShape = new IconShape(itemShape);
  2464. } else if (itemShape.type === 'image') {
  2465. itemShape = new ImageShape(itemShape);
  2466. }
  2467. this.shapeList.push(itemShape);
  2468. this._iconShapeMap[this._iconList[i]] = itemShape;
  2469. if (toolboxOption.orient === 'horizontal') {
  2470. lastX += itemSize + itemGap;
  2471. } else {
  2472. lastY += itemSize + itemGap;
  2473. }
  2474. }
  2475. },
  2476. _buildBackground: function () {
  2477. var toolboxOption = this.option.toolbox;
  2478. var padding = this.reformCssArray(this.option.toolbox.padding);
  2479. this.shapeList.push(new RectangleShape({
  2480. zlevel: this.getZlevelBase(),
  2481. z: this.getZBase(),
  2482. hoverable: false,
  2483. style: {
  2484. x: this._itemGroupLocation.x - padding[3],
  2485. y: this._itemGroupLocation.y - padding[0],
  2486. width: this._itemGroupLocation.width + padding[3] + padding[1],
  2487. height: this._itemGroupLocation.height + padding[0] + padding[2],
  2488. brushType: toolboxOption.borderWidth === 0 ? 'fill' : 'both',
  2489. color: toolboxOption.backgroundColor,
  2490. strokeColor: toolboxOption.borderColor,
  2491. lineWidth: toolboxOption.borderWidth
  2492. }
  2493. }));
  2494. },
  2495. _getItemGroupLocation: function () {
  2496. var toolboxOption = this.option.toolbox;
  2497. var padding = this.reformCssArray(this.option.toolbox.padding);
  2498. var iconLength = this._iconList.length;
  2499. var itemGap = toolboxOption.itemGap;
  2500. var itemSize = toolboxOption.itemSize;
  2501. var totalWidth = 0;
  2502. var totalHeight = 0;
  2503. if (toolboxOption.orient === 'horizontal') {
  2504. totalWidth = (itemSize + itemGap) * iconLength - itemGap;
  2505. totalHeight = itemSize;
  2506. } else {
  2507. totalHeight = (itemSize + itemGap) * iconLength - itemGap;
  2508. totalWidth = itemSize;
  2509. }
  2510. var x;
  2511. var zrWidth = this.zr.getWidth();
  2512. switch (toolboxOption.x) {
  2513. case 'center':
  2514. x = Math.floor((zrWidth - totalWidth) / 2);
  2515. break;
  2516. case 'left':
  2517. x = padding[3] + toolboxOption.borderWidth;
  2518. break;
  2519. case 'right':
  2520. x = zrWidth - totalWidth - padding[1] - toolboxOption.borderWidth;
  2521. break;
  2522. default:
  2523. x = toolboxOption.x - 0;
  2524. x = isNaN(x) ? 0 : x;
  2525. break;
  2526. }
  2527. var y;
  2528. var zrHeight = this.zr.getHeight();
  2529. switch (toolboxOption.y) {
  2530. case 'top':
  2531. y = padding[0] + toolboxOption.borderWidth;
  2532. break;
  2533. case 'bottom':
  2534. y = zrHeight - totalHeight - padding[2] - toolboxOption.borderWidth;
  2535. break;
  2536. case 'center':
  2537. y = Math.floor((zrHeight - totalHeight) / 2);
  2538. break;
  2539. default:
  2540. y = toolboxOption.y - 0;
  2541. y = isNaN(y) ? 0 : y;
  2542. break;
  2543. }
  2544. return {
  2545. x: x,
  2546. y: y,
  2547. width: totalWidth,
  2548. height: totalHeight
  2549. };
  2550. },
  2551. __onmousemove: function (param) {
  2552. if (this._marking) {
  2553. this._markShape.style.xEnd = zrEvent.getX(param.event);
  2554. this._markShape.style.yEnd = zrEvent.getY(param.event);
  2555. this.zr.addHoverShape(this._markShape);
  2556. }
  2557. if (this._zooming) {
  2558. this._zoomShape.style.width = zrEvent.getX(param.event) - this._zoomShape.style.x;
  2559. this._zoomShape.style.height = zrEvent.getY(param.event) - this._zoomShape.style.y;
  2560. this.zr.addHoverShape(this._zoomShape);
  2561. this.dom.style.cursor = 'crosshair';
  2562. zrEvent.stop(param.event);
  2563. }
  2564. if (this._zoomStart && (this.dom.style.cursor != 'pointer' && this.dom.style.cursor != 'move')) {
  2565. this.dom.style.cursor = 'crosshair';
  2566. }
  2567. },
  2568. __onmousedown: function (param) {
  2569. if (param.target) {
  2570. return;
  2571. }
  2572. this._zooming = true;
  2573. var x = zrEvent.getX(param.event);
  2574. var y = zrEvent.getY(param.event);
  2575. var zoomOption = this.option.dataZoom || {};
  2576. this._zoomShape = new RectangleShape({
  2577. zlevel: this.getZlevelBase(),
  2578. z: this.getZBase(),
  2579. style: {
  2580. x: x,
  2581. y: y,
  2582. width: 1,
  2583. height: 1,
  2584. brushType: 'both'
  2585. },
  2586. highlightStyle: {
  2587. lineWidth: 2,
  2588. color: zoomOption.fillerColor || ecConfig.dataZoom.fillerColor,
  2589. strokeColor: zoomOption.handleColor || ecConfig.dataZoom.handleColor,
  2590. brushType: 'both'
  2591. }
  2592. });
  2593. this.zr.addHoverShape(this._zoomShape);
  2594. return true;
  2595. },
  2596. __onmouseup: function () {
  2597. if (!this._zoomShape || Math.abs(this._zoomShape.style.width) < 10 || Math.abs(this._zoomShape.style.height) < 10) {
  2598. this._zooming = false;
  2599. return true;
  2600. }
  2601. if (this._zooming && this.component.dataZoom) {
  2602. this._zooming = false;
  2603. var zoom = this.component.dataZoom.rectZoom(this._zoomShape.style);
  2604. if (zoom) {
  2605. this._zoomQueue.push({
  2606. start: zoom.start,
  2607. end: zoom.end,
  2608. start2: zoom.start2,
  2609. end2: zoom.end2
  2610. });
  2611. this._iconEnable(this._iconShapeMap['dataZoomReset']);
  2612. this.zr.refreshNextFrame();
  2613. }
  2614. }
  2615. return true;
  2616. },
  2617. __onclick: function (param) {
  2618. if (param.target) {
  2619. return;
  2620. }
  2621. if (this._marking) {
  2622. this._marking = false;
  2623. this._markShapeList.push(this._markShape);
  2624. this._iconEnable(this._iconShapeMap['markUndo']);
  2625. this._iconEnable(this._iconShapeMap['markClear']);
  2626. this.zr.addShape(this._markShape);
  2627. this.zr.refreshNextFrame();
  2628. } else if (this._markStart) {
  2629. this._marking = true;
  2630. var x = zrEvent.getX(param.event);
  2631. var y = zrEvent.getY(param.event);
  2632. this._markShape = new LineShape({
  2633. zlevel: this.getZlevelBase(),
  2634. z: this.getZBase(),
  2635. style: {
  2636. xStart: x,
  2637. yStart: y,
  2638. xEnd: x,
  2639. yEnd: y,
  2640. lineWidth: this.query(this.option, 'toolbox.feature.mark.lineStyle.width'),
  2641. strokeColor: this.query(this.option, 'toolbox.feature.mark.lineStyle.color'),
  2642. lineType: this.query(this.option, 'toolbox.feature.mark.lineStyle.type')
  2643. }
  2644. });
  2645. this.zr.addHoverShape(this._markShape);
  2646. }
  2647. },
  2648. __onMark: function (param) {
  2649. var target = param.target;
  2650. if (this._marking || this._markStart) {
  2651. this._resetMark();
  2652. this.zr.refreshNextFrame();
  2653. } else {
  2654. this._resetZoom();
  2655. this.zr.modShape(target.id, { style: { strokeColor: this._enableColor } });
  2656. this.zr.refreshNextFrame();
  2657. this._markStart = true;
  2658. var self = this;
  2659. setTimeout(function () {
  2660. self.zr && self.zr.on(zrConfig.EVENT.CLICK, self._onclick) && self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  2661. }, 10);
  2662. }
  2663. return true;
  2664. },
  2665. __onMarkUndo: function () {
  2666. if (this._marking) {
  2667. this._marking = false;
  2668. } else {
  2669. var len = this._markShapeList.length;
  2670. if (len >= 1) {
  2671. var target = this._markShapeList[len - 1];
  2672. this.zr.delShape(target.id);
  2673. this.zr.refreshNextFrame();
  2674. this._markShapeList.pop();
  2675. if (len === 1) {
  2676. this._iconDisable(this._iconShapeMap['markUndo']);
  2677. this._iconDisable(this._iconShapeMap['markClear']);
  2678. }
  2679. }
  2680. }
  2681. return true;
  2682. },
  2683. __onMarkClear: function () {
  2684. if (this._marking) {
  2685. this._marking = false;
  2686. }
  2687. var len = this._markShapeList.length;
  2688. if (len > 0) {
  2689. while (len--) {
  2690. this.zr.delShape(this._markShapeList.pop().id);
  2691. }
  2692. this._iconDisable(this._iconShapeMap['markUndo']);
  2693. this._iconDisable(this._iconShapeMap['markClear']);
  2694. this.zr.refreshNextFrame();
  2695. }
  2696. return true;
  2697. },
  2698. __onDataZoom: function (param) {
  2699. var target = param.target;
  2700. if (this._zooming || this._zoomStart) {
  2701. this._resetZoom();
  2702. this.zr.refreshNextFrame();
  2703. this.dom.style.cursor = 'default';
  2704. } else {
  2705. this._resetMark();
  2706. this.zr.modShape(target.id, { style: { strokeColor: this._enableColor } });
  2707. this.zr.refreshNextFrame();
  2708. this._zoomStart = true;
  2709. var self = this;
  2710. setTimeout(function () {
  2711. 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);
  2712. }, 10);
  2713. this.dom.style.cursor = 'crosshair';
  2714. }
  2715. return true;
  2716. },
  2717. __onDataZoomReset: function () {
  2718. if (this._zooming) {
  2719. this._zooming = false;
  2720. }
  2721. this._zoomQueue.pop();
  2722. if (this._zoomQueue.length > 0) {
  2723. this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length - 1]);
  2724. } else {
  2725. this.component.dataZoom.rectZoom();
  2726. this._iconDisable(this._iconShapeMap['dataZoomReset']);
  2727. this.zr.refreshNextFrame();
  2728. }
  2729. return true;
  2730. },
  2731. _resetMark: function () {
  2732. this._marking = false;
  2733. if (this._markStart) {
  2734. this._markStart = false;
  2735. if (this._iconShapeMap['mark']) {
  2736. this.zr.modShape(this._iconShapeMap['mark'].id, { style: { strokeColor: this._iconShapeMap['mark'].highlightStyle.strokeColor } });
  2737. }
  2738. this.zr.un(zrConfig.EVENT.CLICK, this._onclick);
  2739. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
  2740. }
  2741. },
  2742. _resetZoom: function () {
  2743. this._zooming = false;
  2744. if (this._zoomStart) {
  2745. this._zoomStart = false;
  2746. if (this._iconShapeMap['dataZoom']) {
  2747. this.zr.modShape(this._iconShapeMap['dataZoom'].id, { style: { strokeColor: this._iconShapeMap['dataZoom'].highlightStyle.strokeColor } });
  2748. }
  2749. this.zr.un(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
  2750. this.zr.un(zrConfig.EVENT.MOUSEUP, this._onmouseup);
  2751. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
  2752. }
  2753. },
  2754. _iconDisable: function (target) {
  2755. if (target.type != 'image') {
  2756. this.zr.modShape(target.id, {
  2757. hoverable: false,
  2758. clickable: false,
  2759. style: { strokeColor: this._disableColor }
  2760. });
  2761. } else {
  2762. this.zr.modShape(target.id, {
  2763. hoverable: false,
  2764. clickable: false,
  2765. style: { opacity: 0.3 }
  2766. });
  2767. }
  2768. },
  2769. _iconEnable: function (target) {
  2770. if (target.type != 'image') {
  2771. this.zr.modShape(target.id, {
  2772. hoverable: true,
  2773. clickable: true,
  2774. style: { strokeColor: target.highlightStyle.strokeColor }
  2775. });
  2776. } else {
  2777. this.zr.modShape(target.id, {
  2778. hoverable: true,
  2779. clickable: true,
  2780. style: { opacity: 0.8 }
  2781. });
  2782. }
  2783. },
  2784. __onDataView: function () {
  2785. this._dataView.show(this.option);
  2786. return true;
  2787. },
  2788. __onRestore: function () {
  2789. this._resetMark();
  2790. this._resetZoom();
  2791. this.messageCenter.dispatch(ecConfig.EVENT.RESTORE, null, null, this.myChart);
  2792. return true;
  2793. },
  2794. __onSaveAsImage: function () {
  2795. var saveOption = this.option.toolbox.feature.saveAsImage;
  2796. var imgType = saveOption.type || 'png';
  2797. if (imgType != 'png' && imgType != 'jpeg') {
  2798. imgType = 'png';
  2799. }
  2800. var image;
  2801. if (!this.myChart.isConnected()) {
  2802. image = this.zr.toDataURL('image/' + imgType, this.option.backgroundColor && this.option.backgroundColor.replace(' ', '') === 'rgba(0,0,0,0)' ? '#fff' : this.option.backgroundColor);
  2803. } else {
  2804. image = this.myChart.getConnectedDataURL(imgType);
  2805. }
  2806. var downloadDiv = document.createElement('div');
  2807. downloadDiv.id = '__echarts_download_wrap__';
  2808. 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;';
  2809. var downloadLink = document.createElement('a');
  2810. downloadLink.href = image;
  2811. 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);
  2812. downloadLink.innerHTML = '<img style="vertical-align:middle" src="' + image + '" title="' + (!!window.ActiveXObject || 'ActiveXObject' in window ? '右键->图片另存为' : saveOption.lang ? saveOption.lang[0] : '点击保存') + '"/>';
  2813. downloadDiv.appendChild(downloadLink);
  2814. document.body.appendChild(downloadDiv);
  2815. downloadLink = null;
  2816. downloadDiv = null;
  2817. setTimeout(function () {
  2818. var _d = document.getElementById('__echarts_download_wrap__');
  2819. if (_d) {
  2820. _d.onclick = function () {
  2821. var d = document.getElementById('__echarts_download_wrap__');
  2822. d.onclick = null;
  2823. d.innerHTML = '';
  2824. document.body.removeChild(d);
  2825. d = null;
  2826. };
  2827. _d = null;
  2828. }
  2829. }, 500);
  2830. return;
  2831. },
  2832. __onMagicType: function (param) {
  2833. this._resetMark();
  2834. var itemName = param.target._name;
  2835. if (!this._magicType[itemName]) {
  2836. this._magicType[itemName] = true;
  2837. if (itemName === ecConfig.CHART_TYPE_LINE) {
  2838. this._magicType[ecConfig.CHART_TYPE_BAR] = false;
  2839. } else if (itemName === ecConfig.CHART_TYPE_BAR) {
  2840. this._magicType[ecConfig.CHART_TYPE_LINE] = false;
  2841. }
  2842. if (itemName === ecConfig.CHART_TYPE_PIE) {
  2843. this._magicType[ecConfig.CHART_TYPE_FUNNEL] = false;
  2844. } else if (itemName === ecConfig.CHART_TYPE_FUNNEL) {
  2845. this._magicType[ecConfig.CHART_TYPE_PIE] = false;
  2846. }
  2847. if (itemName === ecConfig.CHART_TYPE_FORCE) {
  2848. this._magicType[ecConfig.CHART_TYPE_CHORD] = false;
  2849. } else if (itemName === ecConfig.CHART_TYPE_CHORD) {
  2850. this._magicType[ecConfig.CHART_TYPE_FORCE] = false;
  2851. }
  2852. if (itemName === _MAGICTYPE_STACK) {
  2853. this._magicType[_MAGICTYPE_TILED] = false;
  2854. } else if (itemName === _MAGICTYPE_TILED) {
  2855. this._magicType[_MAGICTYPE_STACK] = false;
  2856. }
  2857. this.messageCenter.dispatch(ecConfig.EVENT.MAGIC_TYPE_CHANGED, param.event, { magicType: this._magicType }, this.myChart);
  2858. }
  2859. return true;
  2860. },
  2861. setMagicType: function (magicType) {
  2862. this._resetMark();
  2863. this._magicType = magicType;
  2864. !this._isSilence && this.messageCenter.dispatch(ecConfig.EVENT.MAGIC_TYPE_CHANGED, null, { magicType: this._magicType }, this.myChart);
  2865. },
  2866. __onCustomHandler: function (param) {
  2867. var target = param.target.style.iconType;
  2868. var featureHandler = this.option.toolbox.feature[target].onclick;
  2869. if (typeof featureHandler === 'function') {
  2870. featureHandler.call(this, this.option);
  2871. }
  2872. },
  2873. reset: function (newOption, isRestore) {
  2874. isRestore && this.clear();
  2875. if (this.query(newOption, 'toolbox.show') && this.query(newOption, 'toolbox.feature.magicType.show')) {
  2876. var magicType = newOption.toolbox.feature.magicType.type;
  2877. var len = magicType.length;
  2878. this._magicMap = {};
  2879. while (len--) {
  2880. this._magicMap[magicType[len]] = true;
  2881. }
  2882. len = newOption.series.length;
  2883. var oriType;
  2884. var axis;
  2885. while (len--) {
  2886. oriType = newOption.series[len].type;
  2887. if (this._magicMap[oriType]) {
  2888. axis = newOption.xAxis instanceof Array ? newOption.xAxis[newOption.series[len].xAxisIndex || 0] : newOption.xAxis;
  2889. if (axis && (axis.type || 'category') === 'category') {
  2890. axis.__boundaryGap = axis.boundaryGap != null ? axis.boundaryGap : true;
  2891. }
  2892. axis = newOption.yAxis instanceof Array ? newOption.yAxis[newOption.series[len].yAxisIndex || 0] : newOption.yAxis;
  2893. if (axis && axis.type === 'category') {
  2894. axis.__boundaryGap = axis.boundaryGap != null ? axis.boundaryGap : true;
  2895. }
  2896. newOption.series[len].__type = oriType;
  2897. newOption.series[len].__itemStyle = zrUtil.clone(newOption.series[len].itemStyle || {});
  2898. }
  2899. if (this._magicMap[_MAGICTYPE_STACK] || this._magicMap[_MAGICTYPE_TILED]) {
  2900. newOption.series[len].__stack = newOption.series[len].stack;
  2901. }
  2902. }
  2903. }
  2904. this._magicType = isRestore ? {} : this._magicType || {};
  2905. for (var itemName in this._magicType) {
  2906. if (this._magicType[itemName]) {
  2907. this.option = newOption;
  2908. this.getMagicOption();
  2909. break;
  2910. }
  2911. }
  2912. var zoomOption = newOption.dataZoom;
  2913. if (zoomOption && zoomOption.show) {
  2914. var start = zoomOption.start != null && zoomOption.start >= 0 && zoomOption.start <= 100 ? zoomOption.start : 0;
  2915. var end = zoomOption.end != null && zoomOption.end >= 0 && zoomOption.end <= 100 ? zoomOption.end : 100;
  2916. if (start > end) {
  2917. start = start + end;
  2918. end = start - end;
  2919. start = start - end;
  2920. }
  2921. this._zoomQueue = [{
  2922. start: start,
  2923. end: end,
  2924. start2: 0,
  2925. end2: 100
  2926. }];
  2927. } else {
  2928. this._zoomQueue = [];
  2929. }
  2930. },
  2931. getMagicOption: function () {
  2932. var axis;
  2933. var chartType;
  2934. if (this._magicType[ecConfig.CHART_TYPE_LINE] || this._magicType[ecConfig.CHART_TYPE_BAR]) {
  2935. var boundaryGap = this._magicType[ecConfig.CHART_TYPE_LINE] ? false : true;
  2936. for (var i = 0, l = this.option.series.length; i < l; i++) {
  2937. chartType = this.option.series[i].type;
  2938. if (chartType == ecConfig.CHART_TYPE_LINE || chartType == ecConfig.CHART_TYPE_BAR) {
  2939. axis = this.option.xAxis instanceof Array ? this.option.xAxis[this.option.series[i].xAxisIndex || 0] : this.option.xAxis;
  2940. if (axis && (axis.type || 'category') === 'category') {
  2941. axis.boundaryGap = boundaryGap ? true : axis.__boundaryGap;
  2942. }
  2943. axis = this.option.yAxis instanceof Array ? this.option.yAxis[this.option.series[i].yAxisIndex || 0] : this.option.yAxis;
  2944. if (axis && axis.type === 'category') {
  2945. axis.boundaryGap = boundaryGap ? true : axis.__boundaryGap;
  2946. }
  2947. }
  2948. }
  2949. this._defaultMagic(ecConfig.CHART_TYPE_LINE, ecConfig.CHART_TYPE_BAR);
  2950. }
  2951. this._defaultMagic(ecConfig.CHART_TYPE_CHORD, ecConfig.CHART_TYPE_FORCE);
  2952. this._defaultMagic(ecConfig.CHART_TYPE_PIE, ecConfig.CHART_TYPE_FUNNEL);
  2953. if (this._magicType[_MAGICTYPE_STACK] || this._magicType[_MAGICTYPE_TILED]) {
  2954. for (var i = 0, l = this.option.series.length; i < l; i++) {
  2955. if (this._magicType[_MAGICTYPE_STACK]) {
  2956. this.option.series[i].stack = '_ECHARTS_STACK_KENER_2014_';
  2957. chartType = _MAGICTYPE_STACK;
  2958. } else if (this._magicType[_MAGICTYPE_TILED]) {
  2959. this.option.series[i].stack = null;
  2960. chartType = _MAGICTYPE_TILED;
  2961. }
  2962. if (this._featureOption[chartType + 'Chart']) {
  2963. zrUtil.merge(this.option.series[i], this._featureOption[chartType + 'Chart'] || {}, true);
  2964. }
  2965. }
  2966. }
  2967. return this.option;
  2968. },
  2969. _defaultMagic: function (cType1, cType2) {
  2970. if (this._magicType[cType1] || this._magicType[cType2]) {
  2971. for (var i = 0, l = this.option.series.length; i < l; i++) {
  2972. var chartType = this.option.series[i].type;
  2973. if (chartType == cType1 || chartType == cType2) {
  2974. this.option.series[i].type = this._magicType[cType1] ? cType1 : cType2;
  2975. this.option.series[i].itemStyle = zrUtil.clone(this.option.series[i].__itemStyle);
  2976. chartType = this.option.series[i].type;
  2977. if (this._featureOption[chartType + 'Chart']) {
  2978. zrUtil.merge(this.option.series[i], this._featureOption[chartType + 'Chart'] || {}, true);
  2979. }
  2980. }
  2981. }
  2982. }
  2983. },
  2984. silence: function (s) {
  2985. this._isSilence = s;
  2986. },
  2987. resize: function () {
  2988. this._resetMark();
  2989. this.clear();
  2990. if (this.option && this.option.toolbox && this.option.toolbox.show) {
  2991. this._buildShape();
  2992. }
  2993. if (this._dataView) {
  2994. this._dataView.resize();
  2995. }
  2996. },
  2997. hideDataView: function () {
  2998. if (this._dataView) {
  2999. this._dataView.hide();
  3000. }
  3001. },
  3002. clear: function (notMark) {
  3003. if (this.zr) {
  3004. this.zr.delShape(this.shapeList);
  3005. this.shapeList = [];
  3006. if (!notMark) {
  3007. this.zr.delShape(this._markShapeList);
  3008. this._markShapeList = [];
  3009. }
  3010. }
  3011. },
  3012. onbeforDispose: function () {
  3013. if (this._dataView) {
  3014. this._dataView.dispose();
  3015. this._dataView = null;
  3016. }
  3017. this._markShapeList = null;
  3018. },
  3019. refresh: function (newOption) {
  3020. if (newOption) {
  3021. this._resetMark();
  3022. this._resetZoom();
  3023. newOption.toolbox = this.reformOption(newOption.toolbox);
  3024. this.option = newOption;
  3025. this.clear(true);
  3026. if (newOption.toolbox.show) {
  3027. this._buildShape();
  3028. }
  3029. this.hideDataView();
  3030. }
  3031. }
  3032. };
  3033. zrUtil.inherits(Toolbox, Base);
  3034. require('../component').define('toolbox', Toolbox);
  3035. return Toolbox;
  3036. });define('echarts/component', [], function () {
  3037. var self = {};
  3038. var _componentLibrary = {};
  3039. self.define = function (name, clazz) {
  3040. _componentLibrary[name] = clazz;
  3041. return self;
  3042. };
  3043. self.get = function (name) {
  3044. return _componentLibrary[name];
  3045. };
  3046. return self;
  3047. });define('echarts/component/title', [
  3048. 'require',
  3049. './base',
  3050. 'zrender/shape/Text',
  3051. 'zrender/shape/Rectangle',
  3052. '../config',
  3053. 'zrender/tool/util',
  3054. 'zrender/tool/area',
  3055. 'zrender/tool/color',
  3056. '../component'
  3057. ], function (require) {
  3058. var Base = require('./base');
  3059. var TextShape = require('zrender/shape/Text');
  3060. var RectangleShape = require('zrender/shape/Rectangle');
  3061. var ecConfig = require('../config');
  3062. ecConfig.title = {
  3063. zlevel: 0,
  3064. z: 6,
  3065. show: true,
  3066. text: '',
  3067. subtext: '',
  3068. x: 'left',
  3069. y: 'top',
  3070. backgroundColor: 'rgba(0,0,0,0)',
  3071. borderColor: '#ccc',
  3072. borderWidth: 0,
  3073. padding: 5,
  3074. itemGap: 5,
  3075. textStyle: {
  3076. fontSize: 18,
  3077. fontWeight: 'bolder',
  3078. color: '#333'
  3079. },
  3080. subtextStyle: { color: '#aaa' }
  3081. };
  3082. var zrUtil = require('zrender/tool/util');
  3083. var zrArea = require('zrender/tool/area');
  3084. var zrColor = require('zrender/tool/color');
  3085. function Title(ecTheme, messageCenter, zr, option, myChart) {
  3086. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  3087. this.refresh(option);
  3088. }
  3089. Title.prototype = {
  3090. type: ecConfig.COMPONENT_TYPE_TITLE,
  3091. _buildShape: function () {
  3092. if (!this.titleOption.show) {
  3093. return;
  3094. }
  3095. this._itemGroupLocation = this._getItemGroupLocation();
  3096. this._buildBackground();
  3097. this._buildItem();
  3098. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  3099. this.zr.addShape(this.shapeList[i]);
  3100. }
  3101. },
  3102. _buildItem: function () {
  3103. var text = this.titleOption.text;
  3104. var link = this.titleOption.link;
  3105. var target = this.titleOption.target;
  3106. var subtext = this.titleOption.subtext;
  3107. var sublink = this.titleOption.sublink;
  3108. var subtarget = this.titleOption.subtarget;
  3109. var font = this.getFont(this.titleOption.textStyle);
  3110. var subfont = this.getFont(this.titleOption.subtextStyle);
  3111. var x = this._itemGroupLocation.x;
  3112. var y = this._itemGroupLocation.y;
  3113. var width = this._itemGroupLocation.width;
  3114. var height = this._itemGroupLocation.height;
  3115. var textShape = {
  3116. zlevel: this.getZlevelBase(),
  3117. z: this.getZBase(),
  3118. style: {
  3119. y: y,
  3120. color: this.titleOption.textStyle.color,
  3121. text: text,
  3122. textFont: font,
  3123. textBaseline: 'top'
  3124. },
  3125. highlightStyle: {
  3126. color: zrColor.lift(this.titleOption.textStyle.color, 1),
  3127. brushType: 'fill'
  3128. },
  3129. hoverable: false
  3130. };
  3131. if (link) {
  3132. textShape.hoverable = true;
  3133. textShape.clickable = true;
  3134. textShape.onclick = function () {
  3135. if (!target || target != 'self') {
  3136. window.open(link);
  3137. } else {
  3138. window.location = link;
  3139. }
  3140. };
  3141. }
  3142. var subtextShape = {
  3143. zlevel: this.getZlevelBase(),
  3144. z: this.getZBase(),
  3145. style: {
  3146. y: y + height,
  3147. color: this.titleOption.subtextStyle.color,
  3148. text: subtext,
  3149. textFont: subfont,
  3150. textBaseline: 'bottom'
  3151. },
  3152. highlightStyle: {
  3153. color: zrColor.lift(this.titleOption.subtextStyle.color, 1),
  3154. brushType: 'fill'
  3155. },
  3156. hoverable: false
  3157. };
  3158. if (sublink) {
  3159. subtextShape.hoverable = true;
  3160. subtextShape.clickable = true;
  3161. subtextShape.onclick = function () {
  3162. if (!subtarget || subtarget != 'self') {
  3163. window.open(sublink);
  3164. } else {
  3165. window.location = sublink;
  3166. }
  3167. };
  3168. }
  3169. switch (this.titleOption.x) {
  3170. case 'center':
  3171. textShape.style.x = subtextShape.style.x = x + width / 2;
  3172. textShape.style.textAlign = subtextShape.style.textAlign = 'center';
  3173. break;
  3174. case 'left':
  3175. textShape.style.x = subtextShape.style.x = x;
  3176. textShape.style.textAlign = subtextShape.style.textAlign = 'left';
  3177. break;
  3178. case 'right':
  3179. textShape.style.x = subtextShape.style.x = x + width;
  3180. textShape.style.textAlign = subtextShape.style.textAlign = 'right';
  3181. break;
  3182. default:
  3183. x = this.titleOption.x - 0;
  3184. x = isNaN(x) ? 0 : x;
  3185. textShape.style.x = subtextShape.style.x = x;
  3186. break;
  3187. }
  3188. if (this.titleOption.textAlign) {
  3189. textShape.style.textAlign = subtextShape.style.textAlign = this.titleOption.textAlign;
  3190. }
  3191. this.shapeList.push(new TextShape(textShape));
  3192. subtext !== '' && this.shapeList.push(new TextShape(subtextShape));
  3193. },
  3194. _buildBackground: function () {
  3195. var padding = this.reformCssArray(this.titleOption.padding);
  3196. this.shapeList.push(new RectangleShape({
  3197. zlevel: this.getZlevelBase(),
  3198. z: this.getZBase(),
  3199. hoverable: false,
  3200. style: {
  3201. x: this._itemGroupLocation.x - padding[3],
  3202. y: this._itemGroupLocation.y - padding[0],
  3203. width: this._itemGroupLocation.width + padding[3] + padding[1],
  3204. height: this._itemGroupLocation.height + padding[0] + padding[2],
  3205. brushType: this.titleOption.borderWidth === 0 ? 'fill' : 'both',
  3206. color: this.titleOption.backgroundColor,
  3207. strokeColor: this.titleOption.borderColor,
  3208. lineWidth: this.titleOption.borderWidth
  3209. }
  3210. }));
  3211. },
  3212. _getItemGroupLocation: function () {
  3213. var padding = this.reformCssArray(this.titleOption.padding);
  3214. var text = this.titleOption.text;
  3215. var subtext = this.titleOption.subtext;
  3216. var font = this.getFont(this.titleOption.textStyle);
  3217. var subfont = this.getFont(this.titleOption.subtextStyle);
  3218. var totalWidth = Math.max(zrArea.getTextWidth(text, font), zrArea.getTextWidth(subtext, subfont));
  3219. var totalHeight = zrArea.getTextHeight(text, font) + (subtext === '' ? 0 : this.titleOption.itemGap + zrArea.getTextHeight(subtext, subfont));
  3220. var x;
  3221. var zrWidth = this.zr.getWidth();
  3222. switch (this.titleOption.x) {
  3223. case 'center':
  3224. x = Math.floor((zrWidth - totalWidth) / 2);
  3225. break;
  3226. case 'left':
  3227. x = padding[3] + this.titleOption.borderWidth;
  3228. break;
  3229. case 'right':
  3230. x = zrWidth - totalWidth - padding[1] - this.titleOption.borderWidth;
  3231. break;
  3232. default:
  3233. x = this.titleOption.x - 0;
  3234. x = isNaN(x) ? 0 : x;
  3235. break;
  3236. }
  3237. var y;
  3238. var zrHeight = this.zr.getHeight();
  3239. switch (this.titleOption.y) {
  3240. case 'top':
  3241. y = padding[0] + this.titleOption.borderWidth;
  3242. break;
  3243. case 'bottom':
  3244. y = zrHeight - totalHeight - padding[2] - this.titleOption.borderWidth;
  3245. break;
  3246. case 'center':
  3247. y = Math.floor((zrHeight - totalHeight) / 2);
  3248. break;
  3249. default:
  3250. y = this.titleOption.y - 0;
  3251. y = isNaN(y) ? 0 : y;
  3252. break;
  3253. }
  3254. return {
  3255. x: x,
  3256. y: y,
  3257. width: totalWidth,
  3258. height: totalHeight
  3259. };
  3260. },
  3261. refresh: function (newOption) {
  3262. if (newOption) {
  3263. this.option = newOption;
  3264. this.option.title = this.reformOption(this.option.title);
  3265. this.titleOption = this.option.title;
  3266. this.titleOption.textStyle = this.getTextStyle(this.titleOption.textStyle);
  3267. this.titleOption.subtextStyle = this.getTextStyle(this.titleOption.subtextStyle);
  3268. }
  3269. this.clear();
  3270. this._buildShape();
  3271. }
  3272. };
  3273. zrUtil.inherits(Title, Base);
  3274. require('../component').define('title', Title);
  3275. return Title;
  3276. });define('echarts/component/tooltip', [
  3277. 'require',
  3278. './base',
  3279. '../util/shape/Cross',
  3280. 'zrender/shape/Line',
  3281. 'zrender/shape/Rectangle',
  3282. '../config',
  3283. '../util/ecData',
  3284. 'zrender/config',
  3285. 'zrender/tool/event',
  3286. 'zrender/tool/area',
  3287. 'zrender/tool/color',
  3288. 'zrender/tool/util',
  3289. 'zrender/shape/Base',
  3290. '../component'
  3291. ], function (require) {
  3292. var Base = require('./base');
  3293. var CrossShape = require('../util/shape/Cross');
  3294. var LineShape = require('zrender/shape/Line');
  3295. var RectangleShape = require('zrender/shape/Rectangle');
  3296. var rectangleInstance = new RectangleShape({});
  3297. var ecConfig = require('../config');
  3298. ecConfig.tooltip = {
  3299. zlevel: 1,
  3300. z: 8,
  3301. show: true,
  3302. showContent: true,
  3303. trigger: 'item',
  3304. islandFormatter: '{a} <br/>{b} : {c}',
  3305. showDelay: 20,
  3306. hideDelay: 100,
  3307. transitionDuration: 0.4,
  3308. enterable: false,
  3309. backgroundColor: 'rgba(0,0,0,0.7)',
  3310. borderColor: '#333',
  3311. borderRadius: 4,
  3312. borderWidth: 0,
  3313. padding: 5,
  3314. axisPointer: {
  3315. type: 'line',
  3316. lineStyle: {
  3317. color: '#48b',
  3318. width: 2,
  3319. type: 'solid'
  3320. },
  3321. crossStyle: {
  3322. color: '#1e90ff',
  3323. width: 1,
  3324. type: 'dashed'
  3325. },
  3326. shadowStyle: {
  3327. color: 'rgba(150,150,150,0.3)',
  3328. width: 'auto',
  3329. type: 'default'
  3330. }
  3331. },
  3332. textStyle: { color: '#fff' }
  3333. };
  3334. var ecData = require('../util/ecData');
  3335. var zrConfig = require('zrender/config');
  3336. var zrEvent = require('zrender/tool/event');
  3337. var zrArea = require('zrender/tool/area');
  3338. var zrColor = require('zrender/tool/color');
  3339. var zrUtil = require('zrender/tool/util');
  3340. var zrShapeBase = require('zrender/shape/Base');
  3341. function Tooltip(ecTheme, messageCenter, zr, option, myChart) {
  3342. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  3343. this.dom = myChart.dom;
  3344. var self = this;
  3345. self._onmousemove = function (param) {
  3346. return self.__onmousemove(param);
  3347. };
  3348. self._onglobalout = function (param) {
  3349. return self.__onglobalout(param);
  3350. };
  3351. this.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  3352. this.zr.on(zrConfig.EVENT.GLOBALOUT, self._onglobalout);
  3353. self._hide = function (param) {
  3354. return self.__hide(param);
  3355. };
  3356. self._tryShow = function (param) {
  3357. return self.__tryShow(param);
  3358. };
  3359. self._refixed = function (param) {
  3360. return self.__refixed(param);
  3361. };
  3362. self._setContent = function (ticket, res) {
  3363. return self.__setContent(ticket, res);
  3364. };
  3365. this._tDom = this._tDom || document.createElement('div');
  3366. this._tDom.onselectstart = function () {
  3367. return false;
  3368. };
  3369. this._tDom.onmouseover = function () {
  3370. self._mousein = true;
  3371. };
  3372. this._tDom.onmouseout = function () {
  3373. self._mousein = false;
  3374. };
  3375. this._tDom.className = 'echarts-tooltip';
  3376. this._tDom.style.position = 'absolute';
  3377. this.hasAppend = false;
  3378. this._axisLineShape && this.zr.delShape(this._axisLineShape.id);
  3379. this._axisLineShape = new LineShape({
  3380. zlevel: this.getZlevelBase(),
  3381. z: this.getZBase(),
  3382. invisible: true,
  3383. hoverable: false
  3384. });
  3385. this.shapeList.push(this._axisLineShape);
  3386. this.zr.addShape(this._axisLineShape);
  3387. this._axisShadowShape && this.zr.delShape(this._axisShadowShape.id);
  3388. this._axisShadowShape = new LineShape({
  3389. zlevel: this.getZlevelBase(),
  3390. z: 1,
  3391. invisible: true,
  3392. hoverable: false
  3393. });
  3394. this.shapeList.push(this._axisShadowShape);
  3395. this.zr.addShape(this._axisShadowShape);
  3396. this._axisCrossShape && this.zr.delShape(this._axisCrossShape.id);
  3397. this._axisCrossShape = new CrossShape({
  3398. zlevel: this.getZlevelBase(),
  3399. z: this.getZBase(),
  3400. invisible: true,
  3401. hoverable: false
  3402. });
  3403. this.shapeList.push(this._axisCrossShape);
  3404. this.zr.addShape(this._axisCrossShape);
  3405. this.showing = false;
  3406. this.refresh(option);
  3407. }
  3408. Tooltip.prototype = {
  3409. type: ecConfig.COMPONENT_TYPE_TOOLTIP,
  3410. _gCssText: 'position:absolute;display:block;border-style:solid;white-space:nowrap;',
  3411. _style: function (opt) {
  3412. if (!opt) {
  3413. return '';
  3414. }
  3415. var cssText = [];
  3416. if (opt.transitionDuration) {
  3417. var transitionText = 'left ' + opt.transitionDuration + 's,' + 'top ' + opt.transitionDuration + 's';
  3418. cssText.push('transition:' + transitionText);
  3419. cssText.push('-moz-transition:' + transitionText);
  3420. cssText.push('-webkit-transition:' + transitionText);
  3421. cssText.push('-o-transition:' + transitionText);
  3422. }
  3423. if (opt.backgroundColor) {
  3424. cssText.push('background-Color:' + zrColor.toHex(opt.backgroundColor));
  3425. cssText.push('filter:alpha(opacity=70)');
  3426. cssText.push('background-Color:' + opt.backgroundColor);
  3427. }
  3428. if (opt.borderWidth != null) {
  3429. cssText.push('border-width:' + opt.borderWidth + 'px');
  3430. }
  3431. if (opt.borderColor != null) {
  3432. cssText.push('border-color:' + opt.borderColor);
  3433. }
  3434. if (opt.borderRadius != null) {
  3435. cssText.push('border-radius:' + opt.borderRadius + 'px');
  3436. cssText.push('-moz-border-radius:' + opt.borderRadius + 'px');
  3437. cssText.push('-webkit-border-radius:' + opt.borderRadius + 'px');
  3438. cssText.push('-o-border-radius:' + opt.borderRadius + 'px');
  3439. }
  3440. var textStyle = opt.textStyle;
  3441. if (textStyle) {
  3442. textStyle.color && cssText.push('color:' + textStyle.color);
  3443. textStyle.decoration && cssText.push('text-decoration:' + textStyle.decoration);
  3444. textStyle.align && cssText.push('text-align:' + textStyle.align);
  3445. textStyle.fontFamily && cssText.push('font-family:' + textStyle.fontFamily);
  3446. textStyle.fontSize && cssText.push('font-size:' + textStyle.fontSize + 'px');
  3447. textStyle.fontSize && cssText.push('line-height:' + Math.round(textStyle.fontSize * 3 / 2) + 'px');
  3448. textStyle.fontStyle && cssText.push('font-style:' + textStyle.fontStyle);
  3449. textStyle.fontWeight && cssText.push('font-weight:' + textStyle.fontWeight);
  3450. }
  3451. var padding = opt.padding;
  3452. if (padding != null) {
  3453. padding = this.reformCssArray(padding);
  3454. cssText.push('padding:' + padding[0] + 'px ' + padding[1] + 'px ' + padding[2] + 'px ' + padding[3] + 'px');
  3455. }
  3456. cssText = cssText.join(';') + ';';
  3457. return cssText;
  3458. },
  3459. __hide: function () {
  3460. this._lastDataIndex = -1;
  3461. this._lastSeriesIndex = -1;
  3462. this._lastItemTriggerId = -1;
  3463. if (this._tDom) {
  3464. this._tDom.style.display = 'none';
  3465. }
  3466. var needRefresh = false;
  3467. if (!this._axisLineShape.invisible) {
  3468. this._axisLineShape.invisible = true;
  3469. this.zr.modShape(this._axisLineShape.id);
  3470. needRefresh = true;
  3471. }
  3472. if (!this._axisShadowShape.invisible) {
  3473. this._axisShadowShape.invisible = true;
  3474. this.zr.modShape(this._axisShadowShape.id);
  3475. needRefresh = true;
  3476. }
  3477. if (!this._axisCrossShape.invisible) {
  3478. this._axisCrossShape.invisible = true;
  3479. this.zr.modShape(this._axisCrossShape.id);
  3480. needRefresh = true;
  3481. }
  3482. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  3483. this.zr.delShape(this._lastTipShape.tipShape);
  3484. this._lastTipShape = false;
  3485. this.shapeList.length = 2;
  3486. }
  3487. needRefresh && this.zr.refreshNextFrame();
  3488. this.showing = false;
  3489. },
  3490. _show: function (position, x, y, specialCssText) {
  3491. var domHeight = this._tDom.offsetHeight;
  3492. var domWidth = this._tDom.offsetWidth;
  3493. if (position) {
  3494. if (typeof position === 'function') {
  3495. position = position([
  3496. x,
  3497. y
  3498. ]);
  3499. }
  3500. if (position instanceof Array) {
  3501. x = position[0];
  3502. y = position[1];
  3503. }
  3504. }
  3505. if (x + domWidth > this._zrWidth) {
  3506. x -= domWidth + 40;
  3507. }
  3508. if (y + domHeight > this._zrHeight) {
  3509. y -= domHeight - 20;
  3510. }
  3511. if (y < 20) {
  3512. y = 0;
  3513. }
  3514. this._tDom.style.cssText = this._gCssText + this._defaultCssText + (specialCssText ? specialCssText : '') + 'left:' + x + 'px;top:' + y + 'px;';
  3515. if (domHeight < 10 || domWidth < 10) {
  3516. setTimeout(this._refixed, 20);
  3517. }
  3518. this.showing = true;
  3519. },
  3520. __refixed: function () {
  3521. if (this._tDom) {
  3522. var cssText = '';
  3523. var domHeight = this._tDom.offsetHeight;
  3524. var domWidth = this._tDom.offsetWidth;
  3525. if (this._tDom.offsetLeft + domWidth > this._zrWidth) {
  3526. cssText += 'left:' + (this._zrWidth - domWidth - 20) + 'px;';
  3527. }
  3528. if (this._tDom.offsetTop + domHeight > this._zrHeight) {
  3529. cssText += 'top:' + (this._zrHeight - domHeight - 10) + 'px;';
  3530. }
  3531. if (cssText !== '') {
  3532. this._tDom.style.cssText += cssText;
  3533. }
  3534. }
  3535. },
  3536. __tryShow: function () {
  3537. var needShow;
  3538. var trigger;
  3539. if (!this._curTarget) {
  3540. this._findPolarTrigger() || this._findAxisTrigger();
  3541. } else {
  3542. if (this._curTarget._type === 'island' && this.option.tooltip.show) {
  3543. this._showItemTrigger();
  3544. return;
  3545. }
  3546. var serie = ecData.get(this._curTarget, 'series');
  3547. var data = ecData.get(this._curTarget, 'data');
  3548. needShow = this.deepQuery([
  3549. data,
  3550. serie,
  3551. this.option
  3552. ], 'tooltip.show');
  3553. if (serie == null || data == null || !needShow) {
  3554. clearTimeout(this._hidingTicket);
  3555. clearTimeout(this._showingTicket);
  3556. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  3557. } else {
  3558. trigger = this.deepQuery([
  3559. data,
  3560. serie,
  3561. this.option
  3562. ], 'tooltip.trigger');
  3563. trigger === 'axis' ? this._showAxisTrigger(serie.xAxisIndex, serie.yAxisIndex, ecData.get(this._curTarget, 'dataIndex')) : this._showItemTrigger();
  3564. }
  3565. }
  3566. },
  3567. _findAxisTrigger: function () {
  3568. if (!this.component.xAxis || !this.component.yAxis) {
  3569. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  3570. return;
  3571. }
  3572. var series = this.option.series;
  3573. var xAxisIndex;
  3574. var yAxisIndex;
  3575. for (var i = 0, l = series.length; i < l; i++) {
  3576. if (this.deepQuery([
  3577. series[i],
  3578. this.option
  3579. ], 'tooltip.trigger') === 'axis') {
  3580. xAxisIndex = series[i].xAxisIndex || 0;
  3581. yAxisIndex = series[i].yAxisIndex || 0;
  3582. if (this.component.xAxis.getAxis(xAxisIndex) && this.component.xAxis.getAxis(xAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  3583. this._showAxisTrigger(xAxisIndex, yAxisIndex, this._getNearestDataIndex('x', this.component.xAxis.getAxis(xAxisIndex)));
  3584. return;
  3585. } else if (this.component.yAxis.getAxis(yAxisIndex) && this.component.yAxis.getAxis(yAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  3586. this._showAxisTrigger(xAxisIndex, yAxisIndex, this._getNearestDataIndex('y', this.component.yAxis.getAxis(yAxisIndex)));
  3587. return;
  3588. } else {
  3589. this._showAxisTrigger(xAxisIndex, yAxisIndex, -1);
  3590. return;
  3591. }
  3592. }
  3593. }
  3594. if (this.option.tooltip.axisPointer.type === 'cross') {
  3595. this._showAxisTrigger(-1, -1, -1);
  3596. }
  3597. },
  3598. _findPolarTrigger: function () {
  3599. if (!this.component.polar) {
  3600. return false;
  3601. }
  3602. var x = zrEvent.getX(this._event);
  3603. var y = zrEvent.getY(this._event);
  3604. var polarIndex = this.component.polar.getNearestIndex([
  3605. x,
  3606. y
  3607. ]);
  3608. var valueIndex;
  3609. if (polarIndex) {
  3610. valueIndex = polarIndex.valueIndex;
  3611. polarIndex = polarIndex.polarIndex;
  3612. } else {
  3613. polarIndex = -1;
  3614. }
  3615. if (polarIndex != -1) {
  3616. return this._showPolarTrigger(polarIndex, valueIndex);
  3617. }
  3618. return false;
  3619. },
  3620. _getNearestDataIndex: function (direction, categoryAxis) {
  3621. var dataIndex = -1;
  3622. var x = zrEvent.getX(this._event);
  3623. var y = zrEvent.getY(this._event);
  3624. if (direction === 'x') {
  3625. var left;
  3626. var right;
  3627. var xEnd = this.component.grid.getXend();
  3628. var curCoord = categoryAxis.getCoordByIndex(dataIndex);
  3629. while (curCoord < xEnd) {
  3630. right = curCoord;
  3631. if (curCoord <= x) {
  3632. left = curCoord;
  3633. } else {
  3634. break;
  3635. }
  3636. curCoord = categoryAxis.getCoordByIndex(++dataIndex);
  3637. }
  3638. if (dataIndex <= 0) {
  3639. dataIndex = 0;
  3640. } else if (x - left <= right - x) {
  3641. dataIndex -= 1;
  3642. } else {
  3643. if (categoryAxis.getNameByIndex(dataIndex) == null) {
  3644. dataIndex -= 1;
  3645. }
  3646. }
  3647. return dataIndex;
  3648. } else {
  3649. var top;
  3650. var bottom;
  3651. var yStart = this.component.grid.getY();
  3652. var curCoord = categoryAxis.getCoordByIndex(dataIndex);
  3653. while (curCoord > yStart) {
  3654. top = curCoord;
  3655. if (curCoord >= y) {
  3656. bottom = curCoord;
  3657. } else {
  3658. break;
  3659. }
  3660. curCoord = categoryAxis.getCoordByIndex(++dataIndex);
  3661. }
  3662. if (dataIndex <= 0) {
  3663. dataIndex = 0;
  3664. } else if (y - top >= bottom - y) {
  3665. dataIndex -= 1;
  3666. } else {
  3667. if (categoryAxis.getNameByIndex(dataIndex) == null) {
  3668. dataIndex -= 1;
  3669. }
  3670. }
  3671. return dataIndex;
  3672. }
  3673. return -1;
  3674. },
  3675. _showAxisTrigger: function (xAxisIndex, yAxisIndex, dataIndex) {
  3676. !this._event.connectTrigger && this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_IN_GRID, this._event, null, this.myChart);
  3677. if (this.component.xAxis == null || this.component.yAxis == null || xAxisIndex == null || yAxisIndex == null) {
  3678. clearTimeout(this._hidingTicket);
  3679. clearTimeout(this._showingTicket);
  3680. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  3681. return;
  3682. }
  3683. var series = this.option.series;
  3684. var seriesArray = [];
  3685. var seriesIndex = [];
  3686. var categoryAxis;
  3687. var formatter;
  3688. var position;
  3689. var showContent;
  3690. var specialCssText = '';
  3691. if (this.option.tooltip.trigger === 'axis') {
  3692. if (!this.option.tooltip.show) {
  3693. return;
  3694. }
  3695. formatter = this.option.tooltip.formatter;
  3696. position = this.option.tooltip.position;
  3697. }
  3698. 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;
  3699. var x;
  3700. var y;
  3701. if (axisLayout) {
  3702. var axisIndex = axisLayout == 'xAxis' ? xAxisIndex : yAxisIndex;
  3703. categoryAxis = this.component[axisLayout].getAxis(axisIndex);
  3704. for (var i = 0, l = series.length; i < l; i++) {
  3705. if (!this._isSelected(series[i].name)) {
  3706. continue;
  3707. }
  3708. if (series[i][axisLayout + 'Index'] === axisIndex && this.deepQuery([
  3709. series[i],
  3710. this.option
  3711. ], 'tooltip.trigger') === 'axis') {
  3712. showContent = this.query(series[i], 'tooltip.showContent') || showContent;
  3713. formatter = this.query(series[i], 'tooltip.formatter') || formatter;
  3714. position = this.query(series[i], 'tooltip.position') || position;
  3715. specialCssText += this._style(this.query(series[i], 'tooltip'));
  3716. if (series[i].stack != null && axisLayout == 'xAxis') {
  3717. seriesArray.unshift(series[i]);
  3718. seriesIndex.unshift(i);
  3719. } else {
  3720. seriesArray.push(series[i]);
  3721. seriesIndex.push(i);
  3722. }
  3723. }
  3724. }
  3725. this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_HOVER, this._event, {
  3726. seriesIndex: seriesIndex,
  3727. dataIndex: dataIndex
  3728. }, this.myChart);
  3729. var rect;
  3730. if (axisLayout == 'xAxis') {
  3731. x = this.subPixelOptimize(categoryAxis.getCoordByIndex(dataIndex), this._axisLineWidth);
  3732. y = zrEvent.getY(this._event);
  3733. rect = [
  3734. x,
  3735. this.component.grid.getY(),
  3736. x,
  3737. this.component.grid.getYend()
  3738. ];
  3739. } else {
  3740. x = zrEvent.getX(this._event);
  3741. y = this.subPixelOptimize(categoryAxis.getCoordByIndex(dataIndex), this._axisLineWidth);
  3742. rect = [
  3743. this.component.grid.getX(),
  3744. y,
  3745. this.component.grid.getXend(),
  3746. y
  3747. ];
  3748. }
  3749. this._styleAxisPointer(seriesArray, rect[0], rect[1], rect[2], rect[3], categoryAxis.getGap(), x, y);
  3750. } else {
  3751. x = zrEvent.getX(this._event);
  3752. y = zrEvent.getY(this._event);
  3753. this._styleAxisPointer(series, this.component.grid.getX(), y, this.component.grid.getXend(), y, 0, x, y);
  3754. if (dataIndex >= 0) {
  3755. this._showItemTrigger(true);
  3756. } else {
  3757. clearTimeout(this._hidingTicket);
  3758. clearTimeout(this._showingTicket);
  3759. this._tDom.style.display = 'none';
  3760. }
  3761. }
  3762. if (seriesArray.length > 0) {
  3763. this._lastItemTriggerId = -1;
  3764. if (this._lastDataIndex != dataIndex || this._lastSeriesIndex != seriesIndex[0]) {
  3765. this._lastDataIndex = dataIndex;
  3766. this._lastSeriesIndex = seriesIndex[0];
  3767. var data;
  3768. var value;
  3769. if (typeof formatter === 'function') {
  3770. var params = [];
  3771. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3772. data = seriesArray[i].data[dataIndex];
  3773. value = this.getDataFromOption(data, '-');
  3774. params.push({
  3775. seriesIndex: seriesIndex[i],
  3776. seriesName: seriesArray[i].name || '',
  3777. series: seriesArray[i],
  3778. dataIndex: dataIndex,
  3779. data: data,
  3780. name: categoryAxis.getNameByIndex(dataIndex),
  3781. value: value,
  3782. 0: seriesArray[i].name || '',
  3783. 1: categoryAxis.getNameByIndex(dataIndex),
  3784. 2: value,
  3785. 3: data
  3786. });
  3787. }
  3788. this._curTicket = 'axis:' + dataIndex;
  3789. this._tDom.innerHTML = formatter.call(this.myChart, params, this._curTicket, this._setContent);
  3790. } else if (typeof formatter === 'string') {
  3791. this._curTicket = NaN;
  3792. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
  3793. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3794. formatter = formatter.replace('{a' + i + '}', this._encodeHTML(seriesArray[i].name || ''));
  3795. formatter = formatter.replace('{b' + i + '}', this._encodeHTML(categoryAxis.getNameByIndex(dataIndex)));
  3796. data = seriesArray[i].data[dataIndex];
  3797. data = this.getDataFromOption(data, '-');
  3798. formatter = formatter.replace('{c' + i + '}', data instanceof Array ? data : this.numAddCommas(data));
  3799. }
  3800. this._tDom.innerHTML = formatter;
  3801. } else {
  3802. this._curTicket = NaN;
  3803. formatter = this._encodeHTML(categoryAxis.getNameByIndex(dataIndex));
  3804. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3805. formatter += '<br/>' + this._encodeHTML(seriesArray[i].name || '') + ' : ';
  3806. data = seriesArray[i].data[dataIndex];
  3807. data = this.getDataFromOption(data, '-');
  3808. formatter += data instanceof Array ? data : this.numAddCommas(data);
  3809. }
  3810. this._tDom.innerHTML = formatter;
  3811. }
  3812. }
  3813. if (showContent === false || !this.option.tooltip.showContent) {
  3814. return;
  3815. }
  3816. if (!this.hasAppend) {
  3817. this._tDom.style.left = this._zrWidth / 2 + 'px';
  3818. this._tDom.style.top = this._zrHeight / 2 + 'px';
  3819. this.dom.firstChild.appendChild(this._tDom);
  3820. this.hasAppend = true;
  3821. }
  3822. this._show(position, x + 10, y + 10, specialCssText);
  3823. }
  3824. },
  3825. _showPolarTrigger: function (polarIndex, dataIndex) {
  3826. if (this.component.polar == null || polarIndex == null || dataIndex == null || dataIndex < 0) {
  3827. return false;
  3828. }
  3829. var series = this.option.series;
  3830. var seriesArray = [];
  3831. var seriesIndex = [];
  3832. var formatter;
  3833. var position;
  3834. var showContent;
  3835. var specialCssText = '';
  3836. if (this.option.tooltip.trigger === 'axis') {
  3837. if (!this.option.tooltip.show) {
  3838. return false;
  3839. }
  3840. formatter = this.option.tooltip.formatter;
  3841. position = this.option.tooltip.position;
  3842. }
  3843. var indicatorName = this.option.polar[polarIndex].indicator[dataIndex].text;
  3844. for (var i = 0, l = series.length; i < l; i++) {
  3845. if (!this._isSelected(series[i].name)) {
  3846. continue;
  3847. }
  3848. if (series[i].polarIndex === polarIndex && this.deepQuery([
  3849. series[i],
  3850. this.option
  3851. ], 'tooltip.trigger') === 'axis') {
  3852. showContent = this.query(series[i], 'tooltip.showContent') || showContent;
  3853. formatter = this.query(series[i], 'tooltip.formatter') || formatter;
  3854. position = this.query(series[i], 'tooltip.position') || position;
  3855. specialCssText += this._style(this.query(series[i], 'tooltip'));
  3856. seriesArray.push(series[i]);
  3857. seriesIndex.push(i);
  3858. }
  3859. }
  3860. if (seriesArray.length > 0) {
  3861. var polarData;
  3862. var data;
  3863. var value;
  3864. var params = [];
  3865. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3866. polarData = seriesArray[i].data;
  3867. for (var j = 0, k = polarData.length; j < k; j++) {
  3868. data = polarData[j];
  3869. if (!this._isSelected(data.name)) {
  3870. continue;
  3871. }
  3872. data = data != null ? data : {
  3873. name: '',
  3874. value: { dataIndex: '-' }
  3875. };
  3876. value = this.getDataFromOption(data.value[dataIndex]);
  3877. params.push({
  3878. seriesIndex: seriesIndex[i],
  3879. seriesName: seriesArray[i].name || '',
  3880. series: seriesArray[i],
  3881. dataIndex: dataIndex,
  3882. data: data,
  3883. name: data.name,
  3884. indicator: indicatorName,
  3885. value: value,
  3886. 0: seriesArray[i].name || '',
  3887. 1: data.name,
  3888. 2: value,
  3889. 3: indicatorName
  3890. });
  3891. }
  3892. }
  3893. if (params.length <= 0) {
  3894. return;
  3895. }
  3896. this._lastItemTriggerId = -1;
  3897. if (this._lastDataIndex != dataIndex || this._lastSeriesIndex != seriesIndex[0]) {
  3898. this._lastDataIndex = dataIndex;
  3899. this._lastSeriesIndex = seriesIndex[0];
  3900. if (typeof formatter === 'function') {
  3901. this._curTicket = 'axis:' + dataIndex;
  3902. this._tDom.innerHTML = formatter.call(this.myChart, params, this._curTicket, this._setContent);
  3903. } else if (typeof formatter === 'string') {
  3904. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}');
  3905. for (var i = 0, l = params.length; i < l; i++) {
  3906. formatter = formatter.replace('{a' + i + '}', this._encodeHTML(params[i].seriesName));
  3907. formatter = formatter.replace('{b' + i + '}', this._encodeHTML(params[i].name));
  3908. formatter = formatter.replace('{c' + i + '}', this.numAddCommas(params[i].value));
  3909. formatter = formatter.replace('{d' + i + '}', this._encodeHTML(params[i].indicator));
  3910. }
  3911. this._tDom.innerHTML = formatter;
  3912. } else {
  3913. formatter = this._encodeHTML(params[0].name) + '<br/>' + this._encodeHTML(params[0].indicator) + ' : ' + this.numAddCommas(params[0].value);
  3914. for (var i = 1, l = params.length; i < l; i++) {
  3915. formatter += '<br/>' + this._encodeHTML(params[i].name) + '<br/>';
  3916. formatter += this._encodeHTML(params[i].indicator) + ' : ' + this.numAddCommas(params[i].value);
  3917. }
  3918. this._tDom.innerHTML = formatter;
  3919. }
  3920. }
  3921. if (showContent === false || !this.option.tooltip.showContent) {
  3922. return;
  3923. }
  3924. if (!this.hasAppend) {
  3925. this._tDom.style.left = this._zrWidth / 2 + 'px';
  3926. this._tDom.style.top = this._zrHeight / 2 + 'px';
  3927. this.dom.firstChild.appendChild(this._tDom);
  3928. this.hasAppend = true;
  3929. }
  3930. this._show(position, zrEvent.getX(this._event), zrEvent.getY(this._event), specialCssText);
  3931. return true;
  3932. }
  3933. },
  3934. _showItemTrigger: function (axisTrigger) {
  3935. if (!this._curTarget) {
  3936. return;
  3937. }
  3938. var serie = ecData.get(this._curTarget, 'series');
  3939. var seriesIndex = ecData.get(this._curTarget, 'seriesIndex');
  3940. var data = ecData.get(this._curTarget, 'data');
  3941. var dataIndex = ecData.get(this._curTarget, 'dataIndex');
  3942. var name = ecData.get(this._curTarget, 'name');
  3943. var value = ecData.get(this._curTarget, 'value');
  3944. var special = ecData.get(this._curTarget, 'special');
  3945. var special2 = ecData.get(this._curTarget, 'special2');
  3946. var queryTarget = [
  3947. data,
  3948. serie,
  3949. this.option
  3950. ];
  3951. var formatter;
  3952. var position;
  3953. var showContent;
  3954. var specialCssText = '';
  3955. if (this._curTarget._type != 'island') {
  3956. var trigger = axisTrigger ? 'axis' : 'item';
  3957. if (this.option.tooltip.trigger === trigger) {
  3958. formatter = this.option.tooltip.formatter;
  3959. position = this.option.tooltip.position;
  3960. }
  3961. if (this.query(serie, 'tooltip.trigger') === trigger) {
  3962. showContent = this.query(serie, 'tooltip.showContent') || showContent;
  3963. formatter = this.query(serie, 'tooltip.formatter') || formatter;
  3964. position = this.query(serie, 'tooltip.position') || position;
  3965. specialCssText += this._style(this.query(serie, 'tooltip'));
  3966. }
  3967. showContent = this.query(data, 'tooltip.showContent') || showContent;
  3968. formatter = this.query(data, 'tooltip.formatter') || formatter;
  3969. position = this.query(data, 'tooltip.position') || position;
  3970. specialCssText += this._style(this.query(data, 'tooltip'));
  3971. } else {
  3972. this._lastItemTriggerId = NaN;
  3973. showContent = this.deepQuery(queryTarget, 'tooltip.showContent');
  3974. formatter = this.deepQuery(queryTarget, 'tooltip.islandFormatter');
  3975. position = this.deepQuery(queryTarget, 'tooltip.islandPosition');
  3976. }
  3977. this._lastDataIndex = -1;
  3978. this._lastSeriesIndex = -1;
  3979. if (this._lastItemTriggerId !== this._curTarget.id) {
  3980. this._lastItemTriggerId = this._curTarget.id;
  3981. if (typeof formatter === 'function') {
  3982. this._curTicket = (serie.name || '') + ':' + dataIndex;
  3983. this._tDom.innerHTML = formatter.call(this.myChart, {
  3984. seriesIndex: seriesIndex,
  3985. seriesName: serie.name || '',
  3986. series: serie,
  3987. dataIndex: dataIndex,
  3988. data: data,
  3989. name: name,
  3990. value: value,
  3991. percent: special,
  3992. indicator: special,
  3993. value2: special2,
  3994. indicator2: special2,
  3995. 0: serie.name || '',
  3996. 1: name,
  3997. 2: value,
  3998. 3: special,
  3999. 4: special2,
  4000. 5: data,
  4001. 6: seriesIndex,
  4002. 7: dataIndex
  4003. }, this._curTicket, this._setContent);
  4004. } else if (typeof formatter === 'string') {
  4005. this._curTicket = NaN;
  4006. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
  4007. formatter = formatter.replace('{a0}', this._encodeHTML(serie.name || '')).replace('{b0}', this._encodeHTML(name)).replace('{c0}', value instanceof Array ? value : this.numAddCommas(value));
  4008. formatter = formatter.replace('{d}', '{d0}').replace('{d0}', special || '');
  4009. formatter = formatter.replace('{e}', '{e0}').replace('{e0}', ecData.get(this._curTarget, 'special2') || '');
  4010. this._tDom.innerHTML = formatter;
  4011. } else {
  4012. this._curTicket = NaN;
  4013. if (serie.type === ecConfig.CHART_TYPE_RADAR && special) {
  4014. this._tDom.innerHTML = this._itemFormatter.radar.call(this, serie, name, value, special);
  4015. } else if (serie.type === ecConfig.CHART_TYPE_EVENTRIVER) {
  4016. this._tDom.innerHTML = this._itemFormatter.eventRiver.call(this, serie, name, value, data);
  4017. } else {
  4018. this._tDom.innerHTML = '' + (serie.name != null ? this._encodeHTML(serie.name) + '<br/>' : '') + (name === '' ? '' : this._encodeHTML(name) + ' : ') + (value instanceof Array ? value : this.numAddCommas(value));
  4019. }
  4020. }
  4021. }
  4022. var x = zrEvent.getX(this._event);
  4023. var y = zrEvent.getY(this._event);
  4024. if (this.deepQuery(queryTarget, 'tooltip.axisPointer.show') && this.component.grid) {
  4025. this._styleAxisPointer([serie], this.component.grid.getX(), y, this.component.grid.getXend(), y, 0, x, y);
  4026. } else {
  4027. this._hide();
  4028. }
  4029. if (showContent === false || !this.option.tooltip.showContent) {
  4030. return;
  4031. }
  4032. if (!this.hasAppend) {
  4033. this._tDom.style.left = this._zrWidth / 2 + 'px';
  4034. this._tDom.style.top = this._zrHeight / 2 + 'px';
  4035. this.dom.firstChild.appendChild(this._tDom);
  4036. this.hasAppend = true;
  4037. }
  4038. this._show(position, x + 20, y - 20, specialCssText);
  4039. },
  4040. _itemFormatter: {
  4041. radar: function (serie, name, value, indicator) {
  4042. var html = '';
  4043. html += this._encodeHTML(name === '' ? serie.name || '' : name);
  4044. html += html === '' ? '' : '<br />';
  4045. for (var i = 0; i < indicator.length; i++) {
  4046. html += this._encodeHTML(indicator[i].text) + ' : ' + this.numAddCommas(value[i]) + '<br />';
  4047. }
  4048. return html;
  4049. },
  4050. chord: function (serie, name, value, special, special2) {
  4051. if (special2 == null) {
  4052. return this._encodeHTML(name) + ' (' + this.numAddCommas(value) + ')';
  4053. } else {
  4054. var name1 = this._encodeHTML(name);
  4055. var name2 = this._encodeHTML(special);
  4056. return '' + (serie.name != null ? this._encodeHTML(serie.name) + '<br/>' : '') + name1 + ' -> ' + name2 + ' (' + this.numAddCommas(value) + ')' + '<br />' + name2 + ' -> ' + name1 + ' (' + this.numAddCommas(special2) + ')';
  4057. }
  4058. },
  4059. eventRiver: function (serie, name, value, data) {
  4060. var html = '';
  4061. html += this._encodeHTML(serie.name === '' ? '' : serie.name + ' : ');
  4062. html += this._encodeHTML(name);
  4063. html += html === '' ? '' : '<br />';
  4064. data = data.evolution;
  4065. for (var i = 0, l = data.length; i < l; i++) {
  4066. html += '<div style="padding-top:5px;">';
  4067. if (!data[i].detail) {
  4068. continue;
  4069. }
  4070. if (data[i].detail.img) {
  4071. html += '<img src="' + data[i].detail.img + '" style="float:left;width:40px;height:40px;">';
  4072. }
  4073. html += '<div style="margin-left:45px;">' + data[i].time + '<br/>';
  4074. html += '<a href="' + data[i].detail.link + '" target="_blank">';
  4075. html += data[i].detail.text + '</a></div>';
  4076. html += '</div>';
  4077. }
  4078. return html;
  4079. }
  4080. },
  4081. _styleAxisPointer: function (seriesArray, xStart, yStart, xEnd, yEnd, gap, x, y) {
  4082. if (seriesArray.length > 0) {
  4083. var queryTarget;
  4084. var curType;
  4085. var axisPointer = this.option.tooltip.axisPointer;
  4086. var pointType = axisPointer.type;
  4087. var style = {
  4088. line: {},
  4089. cross: {},
  4090. shadow: {}
  4091. };
  4092. for (var pType in style) {
  4093. style[pType].color = axisPointer[pType + 'Style'].color;
  4094. style[pType].width = axisPointer[pType + 'Style'].width;
  4095. style[pType].type = axisPointer[pType + 'Style'].type;
  4096. }
  4097. for (var i = 0, l = seriesArray.length; i < l; i++) {
  4098. queryTarget = seriesArray[i];
  4099. curType = this.query(queryTarget, 'tooltip.axisPointer.type');
  4100. pointType = curType || pointType;
  4101. if (curType) {
  4102. style[curType].color = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.color') || style[curType].color;
  4103. style[curType].width = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.width') || style[curType].width;
  4104. style[curType].type = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.type') || style[curType].type;
  4105. }
  4106. }
  4107. if (pointType === 'line') {
  4108. var lineWidth = style.line.width;
  4109. var isVertical = xStart == xEnd;
  4110. this._axisLineShape.style = {
  4111. xStart: isVertical ? this.subPixelOptimize(xStart, lineWidth) : xStart,
  4112. yStart: isVertical ? yStart : this.subPixelOptimize(yStart, lineWidth),
  4113. xEnd: isVertical ? this.subPixelOptimize(xEnd, lineWidth) : xEnd,
  4114. yEnd: isVertical ? yEnd : this.subPixelOptimize(yEnd, lineWidth),
  4115. strokeColor: style.line.color,
  4116. lineWidth: lineWidth,
  4117. lineType: style.line.type
  4118. };
  4119. this._axisLineShape.invisible = false;
  4120. this.zr.modShape(this._axisLineShape.id);
  4121. } else if (pointType === 'cross') {
  4122. var crossWidth = style.cross.width;
  4123. this._axisCrossShape.style = {
  4124. brushType: 'stroke',
  4125. rect: this.component.grid.getArea(),
  4126. x: this.subPixelOptimize(x, crossWidth),
  4127. y: this.subPixelOptimize(y, crossWidth),
  4128. text: ('( ' + this.component.xAxis.getAxis(0).getValueFromCoord(x) + ' , ' + this.component.yAxis.getAxis(0).getValueFromCoord(y) + ' )').replace(' , ', ' ').replace(' , ', ' '),
  4129. textPosition: 'specific',
  4130. strokeColor: style.cross.color,
  4131. lineWidth: crossWidth,
  4132. lineType: style.cross.type
  4133. };
  4134. if (this.component.grid.getXend() - x > 100) {
  4135. this._axisCrossShape.style.textAlign = 'left';
  4136. this._axisCrossShape.style.textX = x + 10;
  4137. } else {
  4138. this._axisCrossShape.style.textAlign = 'right';
  4139. this._axisCrossShape.style.textX = x - 10;
  4140. }
  4141. if (y - this.component.grid.getY() > 50) {
  4142. this._axisCrossShape.style.textBaseline = 'bottom';
  4143. this._axisCrossShape.style.textY = y - 10;
  4144. } else {
  4145. this._axisCrossShape.style.textBaseline = 'top';
  4146. this._axisCrossShape.style.textY = y + 10;
  4147. }
  4148. this._axisCrossShape.invisible = false;
  4149. this.zr.modShape(this._axisCrossShape.id);
  4150. } else if (pointType === 'shadow') {
  4151. if (style.shadow.width == null || style.shadow.width === 'auto' || isNaN(style.shadow.width)) {
  4152. style.shadow.width = gap;
  4153. }
  4154. if (xStart === xEnd) {
  4155. if (Math.abs(this.component.grid.getX() - xStart) < 2) {
  4156. style.shadow.width /= 2;
  4157. xStart = xEnd = xEnd + style.shadow.width / 2;
  4158. } else if (Math.abs(this.component.grid.getXend() - xStart) < 2) {
  4159. style.shadow.width /= 2;
  4160. xStart = xEnd = xEnd - style.shadow.width / 2;
  4161. }
  4162. } else if (yStart === yEnd) {
  4163. if (Math.abs(this.component.grid.getY() - yStart) < 2) {
  4164. style.shadow.width /= 2;
  4165. yStart = yEnd = yEnd + style.shadow.width / 2;
  4166. } else if (Math.abs(this.component.grid.getYend() - yStart) < 2) {
  4167. style.shadow.width /= 2;
  4168. yStart = yEnd = yEnd - style.shadow.width / 2;
  4169. }
  4170. }
  4171. this._axisShadowShape.style = {
  4172. xStart: xStart,
  4173. yStart: yStart,
  4174. xEnd: xEnd,
  4175. yEnd: yEnd,
  4176. strokeColor: style.shadow.color,
  4177. lineWidth: style.shadow.width
  4178. };
  4179. this._axisShadowShape.invisible = false;
  4180. this.zr.modShape(this._axisShadowShape.id);
  4181. }
  4182. this.zr.refreshNextFrame();
  4183. }
  4184. },
  4185. __onmousemove: function (param) {
  4186. clearTimeout(this._hidingTicket);
  4187. clearTimeout(this._showingTicket);
  4188. if (this._mousein && this._enterable) {
  4189. return;
  4190. }
  4191. var target = param.target;
  4192. var mx = zrEvent.getX(param.event);
  4193. var my = zrEvent.getY(param.event);
  4194. if (!target) {
  4195. this._curTarget = false;
  4196. this._event = param.event;
  4197. this._event.zrenderX = mx;
  4198. this._event.zrenderY = my;
  4199. if (this._needAxisTrigger && this.component.grid && zrArea.isInside(rectangleInstance, this.component.grid.getArea(), mx, my)) {
  4200. this._showingTicket = setTimeout(this._tryShow, this._showDelay);
  4201. } else if (this._needAxisTrigger && this.component.polar && this.component.polar.isInside([
  4202. mx,
  4203. my
  4204. ]) != -1) {
  4205. this._showingTicket = setTimeout(this._tryShow, this._showDelay);
  4206. } else {
  4207. !this._event.connectTrigger && this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_OUT_GRID, this._event, null, this.myChart);
  4208. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  4209. }
  4210. } else {
  4211. this._curTarget = target;
  4212. this._event = param.event;
  4213. this._event.zrenderX = mx;
  4214. this._event.zrenderY = my;
  4215. var polarIndex;
  4216. if (this._needAxisTrigger && this.component.polar && (polarIndex = this.component.polar.isInside([
  4217. mx,
  4218. my
  4219. ])) != -1) {
  4220. var series = this.option.series;
  4221. for (var i = 0, l = series.length; i < l; i++) {
  4222. if (series[i].polarIndex === polarIndex && this.deepQuery([
  4223. series[i],
  4224. this.option
  4225. ], 'tooltip.trigger') === 'axis') {
  4226. this._curTarget = null;
  4227. break;
  4228. }
  4229. }
  4230. }
  4231. this._showingTicket = setTimeout(this._tryShow, this._showDelay);
  4232. }
  4233. },
  4234. __onglobalout: function () {
  4235. clearTimeout(this._hidingTicket);
  4236. clearTimeout(this._showingTicket);
  4237. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  4238. },
  4239. __setContent: function (ticket, content) {
  4240. if (!this._tDom) {
  4241. return;
  4242. }
  4243. if (ticket === this._curTicket) {
  4244. this._tDom.innerHTML = content;
  4245. }
  4246. setTimeout(this._refixed, 20);
  4247. },
  4248. ontooltipHover: function (param, tipShape) {
  4249. if (!this._lastTipShape || this._lastTipShape && this._lastTipShape.dataIndex != param.dataIndex) {
  4250. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  4251. this.zr.delShape(this._lastTipShape.tipShape);
  4252. this.shapeList.length = 2;
  4253. }
  4254. for (var i = 0, l = tipShape.length; i < l; i++) {
  4255. tipShape[i].zlevel = this.getZlevelBase();
  4256. tipShape[i].z = this.getZBase();
  4257. tipShape[i].style = zrShapeBase.prototype.getHighlightStyle(tipShape[i].style, tipShape[i].highlightStyle);
  4258. tipShape[i].draggable = false;
  4259. tipShape[i].hoverable = false;
  4260. tipShape[i].clickable = false;
  4261. tipShape[i].ondragend = null;
  4262. tipShape[i].ondragover = null;
  4263. tipShape[i].ondrop = null;
  4264. this.shapeList.push(tipShape[i]);
  4265. this.zr.addShape(tipShape[i]);
  4266. }
  4267. this._lastTipShape = {
  4268. dataIndex: param.dataIndex,
  4269. tipShape: tipShape
  4270. };
  4271. }
  4272. },
  4273. ondragend: function () {
  4274. this._hide();
  4275. },
  4276. onlegendSelected: function (param) {
  4277. this._selectedMap = param.selected;
  4278. },
  4279. _setSelectedMap: function () {
  4280. if (this.component.legend) {
  4281. this._selectedMap = zrUtil.clone(this.component.legend.getSelectedMap());
  4282. } else {
  4283. this._selectedMap = {};
  4284. }
  4285. },
  4286. _isSelected: function (itemName) {
  4287. if (this._selectedMap[itemName] != null) {
  4288. return this._selectedMap[itemName];
  4289. } else {
  4290. return true;
  4291. }
  4292. },
  4293. showTip: function (params) {
  4294. if (!params) {
  4295. return;
  4296. }
  4297. var seriesIndex;
  4298. var series = this.option.series;
  4299. if (params.seriesIndex != null) {
  4300. seriesIndex = params.seriesIndex;
  4301. } else {
  4302. var seriesName = params.seriesName;
  4303. for (var i = 0, l = series.length; i < l; i++) {
  4304. if (series[i].name === seriesName) {
  4305. seriesIndex = i;
  4306. break;
  4307. }
  4308. }
  4309. }
  4310. var serie = series[seriesIndex];
  4311. if (serie == null) {
  4312. return;
  4313. }
  4314. var chart = this.myChart.chart[serie.type];
  4315. var isAxisTrigger = this.deepQuery([
  4316. serie,
  4317. this.option
  4318. ], 'tooltip.trigger') === 'axis';
  4319. if (!chart) {
  4320. return;
  4321. }
  4322. if (isAxisTrigger) {
  4323. var dataIndex = params.dataIndex;
  4324. switch (chart.type) {
  4325. case ecConfig.CHART_TYPE_LINE:
  4326. case ecConfig.CHART_TYPE_BAR:
  4327. case ecConfig.CHART_TYPE_K:
  4328. if (this.component.xAxis == null || this.component.yAxis == null || serie.data.length <= dataIndex) {
  4329. return;
  4330. }
  4331. var xAxisIndex = serie.xAxisIndex || 0;
  4332. var yAxisIndex = serie.yAxisIndex || 0;
  4333. if (this.component.xAxis.getAxis(xAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  4334. this._event = {
  4335. zrenderX: this.component.xAxis.getAxis(xAxisIndex).getCoordByIndex(dataIndex),
  4336. zrenderY: this.component.grid.getY() + (this.component.grid.getYend() - this.component.grid.getY()) / 4
  4337. };
  4338. } else {
  4339. this._event = {
  4340. zrenderX: this.component.grid.getX() + (this.component.grid.getXend() - this.component.grid.getX()) / 4,
  4341. zrenderY: this.component.yAxis.getAxis(yAxisIndex).getCoordByIndex(dataIndex)
  4342. };
  4343. }
  4344. this._showAxisTrigger(xAxisIndex, yAxisIndex, dataIndex);
  4345. break;
  4346. case ecConfig.CHART_TYPE_RADAR:
  4347. if (this.component.polar == null || serie.data[0].value.length <= dataIndex) {
  4348. return;
  4349. }
  4350. var polarIndex = serie.polarIndex || 0;
  4351. var vector = this.component.polar.getVector(polarIndex, dataIndex, 'max');
  4352. this._event = {
  4353. zrenderX: vector[0],
  4354. zrenderY: vector[1]
  4355. };
  4356. this._showPolarTrigger(polarIndex, dataIndex);
  4357. break;
  4358. }
  4359. } else {
  4360. var shapeList = chart.shapeList;
  4361. var x;
  4362. var y;
  4363. switch (chart.type) {
  4364. case ecConfig.CHART_TYPE_LINE:
  4365. case ecConfig.CHART_TYPE_BAR:
  4366. case ecConfig.CHART_TYPE_K:
  4367. case ecConfig.CHART_TYPE_SCATTER:
  4368. var dataIndex = params.dataIndex;
  4369. for (var i = 0, l = shapeList.length; i < l; i++) {
  4370. if (shapeList[i]._mark == null && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'dataIndex') == dataIndex) {
  4371. this._curTarget = shapeList[i];
  4372. x = shapeList[i].style.x;
  4373. y = chart.type != ecConfig.CHART_TYPE_K ? shapeList[i].style.y : shapeList[i].style.y[0];
  4374. break;
  4375. }
  4376. }
  4377. break;
  4378. case ecConfig.CHART_TYPE_RADAR:
  4379. var dataIndex = params.dataIndex;
  4380. for (var i = 0, l = shapeList.length; i < l; i++) {
  4381. if (shapeList[i].type === 'polygon' && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'dataIndex') == dataIndex) {
  4382. this._curTarget = shapeList[i];
  4383. var vector = this.component.polar.getCenter(serie.polarIndex || 0);
  4384. x = vector[0];
  4385. y = vector[1];
  4386. break;
  4387. }
  4388. }
  4389. break;
  4390. case ecConfig.CHART_TYPE_PIE:
  4391. var name = params.name;
  4392. for (var i = 0, l = shapeList.length; i < l; i++) {
  4393. if (shapeList[i].type === 'sector' && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'name') == name) {
  4394. this._curTarget = shapeList[i];
  4395. var style = this._curTarget.style;
  4396. var midAngle = (style.startAngle + style.endAngle) / 2 * Math.PI / 180;
  4397. x = this._curTarget.style.x + Math.cos(midAngle) * style.r / 1.5;
  4398. y = this._curTarget.style.y - Math.sin(midAngle) * style.r / 1.5;
  4399. break;
  4400. }
  4401. }
  4402. break;
  4403. case ecConfig.CHART_TYPE_MAP:
  4404. var name = params.name;
  4405. var mapType = serie.mapType;
  4406. for (var i = 0, l = shapeList.length; i < l; i++) {
  4407. if (shapeList[i].type === 'text' && shapeList[i]._mapType === mapType && shapeList[i].style._name === name) {
  4408. this._curTarget = shapeList[i];
  4409. x = this._curTarget.style.x + this._curTarget.position[0];
  4410. y = this._curTarget.style.y + this._curTarget.position[1];
  4411. break;
  4412. }
  4413. }
  4414. break;
  4415. case ecConfig.CHART_TYPE_CHORD:
  4416. var name = params.name;
  4417. for (var i = 0, l = shapeList.length; i < l; i++) {
  4418. if (shapeList[i].type === 'sector' && ecData.get(shapeList[i], 'name') == name) {
  4419. this._curTarget = shapeList[i];
  4420. var style = this._curTarget.style;
  4421. var midAngle = (style.startAngle + style.endAngle) / 2 * Math.PI / 180;
  4422. x = this._curTarget.style.x + Math.cos(midAngle) * (style.r - 2);
  4423. y = this._curTarget.style.y - Math.sin(midAngle) * (style.r - 2);
  4424. this.zr.trigger(zrConfig.EVENT.MOUSEMOVE, {
  4425. zrenderX: x,
  4426. zrenderY: y
  4427. });
  4428. return;
  4429. }
  4430. }
  4431. break;
  4432. case ecConfig.CHART_TYPE_FORCE:
  4433. var name = params.name;
  4434. for (var i = 0, l = shapeList.length; i < l; i++) {
  4435. if (shapeList[i].type === 'circle' && ecData.get(shapeList[i], 'name') == name) {
  4436. this._curTarget = shapeList[i];
  4437. x = this._curTarget.position[0];
  4438. y = this._curTarget.position[1];
  4439. break;
  4440. }
  4441. }
  4442. break;
  4443. }
  4444. if (x != null && y != null) {
  4445. this._event = {
  4446. zrenderX: x,
  4447. zrenderY: y
  4448. };
  4449. this.zr.addHoverShape(this._curTarget);
  4450. this.zr.refreshHover();
  4451. this._showItemTrigger();
  4452. }
  4453. }
  4454. },
  4455. hideTip: function () {
  4456. this._hide();
  4457. },
  4458. refresh: function (newOption) {
  4459. this._zrHeight = this.zr.getHeight();
  4460. this._zrWidth = this.zr.getWidth();
  4461. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  4462. this.zr.delShape(this._lastTipShape.tipShape);
  4463. }
  4464. this._lastTipShape = false;
  4465. this.shapeList.length = 2;
  4466. this._lastDataIndex = -1;
  4467. this._lastSeriesIndex = -1;
  4468. this._lastItemTriggerId = -1;
  4469. if (newOption) {
  4470. this.option = newOption;
  4471. this.option.tooltip = this.reformOption(this.option.tooltip);
  4472. this.option.tooltip.textStyle = zrUtil.merge(this.option.tooltip.textStyle, this.ecTheme.textStyle);
  4473. this._needAxisTrigger = false;
  4474. if (this.option.tooltip.trigger === 'axis') {
  4475. this._needAxisTrigger = true;
  4476. }
  4477. var series = this.option.series;
  4478. for (var i = 0, l = series.length; i < l; i++) {
  4479. if (this.query(series[i], 'tooltip.trigger') === 'axis') {
  4480. this._needAxisTrigger = true;
  4481. break;
  4482. }
  4483. }
  4484. this._showDelay = this.option.tooltip.showDelay;
  4485. this._hideDelay = this.option.tooltip.hideDelay;
  4486. this._defaultCssText = this._style(this.option.tooltip);
  4487. this._setSelectedMap();
  4488. this._axisLineWidth = this.option.tooltip.axisPointer.lineStyle.width;
  4489. this._enterable = this.option.tooltip.enterable;
  4490. }
  4491. if (this.showing) {
  4492. var self = this;
  4493. setTimeout(function () {
  4494. self.zr.trigger(zrConfig.EVENT.MOUSEMOVE, self.zr.handler._event);
  4495. }, 50);
  4496. }
  4497. },
  4498. onbeforDispose: function () {
  4499. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  4500. this.zr.delShape(this._lastTipShape.tipShape);
  4501. }
  4502. clearTimeout(this._hidingTicket);
  4503. clearTimeout(this._showingTicket);
  4504. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
  4505. this.zr.un(zrConfig.EVENT.GLOBALOUT, this._onglobalout);
  4506. if (this.hasAppend && !!this.dom.firstChild) {
  4507. this.dom.firstChild.removeChild(this._tDom);
  4508. }
  4509. this._tDom = null;
  4510. },
  4511. _encodeHTML: function (source) {
  4512. return String(source).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
  4513. }
  4514. };
  4515. zrUtil.inherits(Tooltip, Base);
  4516. require('../component').define('tooltip', Tooltip);
  4517. return Tooltip;
  4518. });define('echarts/component/legend', [
  4519. 'require',
  4520. './base',
  4521. 'zrender/shape/Text',
  4522. 'zrender/shape/Rectangle',
  4523. 'zrender/shape/Sector',
  4524. '../util/shape/Icon',
  4525. '../util/shape/Candle',
  4526. '../config',
  4527. 'zrender/tool/util',
  4528. 'zrender/tool/area',
  4529. '../component'
  4530. ], function (require) {
  4531. var Base = require('./base');
  4532. var TextShape = require('zrender/shape/Text');
  4533. var RectangleShape = require('zrender/shape/Rectangle');
  4534. var SectorShape = require('zrender/shape/Sector');
  4535. var IconShape = require('../util/shape/Icon');
  4536. var CandleShape = require('../util/shape/Candle');
  4537. var ecConfig = require('../config');
  4538. ecConfig.legend = {
  4539. zlevel: 0,
  4540. z: 4,
  4541. show: true,
  4542. orient: 'horizontal',
  4543. x: 'center',
  4544. y: 'top',
  4545. backgroundColor: 'rgba(0,0,0,0)',
  4546. borderColor: '#ccc',
  4547. borderWidth: 0,
  4548. padding: 5,
  4549. itemGap: 10,
  4550. itemWidth: 20,
  4551. itemHeight: 14,
  4552. textStyle: { color: '#333' },
  4553. selectedMode: true
  4554. };
  4555. var zrUtil = require('zrender/tool/util');
  4556. var zrArea = require('zrender/tool/area');
  4557. function Legend(ecTheme, messageCenter, zr, option, myChart) {
  4558. if (!this.query(option, 'legend.data')) {
  4559. console.error('option.legend.data has not been defined.');
  4560. return;
  4561. }
  4562. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  4563. var self = this;
  4564. self._legendSelected = function (param) {
  4565. self.__legendSelected(param);
  4566. };
  4567. self._dispatchHoverLink = function (param) {
  4568. return self.__dispatchHoverLink(param);
  4569. };
  4570. this._colorIndex = 0;
  4571. this._colorMap = {};
  4572. this._selectedMap = {};
  4573. this._hasDataMap = {};
  4574. this.refresh(option);
  4575. }
  4576. Legend.prototype = {
  4577. type: ecConfig.COMPONENT_TYPE_LEGEND,
  4578. _buildShape: function () {
  4579. if (!this.legendOption.show) {
  4580. return;
  4581. }
  4582. this._itemGroupLocation = this._getItemGroupLocation();
  4583. this._buildBackground();
  4584. this._buildItem();
  4585. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  4586. this.zr.addShape(this.shapeList[i]);
  4587. }
  4588. },
  4589. _buildItem: function () {
  4590. var data = this.legendOption.data;
  4591. var dataLength = data.length;
  4592. var itemName;
  4593. var itemType;
  4594. var itemShape;
  4595. var textShape;
  4596. var textStyle = this.legendOption.textStyle;
  4597. var dataTextStyle;
  4598. var dataFont;
  4599. var formattedName;
  4600. var zrWidth = this.zr.getWidth();
  4601. var zrHeight = this.zr.getHeight();
  4602. var lastX = this._itemGroupLocation.x;
  4603. var lastY = this._itemGroupLocation.y;
  4604. var itemWidth = this.legendOption.itemWidth;
  4605. var itemHeight = this.legendOption.itemHeight;
  4606. var itemGap = this.legendOption.itemGap;
  4607. var color;
  4608. if (this.legendOption.orient === 'vertical' && this.legendOption.x === 'right') {
  4609. lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
  4610. }
  4611. for (var i = 0; i < dataLength; i++) {
  4612. dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
  4613. dataFont = this.getFont(dataTextStyle);
  4614. itemName = this._getName(data[i]);
  4615. formattedName = this._getFormatterName(itemName);
  4616. if (itemName === '') {
  4617. if (this.legendOption.orient === 'horizontal') {
  4618. lastX = this._itemGroupLocation.x;
  4619. lastY += itemHeight + itemGap;
  4620. } else {
  4621. this.legendOption.x === 'right' ? lastX -= this._itemGroupLocation.maxWidth + itemGap : lastX += this._itemGroupLocation.maxWidth + itemGap;
  4622. lastY = this._itemGroupLocation.y;
  4623. }
  4624. continue;
  4625. }
  4626. itemType = data[i].icon || this._getSomethingByName(itemName).type;
  4627. color = this.getColor(itemName);
  4628. if (this.legendOption.orient === 'horizontal') {
  4629. if (zrWidth - lastX < 200 && itemWidth + 5 + zrArea.getTextWidth(formattedName, dataFont) + (i === dataLength - 1 || data[i + 1] === '' ? 0 : itemGap) >= zrWidth - lastX) {
  4630. lastX = this._itemGroupLocation.x;
  4631. lastY += itemHeight + itemGap;
  4632. }
  4633. } else {
  4634. if (zrHeight - lastY < 200 && itemHeight + (i === dataLength - 1 || data[i + 1] === '' ? 0 : itemGap) >= zrHeight - lastY) {
  4635. this.legendOption.x === 'right' ? lastX -= this._itemGroupLocation.maxWidth + itemGap : lastX += this._itemGroupLocation.maxWidth + itemGap;
  4636. lastY = this._itemGroupLocation.y;
  4637. }
  4638. }
  4639. itemShape = this._getItemShapeByType(lastX, lastY, itemWidth, itemHeight, this._selectedMap[itemName] && this._hasDataMap[itemName] ? color : '#ccc', itemType, color);
  4640. itemShape._name = itemName;
  4641. itemShape = new IconShape(itemShape);
  4642. textShape = {
  4643. zlevel: this.getZlevelBase(),
  4644. z: this.getZBase(),
  4645. style: {
  4646. x: lastX + itemWidth + 5,
  4647. y: lastY + itemHeight / 2,
  4648. color: this._selectedMap[itemName] ? dataTextStyle.color === 'auto' ? color : dataTextStyle.color : '#ccc',
  4649. text: formattedName,
  4650. textFont: dataFont,
  4651. textBaseline: 'middle'
  4652. },
  4653. highlightStyle: {
  4654. color: color,
  4655. brushType: 'fill'
  4656. },
  4657. hoverable: !!this.legendOption.selectedMode,
  4658. clickable: !!this.legendOption.selectedMode
  4659. };
  4660. if (this.legendOption.orient === 'vertical' && this.legendOption.x === 'right') {
  4661. textShape.style.x -= itemWidth + 10;
  4662. textShape.style.textAlign = 'right';
  4663. }
  4664. textShape._name = itemName;
  4665. textShape = new TextShape(textShape);
  4666. if (this.legendOption.selectedMode) {
  4667. itemShape.onclick = textShape.onclick = this._legendSelected;
  4668. itemShape.onmouseover = textShape.onmouseover = this._dispatchHoverLink;
  4669. itemShape.hoverConnect = textShape.id;
  4670. textShape.hoverConnect = itemShape.id;
  4671. }
  4672. this.shapeList.push(itemShape);
  4673. this.shapeList.push(textShape);
  4674. if (this.legendOption.orient === 'horizontal') {
  4675. lastX += itemWidth + 5 + zrArea.getTextWidth(formattedName, dataFont) + itemGap;
  4676. } else {
  4677. lastY += itemHeight + itemGap;
  4678. }
  4679. }
  4680. if (this.legendOption.orient === 'horizontal' && this.legendOption.x === 'center' && lastY != this._itemGroupLocation.y) {
  4681. this._mLineOptimize();
  4682. }
  4683. },
  4684. _getName: function (data) {
  4685. return typeof data.name != 'undefined' ? data.name : data;
  4686. },
  4687. _getFormatterName: function (itemName) {
  4688. var formatter = this.legendOption.formatter;
  4689. var formattedName;
  4690. if (typeof formatter === 'function') {
  4691. formattedName = formatter.call(this.myChart, itemName);
  4692. } else if (typeof formatter === 'string') {
  4693. formattedName = formatter.replace('{name}', itemName);
  4694. } else {
  4695. formattedName = itemName;
  4696. }
  4697. return formattedName;
  4698. },
  4699. _getFormatterNameFromData: function (data) {
  4700. var itemName = this._getName(data);
  4701. return this._getFormatterName(itemName);
  4702. },
  4703. _mLineOptimize: function () {
  4704. var lineOffsetArray = [];
  4705. var lastX = this._itemGroupLocation.x;
  4706. for (var i = 2, l = this.shapeList.length; i < l; i++) {
  4707. if (this.shapeList[i].style.x === lastX) {
  4708. 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);
  4709. } else if (i === l - 1) {
  4710. lineOffsetArray.push((this._itemGroupLocation.width - (this.shapeList[i].style.x + zrArea.getTextWidth(this.shapeList[i].style.text, this.shapeList[i].style.textFont) - lastX)) / 2);
  4711. }
  4712. }
  4713. var curLineIndex = -1;
  4714. for (var i = 1, l = this.shapeList.length; i < l; i++) {
  4715. if (this.shapeList[i].style.x === lastX) {
  4716. curLineIndex++;
  4717. }
  4718. if (lineOffsetArray[curLineIndex] === 0) {
  4719. continue;
  4720. } else {
  4721. this.shapeList[i].style.x += lineOffsetArray[curLineIndex];
  4722. }
  4723. }
  4724. },
  4725. _buildBackground: function () {
  4726. var padding = this.reformCssArray(this.legendOption.padding);
  4727. this.shapeList.push(new RectangleShape({
  4728. zlevel: this.getZlevelBase(),
  4729. z: this.getZBase(),
  4730. hoverable: false,
  4731. style: {
  4732. x: this._itemGroupLocation.x - padding[3],
  4733. y: this._itemGroupLocation.y - padding[0],
  4734. width: this._itemGroupLocation.width + padding[3] + padding[1],
  4735. height: this._itemGroupLocation.height + padding[0] + padding[2],
  4736. brushType: this.legendOption.borderWidth === 0 ? 'fill' : 'both',
  4737. color: this.legendOption.backgroundColor,
  4738. strokeColor: this.legendOption.borderColor,
  4739. lineWidth: this.legendOption.borderWidth
  4740. }
  4741. }));
  4742. },
  4743. _getItemGroupLocation: function () {
  4744. var data = this.legendOption.data;
  4745. var dataLength = data.length;
  4746. var itemGap = this.legendOption.itemGap;
  4747. var itemWidth = this.legendOption.itemWidth + 5;
  4748. var itemHeight = this.legendOption.itemHeight;
  4749. var textStyle = this.legendOption.textStyle;
  4750. var font = this.getFont(textStyle);
  4751. var totalWidth = 0;
  4752. var totalHeight = 0;
  4753. var padding = this.reformCssArray(this.legendOption.padding);
  4754. var zrWidth = this.zr.getWidth() - padding[1] - padding[3];
  4755. var zrHeight = this.zr.getHeight() - padding[0] - padding[2];
  4756. var temp = 0;
  4757. var maxWidth = 0;
  4758. if (this.legendOption.orient === 'horizontal') {
  4759. totalHeight = itemHeight;
  4760. for (var i = 0; i < dataLength; i++) {
  4761. if (this._getName(data[i]) === '') {
  4762. temp -= itemGap;
  4763. totalWidth = Math.max(totalWidth, temp);
  4764. totalHeight += itemHeight + itemGap;
  4765. temp = 0;
  4766. continue;
  4767. }
  4768. var tempTextWidth = zrArea.getTextWidth(this._getFormatterNameFromData(data[i]), data[i].textStyle ? this.getFont(zrUtil.merge(data[i].textStyle || {}, textStyle)) : font);
  4769. if (temp + itemWidth + tempTextWidth + itemGap > zrWidth) {
  4770. temp -= itemGap;
  4771. totalWidth = Math.max(totalWidth, temp);
  4772. totalHeight += itemHeight + itemGap;
  4773. temp = 0;
  4774. } else {
  4775. temp += itemWidth + tempTextWidth + itemGap;
  4776. totalWidth = Math.max(totalWidth, temp - itemGap);
  4777. }
  4778. }
  4779. } else {
  4780. for (var i = 0; i < dataLength; i++) {
  4781. maxWidth = Math.max(maxWidth, zrArea.getTextWidth(this._getFormatterNameFromData(data[i]), data[i].textStyle ? this.getFont(zrUtil.merge(data[i].textStyle || {}, textStyle)) : font));
  4782. }
  4783. maxWidth += itemWidth;
  4784. totalWidth = maxWidth;
  4785. for (var i = 0; i < dataLength; i++) {
  4786. if (this._getName(data[i]) === '') {
  4787. totalWidth += maxWidth + itemGap;
  4788. temp -= itemGap;
  4789. totalHeight = Math.max(totalHeight, temp);
  4790. temp = 0;
  4791. continue;
  4792. }
  4793. if (temp + itemHeight + itemGap > zrHeight) {
  4794. totalWidth += maxWidth + itemGap;
  4795. temp -= itemGap;
  4796. totalHeight = Math.max(totalHeight, temp);
  4797. temp = 0;
  4798. } else {
  4799. temp += itemHeight + itemGap;
  4800. totalHeight = Math.max(totalHeight, temp - itemGap);
  4801. }
  4802. }
  4803. }
  4804. zrWidth = this.zr.getWidth();
  4805. zrHeight = this.zr.getHeight();
  4806. var x;
  4807. switch (this.legendOption.x) {
  4808. case 'center':
  4809. x = Math.floor((zrWidth - totalWidth) / 2);
  4810. break;
  4811. case 'left':
  4812. x = padding[3] + this.legendOption.borderWidth;
  4813. break;
  4814. case 'right':
  4815. x = zrWidth - totalWidth - padding[1] - padding[3] - this.legendOption.borderWidth * 2;
  4816. break;
  4817. default:
  4818. x = this.parsePercent(this.legendOption.x, zrWidth);
  4819. break;
  4820. }
  4821. var y;
  4822. switch (this.legendOption.y) {
  4823. case 'top':
  4824. y = padding[0] + this.legendOption.borderWidth;
  4825. break;
  4826. case 'bottom':
  4827. y = zrHeight - totalHeight - padding[0] - padding[2] - this.legendOption.borderWidth * 2;
  4828. break;
  4829. case 'center':
  4830. y = Math.floor((zrHeight - totalHeight) / 2);
  4831. break;
  4832. default:
  4833. y = this.parsePercent(this.legendOption.y, zrHeight);
  4834. break;
  4835. }
  4836. return {
  4837. x: x,
  4838. y: y,
  4839. width: totalWidth,
  4840. height: totalHeight,
  4841. maxWidth: maxWidth
  4842. };
  4843. },
  4844. _getSomethingByName: function (name) {
  4845. var series = this.option.series;
  4846. var data;
  4847. for (var i = 0, l = series.length; i < l; i++) {
  4848. if (series[i].name === name) {
  4849. return {
  4850. type: series[i].type,
  4851. series: series[i],
  4852. seriesIndex: i,
  4853. data: null,
  4854. dataIndex: -1
  4855. };
  4856. }
  4857. 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) {
  4858. data = series[i].categories || series[i].data || series[i].nodes;
  4859. for (var j = 0, k = data.length; j < k; j++) {
  4860. if (data[j].name === name) {
  4861. return {
  4862. type: series[i].type,
  4863. series: series[i],
  4864. seriesIndex: i,
  4865. data: data[j],
  4866. dataIndex: j
  4867. };
  4868. }
  4869. }
  4870. }
  4871. }
  4872. return {
  4873. type: 'bar',
  4874. series: null,
  4875. seriesIndex: -1,
  4876. data: null,
  4877. dataIndex: -1
  4878. };
  4879. },
  4880. _getItemShapeByType: function (x, y, width, height, color, itemType, defaultColor) {
  4881. var highlightColor = color === '#ccc' ? defaultColor : color;
  4882. var itemShape = {
  4883. zlevel: this.getZlevelBase(),
  4884. z: this.getZBase(),
  4885. style: {
  4886. iconType: 'legendicon' + itemType,
  4887. x: x,
  4888. y: y,
  4889. width: width,
  4890. height: height,
  4891. color: color,
  4892. strokeColor: color,
  4893. lineWidth: 2
  4894. },
  4895. highlightStyle: {
  4896. color: highlightColor,
  4897. strokeColor: highlightColor,
  4898. lineWidth: 1
  4899. },
  4900. hoverable: this.legendOption.selectedMode,
  4901. clickable: this.legendOption.selectedMode
  4902. };
  4903. var imageLocation;
  4904. if (itemType.match('image')) {
  4905. var imageLocation = itemType.replace(new RegExp('^image:\\/\\/'), '');
  4906. itemType = 'image';
  4907. }
  4908. switch (itemType) {
  4909. case 'line':
  4910. itemShape.style.brushType = 'stroke';
  4911. itemShape.highlightStyle.lineWidth = 3;
  4912. break;
  4913. case 'radar':
  4914. case 'scatter':
  4915. itemShape.highlightStyle.lineWidth = 3;
  4916. break;
  4917. case 'k':
  4918. itemShape.style.brushType = 'both';
  4919. itemShape.highlightStyle.lineWidth = 3;
  4920. itemShape.highlightStyle.color = itemShape.style.color = this.deepQuery([
  4921. this.ecTheme,
  4922. ecConfig
  4923. ], 'k.itemStyle.normal.color') || '#fff';
  4924. itemShape.style.strokeColor = color != '#ccc' ? this.deepQuery([
  4925. this.ecTheme,
  4926. ecConfig
  4927. ], 'k.itemStyle.normal.lineStyle.color') || '#ff3200' : color;
  4928. break;
  4929. case 'image':
  4930. itemShape.style.iconType = 'image';
  4931. itemShape.style.image = imageLocation;
  4932. if (color === '#ccc') {
  4933. itemShape.style.opacity = 0.5;
  4934. }
  4935. break;
  4936. }
  4937. return itemShape;
  4938. },
  4939. __legendSelected: function (param) {
  4940. var itemName = param.target._name;
  4941. if (this.legendOption.selectedMode === 'single') {
  4942. for (var k in this._selectedMap) {
  4943. this._selectedMap[k] = false;
  4944. }
  4945. }
  4946. this._selectedMap[itemName] = !this._selectedMap[itemName];
  4947. this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_SELECTED, param.event, {
  4948. selected: this._selectedMap,
  4949. target: itemName
  4950. }, this.myChart);
  4951. },
  4952. __dispatchHoverLink: function (param) {
  4953. this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_HOVERLINK, param.event, { target: param.target._name }, this.myChart);
  4954. return;
  4955. },
  4956. refresh: function (newOption) {
  4957. if (newOption) {
  4958. this.option = newOption || this.option;
  4959. this.option.legend = this.reformOption(this.option.legend);
  4960. this.legendOption = this.option.legend;
  4961. var data = this.legendOption.data || [];
  4962. var itemName;
  4963. var something;
  4964. var color;
  4965. var queryTarget;
  4966. if (this.legendOption.selected) {
  4967. for (var k in this.legendOption.selected) {
  4968. this._selectedMap[k] = typeof this._selectedMap[k] != 'undefined' ? this._selectedMap[k] : this.legendOption.selected[k];
  4969. }
  4970. }
  4971. for (var i = 0, dataLength = data.length; i < dataLength; i++) {
  4972. itemName = this._getName(data[i]);
  4973. if (itemName === '') {
  4974. continue;
  4975. }
  4976. something = this._getSomethingByName(itemName);
  4977. if (!something.series) {
  4978. this._hasDataMap[itemName] = false;
  4979. } else {
  4980. this._hasDataMap[itemName] = true;
  4981. if (something.data && (something.type === ecConfig.CHART_TYPE_PIE || something.type === ecConfig.CHART_TYPE_FORCE || something.type === ecConfig.CHART_TYPE_FUNNEL)) {
  4982. queryTarget = [
  4983. something.data,
  4984. something.series
  4985. ];
  4986. } else {
  4987. queryTarget = [something.series];
  4988. }
  4989. color = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), something.seriesIndex, something.dataIndex, something.data);
  4990. if (color && something.type != ecConfig.CHART_TYPE_K) {
  4991. this.setColor(itemName, color);
  4992. }
  4993. this._selectedMap[itemName] = this._selectedMap[itemName] != null ? this._selectedMap[itemName] : true;
  4994. }
  4995. }
  4996. }
  4997. this.clear();
  4998. this._buildShape();
  4999. },
  5000. getRelatedAmount: function (name) {
  5001. var amount = 0;
  5002. var series = this.option.series;
  5003. var data;
  5004. for (var i = 0, l = series.length; i < l; i++) {
  5005. if (series[i].name === name) {
  5006. amount++;
  5007. }
  5008. 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) {
  5009. data = series[i].type != ecConfig.CHART_TYPE_FORCE ? series[i].data : series[i].categories;
  5010. for (var j = 0, k = data.length; j < k; j++) {
  5011. if (data[j].name === name && data[j].value != '-') {
  5012. amount++;
  5013. }
  5014. }
  5015. }
  5016. }
  5017. return amount;
  5018. },
  5019. setColor: function (legendName, color) {
  5020. this._colorMap[legendName] = color;
  5021. },
  5022. getColor: function (legendName) {
  5023. if (!this._colorMap[legendName]) {
  5024. this._colorMap[legendName] = this.zr.getColor(this._colorIndex++);
  5025. }
  5026. return this._colorMap[legendName];
  5027. },
  5028. hasColor: function (legendName) {
  5029. return this._colorMap[legendName] ? this._colorMap[legendName] : false;
  5030. },
  5031. add: function (name, color) {
  5032. var data = this.legendOption.data;
  5033. for (var i = 0, dataLength = data.length; i < dataLength; i++) {
  5034. if (this._getName(data[i]) === name) {
  5035. return;
  5036. }
  5037. }
  5038. this.legendOption.data.push(name);
  5039. this.setColor(name, color);
  5040. this._selectedMap[name] = true;
  5041. this._hasDataMap[name] = true;
  5042. },
  5043. del: function (name) {
  5044. var data = this.legendOption.data;
  5045. for (var i = 0, dataLength = data.length; i < dataLength; i++) {
  5046. if (this._getName(data[i]) === name) {
  5047. return this.legendOption.data.splice(i, 1);
  5048. }
  5049. }
  5050. },
  5051. getItemShape: function (name) {
  5052. if (name == null) {
  5053. return;
  5054. }
  5055. var shape;
  5056. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  5057. shape = this.shapeList[i];
  5058. if (shape._name === name && shape.type != 'text') {
  5059. return shape;
  5060. }
  5061. }
  5062. },
  5063. setItemShape: function (name, itemShape) {
  5064. var shape;
  5065. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  5066. shape = this.shapeList[i];
  5067. if (shape._name === name && shape.type != 'text') {
  5068. if (!this._selectedMap[name]) {
  5069. itemShape.style.color = '#ccc';
  5070. itemShape.style.strokeColor = '#ccc';
  5071. }
  5072. this.zr.modShape(shape.id, itemShape);
  5073. }
  5074. }
  5075. },
  5076. isSelected: function (itemName) {
  5077. if (typeof this._selectedMap[itemName] != 'undefined') {
  5078. return this._selectedMap[itemName];
  5079. } else {
  5080. return true;
  5081. }
  5082. },
  5083. getSelectedMap: function () {
  5084. return this._selectedMap;
  5085. },
  5086. setSelected: function (itemName, selectStatus) {
  5087. if (this.legendOption.selectedMode === 'single') {
  5088. for (var k in this._selectedMap) {
  5089. this._selectedMap[k] = false;
  5090. }
  5091. }
  5092. this._selectedMap[itemName] = selectStatus;
  5093. this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_SELECTED, null, {
  5094. selected: this._selectedMap,
  5095. target: itemName
  5096. }, this.myChart);
  5097. },
  5098. onlegendSelected: function (param, status) {
  5099. var legendSelected = param.selected;
  5100. for (var itemName in legendSelected) {
  5101. if (this._selectedMap[itemName] != legendSelected[itemName]) {
  5102. status.needRefresh = true;
  5103. }
  5104. this._selectedMap[itemName] = legendSelected[itemName];
  5105. }
  5106. return;
  5107. }
  5108. };
  5109. var legendIcon = {
  5110. line: function (ctx, style) {
  5111. var dy = style.height / 2;
  5112. ctx.moveTo(style.x, style.y + dy);
  5113. ctx.lineTo(style.x + style.width, style.y + dy);
  5114. },
  5115. pie: function (ctx, style) {
  5116. var x = style.x;
  5117. var y = style.y;
  5118. var width = style.width;
  5119. var height = style.height;
  5120. SectorShape.prototype.buildPath(ctx, {
  5121. x: x + width / 2,
  5122. y: y + height + 2,
  5123. r: height,
  5124. r0: 6,
  5125. startAngle: 45,
  5126. endAngle: 135
  5127. });
  5128. },
  5129. eventRiver: function (ctx, style) {
  5130. var x = style.x;
  5131. var y = style.y;
  5132. var width = style.width;
  5133. var height = style.height;
  5134. ctx.moveTo(x, y + height);
  5135. ctx.bezierCurveTo(x + width, y + height, x, y + 4, x + width, y + 4);
  5136. ctx.lineTo(x + width, y);
  5137. ctx.bezierCurveTo(x, y, x + width, y + height - 4, x, y + height - 4);
  5138. ctx.lineTo(x, y + height);
  5139. },
  5140. k: function (ctx, style) {
  5141. var x = style.x;
  5142. var y = style.y;
  5143. var width = style.width;
  5144. var height = style.height;
  5145. CandleShape.prototype.buildPath(ctx, {
  5146. x: x + width / 2,
  5147. y: [
  5148. y + 1,
  5149. y + 1,
  5150. y + height - 6,
  5151. y + height
  5152. ],
  5153. width: width - 6
  5154. });
  5155. },
  5156. bar: function (ctx, style) {
  5157. var x = style.x;
  5158. var y = style.y + 1;
  5159. var width = style.width;
  5160. var height = style.height - 2;
  5161. var r = 3;
  5162. ctx.moveTo(x + r, y);
  5163. ctx.lineTo(x + width - r, y);
  5164. ctx.quadraticCurveTo(x + width, y, x + width, y + r);
  5165. ctx.lineTo(x + width, y + height - r);
  5166. ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);
  5167. ctx.lineTo(x + r, y + height);
  5168. ctx.quadraticCurveTo(x, y + height, x, y + height - r);
  5169. ctx.lineTo(x, y + r);
  5170. ctx.quadraticCurveTo(x, y, x + r, y);
  5171. },
  5172. force: function (ctx, style) {
  5173. IconShape.prototype.iconLibrary.circle(ctx, style);
  5174. },
  5175. radar: function (ctx, style) {
  5176. var n = 6;
  5177. var x = style.x + style.width / 2;
  5178. var y = style.y + style.height / 2;
  5179. var r = style.height / 2;
  5180. var dStep = 2 * Math.PI / n;
  5181. var deg = -Math.PI / 2;
  5182. var xStart = x + r * Math.cos(deg);
  5183. var yStart = y + r * Math.sin(deg);
  5184. ctx.moveTo(xStart, yStart);
  5185. deg += dStep;
  5186. for (var i = 0, end = n - 1; i < end; i++) {
  5187. ctx.lineTo(x + r * Math.cos(deg), y + r * Math.sin(deg));
  5188. deg += dStep;
  5189. }
  5190. ctx.lineTo(xStart, yStart);
  5191. }
  5192. };
  5193. legendIcon.chord = legendIcon.pie;
  5194. legendIcon.map = legendIcon.bar;
  5195. for (var k in legendIcon) {
  5196. IconShape.prototype.iconLibrary['legendicon' + k] = legendIcon[k];
  5197. }
  5198. zrUtil.inherits(Legend, Base);
  5199. require('../component').define('legend', Legend);
  5200. return Legend;
  5201. });define('echarts/util/ecData', [], function () {
  5202. function pack(shape, series, seriesIndex, data, dataIndex, name, special, special2) {
  5203. var value;
  5204. if (typeof data != 'undefined') {
  5205. value = data.value == null ? data : data.value;
  5206. }
  5207. shape._echartsData = {
  5208. '_series': series,
  5209. '_seriesIndex': seriesIndex,
  5210. '_data': data,
  5211. '_dataIndex': dataIndex,
  5212. '_name': name,
  5213. '_value': value,
  5214. '_special': special,
  5215. '_special2': special2
  5216. };
  5217. return shape._echartsData;
  5218. }
  5219. function get(shape, key) {
  5220. var data = shape._echartsData;
  5221. if (!key) {
  5222. return data;
  5223. }
  5224. switch (key) {
  5225. case 'series':
  5226. case 'seriesIndex':
  5227. case 'data':
  5228. case 'dataIndex':
  5229. case 'name':
  5230. case 'value':
  5231. case 'special':
  5232. case 'special2':
  5233. return data && data['_' + key];
  5234. }
  5235. return null;
  5236. }
  5237. function set(shape, key, value) {
  5238. shape._echartsData = shape._echartsData || {};
  5239. switch (key) {
  5240. case 'series':
  5241. case 'seriesIndex':
  5242. case 'data':
  5243. case 'dataIndex':
  5244. case 'name':
  5245. case 'value':
  5246. case 'special':
  5247. case 'special2':
  5248. shape._echartsData['_' + key] = value;
  5249. break;
  5250. }
  5251. }
  5252. function clone(source, target) {
  5253. target._echartsData = {
  5254. '_series': source._echartsData._series,
  5255. '_seriesIndex': source._echartsData._seriesIndex,
  5256. '_data': source._echartsData._data,
  5257. '_dataIndex': source._echartsData._dataIndex,
  5258. '_name': source._echartsData._name,
  5259. '_value': source._echartsData._value,
  5260. '_special': source._echartsData._special,
  5261. '_special2': source._echartsData._special2
  5262. };
  5263. }
  5264. return {
  5265. pack: pack,
  5266. set: set,
  5267. get: get,
  5268. clone: clone
  5269. };
  5270. });define('echarts/chart', [], function () {
  5271. var self = {};
  5272. var _chartLibrary = {};
  5273. self.define = function (name, clazz) {
  5274. _chartLibrary[name] = clazz;
  5275. return self;
  5276. };
  5277. self.get = function (name) {
  5278. return _chartLibrary[name];
  5279. };
  5280. return self;
  5281. });define('zrender/tool/color', [
  5282. 'require',
  5283. '../tool/util'
  5284. ], function (require) {
  5285. var util = require('../tool/util');
  5286. var _ctx;
  5287. var palette = [
  5288. '#ff9277',
  5289. ' #dddd00',
  5290. ' #ffc877',
  5291. ' #bbe3ff',
  5292. ' #d5ffbb',
  5293. '#bbbbff',
  5294. ' #ddb000',
  5295. ' #b0dd00',
  5296. ' #e2bbff',
  5297. ' #ffbbe3',
  5298. '#ff7777',
  5299. ' #ff9900',
  5300. ' #83dd00',
  5301. ' #77e3ff',
  5302. ' #778fff',
  5303. '#c877ff',
  5304. ' #ff77ab',
  5305. ' #ff6600',
  5306. ' #aa8800',
  5307. ' #77c7ff',
  5308. '#ad77ff',
  5309. ' #ff77ff',
  5310. ' #dd0083',
  5311. ' #777700',
  5312. ' #00aa00',
  5313. '#0088aa',
  5314. ' #8400dd',
  5315. ' #aa0088',
  5316. ' #dd0000',
  5317. ' #772e00'
  5318. ];
  5319. var _palette = palette;
  5320. var highlightColor = 'rgba(255,255,0,0.5)';
  5321. var _highlightColor = highlightColor;
  5322. 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;
  5323. var _nameColors = {
  5324. aliceblue: '#f0f8ff',
  5325. antiquewhite: '#faebd7',
  5326. aqua: '#0ff',
  5327. aquamarine: '#7fffd4',
  5328. azure: '#f0ffff',
  5329. beige: '#f5f5dc',
  5330. bisque: '#ffe4c4',
  5331. black: '#000',
  5332. blanchedalmond: '#ffebcd',
  5333. blue: '#00f',
  5334. blueviolet: '#8a2be2',
  5335. brown: '#a52a2a',
  5336. burlywood: '#deb887',
  5337. cadetblue: '#5f9ea0',
  5338. chartreuse: '#7fff00',
  5339. chocolate: '#d2691e',
  5340. coral: '#ff7f50',
  5341. cornflowerblue: '#6495ed',
  5342. cornsilk: '#fff8dc',
  5343. crimson: '#dc143c',
  5344. cyan: '#0ff',
  5345. darkblue: '#00008b',
  5346. darkcyan: '#008b8b',
  5347. darkgoldenrod: '#b8860b',
  5348. darkgray: '#a9a9a9',
  5349. darkgrey: '#a9a9a9',
  5350. darkgreen: '#006400',
  5351. darkkhaki: '#bdb76b',
  5352. darkmagenta: '#8b008b',
  5353. darkolivegreen: '#556b2f',
  5354. darkorange: '#ff8c00',
  5355. darkorchid: '#9932cc',
  5356. darkred: '#8b0000',
  5357. darksalmon: '#e9967a',
  5358. darkseagreen: '#8fbc8f',
  5359. darkslateblue: '#483d8b',
  5360. darkslategray: '#2f4f4f',
  5361. darkslategrey: '#2f4f4f',
  5362. darkturquoise: '#00ced1',
  5363. darkviolet: '#9400d3',
  5364. deeppink: '#ff1493',
  5365. deepskyblue: '#00bfff',
  5366. dimgray: '#696969',
  5367. dimgrey: '#696969',
  5368. dodgerblue: '#1e90ff',
  5369. firebrick: '#b22222',
  5370. floralwhite: '#fffaf0',
  5371. forestgreen: '#228b22',
  5372. fuchsia: '#f0f',
  5373. gainsboro: '#dcdcdc',
  5374. ghostwhite: '#f8f8ff',
  5375. gold: '#ffd700',
  5376. goldenrod: '#daa520',
  5377. gray: '#808080',
  5378. grey: '#808080',
  5379. green: '#008000',
  5380. greenyellow: '#adff2f',
  5381. honeydew: '#f0fff0',
  5382. hotpink: '#ff69b4',
  5383. indianred: '#cd5c5c',
  5384. indigo: '#4b0082',
  5385. ivory: '#fffff0',
  5386. khaki: '#f0e68c',
  5387. lavender: '#e6e6fa',
  5388. lavenderblush: '#fff0f5',
  5389. lawngreen: '#7cfc00',
  5390. lemonchiffon: '#fffacd',
  5391. lightblue: '#add8e6',
  5392. lightcoral: '#f08080',
  5393. lightcyan: '#e0ffff',
  5394. lightgoldenrodyellow: '#fafad2',
  5395. lightgray: '#d3d3d3',
  5396. lightgrey: '#d3d3d3',
  5397. lightgreen: '#90ee90',
  5398. lightpink: '#ffb6c1',
  5399. lightsalmon: '#ffa07a',
  5400. lightseagreen: '#20b2aa',
  5401. lightskyblue: '#87cefa',
  5402. lightslategray: '#789',
  5403. lightslategrey: '#789',
  5404. lightsteelblue: '#b0c4de',
  5405. lightyellow: '#ffffe0',
  5406. lime: '#0f0',
  5407. limegreen: '#32cd32',
  5408. linen: '#faf0e6',
  5409. magenta: '#f0f',
  5410. maroon: '#800000',
  5411. mediumaquamarine: '#66cdaa',
  5412. mediumblue: '#0000cd',
  5413. mediumorchid: '#ba55d3',
  5414. mediumpurple: '#9370d8',
  5415. mediumseagreen: '#3cb371',
  5416. mediumslateblue: '#7b68ee',
  5417. mediumspringgreen: '#00fa9a',
  5418. mediumturquoise: '#48d1cc',
  5419. mediumvioletred: '#c71585',
  5420. midnightblue: '#191970',
  5421. mintcream: '#f5fffa',
  5422. mistyrose: '#ffe4e1',
  5423. moccasin: '#ffe4b5',
  5424. navajowhite: '#ffdead',
  5425. navy: '#000080',
  5426. oldlace: '#fdf5e6',
  5427. olive: '#808000',
  5428. olivedrab: '#6b8e23',
  5429. orange: '#ffa500',
  5430. orangered: '#ff4500',
  5431. orchid: '#da70d6',
  5432. palegoldenrod: '#eee8aa',
  5433. palegreen: '#98fb98',
  5434. paleturquoise: '#afeeee',
  5435. palevioletred: '#d87093',
  5436. papayawhip: '#ffefd5',
  5437. peachpuff: '#ffdab9',
  5438. peru: '#cd853f',
  5439. pink: '#ffc0cb',
  5440. plum: '#dda0dd',
  5441. powderblue: '#b0e0e6',
  5442. purple: '#800080',
  5443. red: '#f00',
  5444. rosybrown: '#bc8f8f',
  5445. royalblue: '#4169e1',
  5446. saddlebrown: '#8b4513',
  5447. salmon: '#fa8072',
  5448. sandybrown: '#f4a460',
  5449. seagreen: '#2e8b57',
  5450. seashell: '#fff5ee',
  5451. sienna: '#a0522d',
  5452. silver: '#c0c0c0',
  5453. skyblue: '#87ceeb',
  5454. slateblue: '#6a5acd',
  5455. slategray: '#708090',
  5456. slategrey: '#708090',
  5457. snow: '#fffafa',
  5458. springgreen: '#00ff7f',
  5459. steelblue: '#4682b4',
  5460. tan: '#d2b48c',
  5461. teal: '#008080',
  5462. thistle: '#d8bfd8',
  5463. tomato: '#ff6347',
  5464. turquoise: '#40e0d0',
  5465. violet: '#ee82ee',
  5466. wheat: '#f5deb3',
  5467. white: '#fff',
  5468. whitesmoke: '#f5f5f5',
  5469. yellow: '#ff0',
  5470. yellowgreen: '#9acd32'
  5471. };
  5472. function customPalette(userPalete) {
  5473. palette = userPalete;
  5474. }
  5475. function resetPalette() {
  5476. palette = _palette;
  5477. }
  5478. function getColor(idx, userPalete) {
  5479. idx = idx | 0;
  5480. userPalete = userPalete || palette;
  5481. return userPalete[idx % userPalete.length];
  5482. }
  5483. function customHighlight(userHighlightColor) {
  5484. highlightColor = userHighlightColor;
  5485. }
  5486. function resetHighlight() {
  5487. _highlightColor = highlightColor;
  5488. }
  5489. function getHighlightColor() {
  5490. return highlightColor;
  5491. }
  5492. function getRadialGradient(x0, y0, r0, x1, y1, r1, colorList) {
  5493. if (!_ctx) {
  5494. _ctx = util.getContext();
  5495. }
  5496. var gradient = _ctx.createRadialGradient(x0, y0, r0, x1, y1, r1);
  5497. for (var i = 0, l = colorList.length; i < l; i++) {
  5498. gradient.addColorStop(colorList[i][0], colorList[i][1]);
  5499. }
  5500. gradient.__nonRecursion = true;
  5501. return gradient;
  5502. }
  5503. function getLinearGradient(x0, y0, x1, y1, colorList) {
  5504. if (!_ctx) {
  5505. _ctx = util.getContext();
  5506. }
  5507. var gradient = _ctx.createLinearGradient(x0, y0, x1, y1);
  5508. for (var i = 0, l = colorList.length; i < l; i++) {
  5509. gradient.addColorStop(colorList[i][0], colorList[i][1]);
  5510. }
  5511. gradient.__nonRecursion = true;
  5512. return gradient;
  5513. }
  5514. function getStepColors(start, end, step) {
  5515. start = toRGBA(start);
  5516. end = toRGBA(end);
  5517. start = getData(start);
  5518. end = getData(end);
  5519. var colors = [];
  5520. var stepR = (end[0] - start[0]) / step;
  5521. var stepG = (end[1] - start[1]) / step;
  5522. var stepB = (end[2] - start[2]) / step;
  5523. var stepA = (end[3] - start[3]) / step;
  5524. for (var i = 0, r = start[0], g = start[1], b = start[2], a = start[3]; i < step; i++) {
  5525. colors[i] = toColor([
  5526. adjust(Math.floor(r), [
  5527. 0,
  5528. 255
  5529. ]),
  5530. adjust(Math.floor(g), [
  5531. 0,
  5532. 255
  5533. ]),
  5534. adjust(Math.floor(b), [
  5535. 0,
  5536. 255
  5537. ]),
  5538. a.toFixed(4) - 0
  5539. ], 'rgba');
  5540. r += stepR;
  5541. g += stepG;
  5542. b += stepB;
  5543. a += stepA;
  5544. }
  5545. r = end[0];
  5546. g = end[1];
  5547. b = end[2];
  5548. a = end[3];
  5549. colors[i] = toColor([
  5550. r,
  5551. g,
  5552. b,
  5553. a
  5554. ], 'rgba');
  5555. return colors;
  5556. }
  5557. function getGradientColors(colors, step) {
  5558. var ret = [];
  5559. var len = colors.length;
  5560. if (step === undefined) {
  5561. step = 20;
  5562. }
  5563. if (len === 1) {
  5564. ret = getStepColors(colors[0], colors[0], step);
  5565. } else if (len > 1) {
  5566. for (var i = 0, n = len - 1; i < n; i++) {
  5567. var steps = getStepColors(colors[i], colors[i + 1], step);
  5568. if (i < n - 1) {
  5569. steps.pop();
  5570. }
  5571. ret = ret.concat(steps);
  5572. }
  5573. }
  5574. return ret;
  5575. }
  5576. function toColor(data, format) {
  5577. format = format || 'rgb';
  5578. if (data && (data.length === 3 || data.length === 4)) {
  5579. data = map(data, function (c) {
  5580. return c > 1 ? Math.ceil(c) : c;
  5581. });
  5582. if (format.indexOf('hex') > -1) {
  5583. return '#' + ((1 << 24) + (data[0] << 16) + (data[1] << 8) + +data[2]).toString(16).slice(1);
  5584. } else if (format.indexOf('hs') > -1) {
  5585. var sx = map(data.slice(1, 3), function (c) {
  5586. return c + '%';
  5587. });
  5588. data[1] = sx[0];
  5589. data[2] = sx[1];
  5590. }
  5591. if (format.indexOf('a') > -1) {
  5592. if (data.length === 3) {
  5593. data.push(1);
  5594. }
  5595. data[3] = adjust(data[3], [
  5596. 0,
  5597. 1
  5598. ]);
  5599. return format + '(' + data.slice(0, 4).join(',') + ')';
  5600. }
  5601. return format + '(' + data.slice(0, 3).join(',') + ')';
  5602. }
  5603. }
  5604. function toArray(color) {
  5605. color = trim(color);
  5606. if (color.indexOf('rgba') < 0) {
  5607. color = toRGBA(color);
  5608. }
  5609. var data = [];
  5610. var i = 0;
  5611. color.replace(/[\d.]+/g, function (n) {
  5612. if (i < 3) {
  5613. n = n | 0;
  5614. } else {
  5615. n = +n;
  5616. }
  5617. data[i++] = n;
  5618. });
  5619. return data;
  5620. }
  5621. function convert(color, format) {
  5622. if (!isCalculableColor(color)) {
  5623. return color;
  5624. }
  5625. var data = getData(color);
  5626. var alpha = data[3];
  5627. if (typeof alpha === 'undefined') {
  5628. alpha = 1;
  5629. }
  5630. if (color.indexOf('hsb') > -1) {
  5631. data = _HSV_2_RGB(data);
  5632. } else if (color.indexOf('hsl') > -1) {
  5633. data = _HSL_2_RGB(data);
  5634. }
  5635. if (format.indexOf('hsb') > -1 || format.indexOf('hsv') > -1) {
  5636. data = _RGB_2_HSB(data);
  5637. } else if (format.indexOf('hsl') > -1) {
  5638. data = _RGB_2_HSL(data);
  5639. }
  5640. data[3] = alpha;
  5641. return toColor(data, format);
  5642. }
  5643. function toRGBA(color) {
  5644. return convert(color, 'rgba');
  5645. }
  5646. function toRGB(color) {
  5647. return convert(color, 'rgb');
  5648. }
  5649. function toHex(color) {
  5650. return convert(color, 'hex');
  5651. }
  5652. function toHSVA(color) {
  5653. return convert(color, 'hsva');
  5654. }
  5655. function toHSV(color) {
  5656. return convert(color, 'hsv');
  5657. }
  5658. function toHSBA(color) {
  5659. return convert(color, 'hsba');
  5660. }
  5661. function toHSB(color) {
  5662. return convert(color, 'hsb');
  5663. }
  5664. function toHSLA(color) {
  5665. return convert(color, 'hsla');
  5666. }
  5667. function toHSL(color) {
  5668. return convert(color, 'hsl');
  5669. }
  5670. function toName(color) {
  5671. for (var key in _nameColors) {
  5672. if (toHex(_nameColors[key]) === toHex(color)) {
  5673. return key;
  5674. }
  5675. }
  5676. return null;
  5677. }
  5678. function trim(color) {
  5679. return String(color).replace(/\s+/g, '');
  5680. }
  5681. function normalize(color) {
  5682. if (_nameColors[color]) {
  5683. color = _nameColors[color];
  5684. }
  5685. color = trim(color);
  5686. color = color.replace(/hsv/i, 'hsb');
  5687. if (/^#[\da-f]{3}$/i.test(color)) {
  5688. color = parseInt(color.slice(1), 16);
  5689. var r = (color & 3840) << 8;
  5690. var g = (color & 240) << 4;
  5691. var b = color & 15;
  5692. color = '#' + ((1 << 24) + (r << 4) + r + (g << 4) + g + (b << 4) + b).toString(16).slice(1);
  5693. }
  5694. return color;
  5695. }
  5696. function lift(color, level) {
  5697. if (!isCalculableColor(color)) {
  5698. return color;
  5699. }
  5700. var direct = level > 0 ? 1 : -1;
  5701. if (typeof level === 'undefined') {
  5702. level = 0;
  5703. }
  5704. level = Math.abs(level) > 1 ? 1 : Math.abs(level);
  5705. color = toRGB(color);
  5706. var data = getData(color);
  5707. for (var i = 0; i < 3; i++) {
  5708. if (direct === 1) {
  5709. data[i] = data[i] * (1 - level) | 0;
  5710. } else {
  5711. data[i] = (255 - data[i]) * level + data[i] | 0;
  5712. }
  5713. }
  5714. return 'rgb(' + data.join(',') + ')';
  5715. }
  5716. function reverse(color) {
  5717. if (!isCalculableColor(color)) {
  5718. return color;
  5719. }
  5720. var data = getData(toRGBA(color));
  5721. data = map(data, function (c) {
  5722. return 255 - c;
  5723. });
  5724. return toColor(data, 'rgb');
  5725. }
  5726. function mix(color1, color2, weight) {
  5727. if (!isCalculableColor(color1) || !isCalculableColor(color2)) {
  5728. return color1;
  5729. }
  5730. if (typeof weight === 'undefined') {
  5731. weight = 0.5;
  5732. }
  5733. weight = 1 - adjust(weight, [
  5734. 0,
  5735. 1
  5736. ]);
  5737. var w = weight * 2 - 1;
  5738. var data1 = getData(toRGBA(color1));
  5739. var data2 = getData(toRGBA(color2));
  5740. var d = data1[3] - data2[3];
  5741. var weight1 = ((w * d === -1 ? w : (w + d) / (1 + w * d)) + 1) / 2;
  5742. var weight2 = 1 - weight1;
  5743. var data = [];
  5744. for (var i = 0; i < 3; i++) {
  5745. data[i] = data1[i] * weight1 + data2[i] * weight2;
  5746. }
  5747. var alpha = data1[3] * weight + data2[3] * (1 - weight);
  5748. alpha = Math.max(0, Math.min(1, alpha));
  5749. if (data1[3] === 1 && data2[3] === 1) {
  5750. return toColor(data, 'rgb');
  5751. }
  5752. data[3] = alpha;
  5753. return toColor(data, 'rgba');
  5754. }
  5755. function random() {
  5756. return '#' + (Math.random().toString(16) + '0000').slice(2, 8);
  5757. }
  5758. function getData(color) {
  5759. color = normalize(color);
  5760. var r = color.match(colorRegExp);
  5761. if (r === null) {
  5762. throw new Error('The color format error');
  5763. }
  5764. var d;
  5765. var a;
  5766. var data = [];
  5767. var rgb;
  5768. if (r[2]) {
  5769. d = r[2].replace('#', '').split('');
  5770. rgb = [
  5771. d[0] + d[1],
  5772. d[2] + d[3],
  5773. d[4] + d[5]
  5774. ];
  5775. data = map(rgb, function (c) {
  5776. return adjust(parseInt(c, 16), [
  5777. 0,
  5778. 255
  5779. ]);
  5780. });
  5781. } else if (r[4]) {
  5782. var rgba = r[4].split(',');
  5783. a = rgba[3];
  5784. rgb = rgba.slice(0, 3);
  5785. data = map(rgb, function (c) {
  5786. c = Math.floor(c.indexOf('%') > 0 ? parseInt(c, 0) * 2.55 : c);
  5787. return adjust(c, [
  5788. 0,
  5789. 255
  5790. ]);
  5791. });
  5792. if (typeof a !== 'undefined') {
  5793. data.push(adjust(parseFloat(a), [
  5794. 0,
  5795. 1
  5796. ]));
  5797. }
  5798. } else if (r[5] || r[6]) {
  5799. var hsxa = (r[5] || r[6]).split(',');
  5800. var h = parseInt(hsxa[0], 0) / 360;
  5801. var s = hsxa[1];
  5802. var x = hsxa[2];
  5803. a = hsxa[3];
  5804. data = map([
  5805. s,
  5806. x
  5807. ], function (c) {
  5808. return adjust(parseFloat(c) / 100, [
  5809. 0,
  5810. 1
  5811. ]);
  5812. });
  5813. data.unshift(h);
  5814. if (typeof a !== 'undefined') {
  5815. data.push(adjust(parseFloat(a), [
  5816. 0,
  5817. 1
  5818. ]));
  5819. }
  5820. }
  5821. return data;
  5822. }
  5823. function alpha(color, a) {
  5824. if (!isCalculableColor(color)) {
  5825. return color;
  5826. }
  5827. if (a === null) {
  5828. a = 1;
  5829. }
  5830. var data = getData(toRGBA(color));
  5831. data[3] = adjust(Number(a).toFixed(4), [
  5832. 0,
  5833. 1
  5834. ]);
  5835. return toColor(data, 'rgba');
  5836. }
  5837. function map(array, fun) {
  5838. if (typeof fun !== 'function') {
  5839. throw new TypeError();
  5840. }
  5841. var len = array ? array.length : 0;
  5842. for (var i = 0; i < len; i++) {
  5843. array[i] = fun(array[i]);
  5844. }
  5845. return array;
  5846. }
  5847. function adjust(value, region) {
  5848. if (value <= region[0]) {
  5849. value = region[0];
  5850. } else if (value >= region[1]) {
  5851. value = region[1];
  5852. }
  5853. return value;
  5854. }
  5855. function isCalculableColor(color) {
  5856. return color instanceof Array || typeof color === 'string';
  5857. }
  5858. function _HSV_2_RGB(data) {
  5859. var H = data[0];
  5860. var S = data[1];
  5861. var V = data[2];
  5862. var R;
  5863. var G;
  5864. var B;
  5865. if (S === 0) {
  5866. R = V * 255;
  5867. G = V * 255;
  5868. B = V * 255;
  5869. } else {
  5870. var h = H * 6;
  5871. if (h === 6) {
  5872. h = 0;
  5873. }
  5874. var i = h | 0;
  5875. var v1 = V * (1 - S);
  5876. var v2 = V * (1 - S * (h - i));
  5877. var v3 = V * (1 - S * (1 - (h - i)));
  5878. var r = 0;
  5879. var g = 0;
  5880. var b = 0;
  5881. if (i === 0) {
  5882. r = V;
  5883. g = v3;
  5884. b = v1;
  5885. } else if (i === 1) {
  5886. r = v2;
  5887. g = V;
  5888. b = v1;
  5889. } else if (i === 2) {
  5890. r = v1;
  5891. g = V;
  5892. b = v3;
  5893. } else if (i === 3) {
  5894. r = v1;
  5895. g = v2;
  5896. b = V;
  5897. } else if (i === 4) {
  5898. r = v3;
  5899. g = v1;
  5900. b = V;
  5901. } else {
  5902. r = V;
  5903. g = v1;
  5904. b = v2;
  5905. }
  5906. R = r * 255;
  5907. G = g * 255;
  5908. B = b * 255;
  5909. }
  5910. return [
  5911. R,
  5912. G,
  5913. B
  5914. ];
  5915. }
  5916. function _HSL_2_RGB(data) {
  5917. var H = data[0];
  5918. var S = data[1];
  5919. var L = data[2];
  5920. var R;
  5921. var G;
  5922. var B;
  5923. if (S === 0) {
  5924. R = L * 255;
  5925. G = L * 255;
  5926. B = L * 255;
  5927. } else {
  5928. var v2;
  5929. if (L < 0.5) {
  5930. v2 = L * (1 + S);
  5931. } else {
  5932. v2 = L + S - S * L;
  5933. }
  5934. var v1 = 2 * L - v2;
  5935. R = 255 * _HUE_2_RGB(v1, v2, H + 1 / 3);
  5936. G = 255 * _HUE_2_RGB(v1, v2, H);
  5937. B = 255 * _HUE_2_RGB(v1, v2, H - 1 / 3);
  5938. }
  5939. return [
  5940. R,
  5941. G,
  5942. B
  5943. ];
  5944. }
  5945. function _HUE_2_RGB(v1, v2, vH) {
  5946. if (vH < 0) {
  5947. vH += 1;
  5948. }
  5949. if (vH > 1) {
  5950. vH -= 1;
  5951. }
  5952. if (6 * vH < 1) {
  5953. return v1 + (v2 - v1) * 6 * vH;
  5954. }
  5955. if (2 * vH < 1) {
  5956. return v2;
  5957. }
  5958. if (3 * vH < 2) {
  5959. return v1 + (v2 - v1) * (2 / 3 - vH) * 6;
  5960. }
  5961. return v1;
  5962. }
  5963. function _RGB_2_HSB(data) {
  5964. var R = data[0] / 255;
  5965. var G = data[1] / 255;
  5966. var B = data[2] / 255;
  5967. var vMin = Math.min(R, G, B);
  5968. var vMax = Math.max(R, G, B);
  5969. var delta = vMax - vMin;
  5970. var V = vMax;
  5971. var H;
  5972. var S;
  5973. if (delta === 0) {
  5974. H = 0;
  5975. S = 0;
  5976. } else {
  5977. S = delta / vMax;
  5978. var deltaR = ((vMax - R) / 6 + delta / 2) / delta;
  5979. var deltaG = ((vMax - G) / 6 + delta / 2) / delta;
  5980. var deltaB = ((vMax - B) / 6 + delta / 2) / delta;
  5981. if (R === vMax) {
  5982. H = deltaB - deltaG;
  5983. } else if (G === vMax) {
  5984. H = 1 / 3 + deltaR - deltaB;
  5985. } else if (B === vMax) {
  5986. H = 2 / 3 + deltaG - deltaR;
  5987. }
  5988. if (H < 0) {
  5989. H += 1;
  5990. }
  5991. if (H > 1) {
  5992. H -= 1;
  5993. }
  5994. }
  5995. H = H * 360;
  5996. S = S * 100;
  5997. V = V * 100;
  5998. return [
  5999. H,
  6000. S,
  6001. V
  6002. ];
  6003. }
  6004. function _RGB_2_HSL(data) {
  6005. var R = data[0] / 255;
  6006. var G = data[1] / 255;
  6007. var B = data[2] / 255;
  6008. var vMin = Math.min(R, G, B);
  6009. var vMax = Math.max(R, G, B);
  6010. var delta = vMax - vMin;
  6011. var L = (vMax + vMin) / 2;
  6012. var H;
  6013. var S;
  6014. if (delta === 0) {
  6015. H = 0;
  6016. S = 0;
  6017. } else {
  6018. if (L < 0.5) {
  6019. S = delta / (vMax + vMin);
  6020. } else {
  6021. S = delta / (2 - vMax - vMin);
  6022. }
  6023. var deltaR = ((vMax - R) / 6 + delta / 2) / delta;
  6024. var deltaG = ((vMax - G) / 6 + delta / 2) / delta;
  6025. var deltaB = ((vMax - B) / 6 + delta / 2) / delta;
  6026. if (R === vMax) {
  6027. H = deltaB - deltaG;
  6028. } else if (G === vMax) {
  6029. H = 1 / 3 + deltaR - deltaB;
  6030. } else if (B === vMax) {
  6031. H = 2 / 3 + deltaG - deltaR;
  6032. }
  6033. if (H < 0) {
  6034. H += 1;
  6035. }
  6036. if (H > 1) {
  6037. H -= 1;
  6038. }
  6039. }
  6040. H = H * 360;
  6041. S = S * 100;
  6042. L = L * 100;
  6043. return [
  6044. H,
  6045. S,
  6046. L
  6047. ];
  6048. }
  6049. return {
  6050. customPalette: customPalette,
  6051. resetPalette: resetPalette,
  6052. getColor: getColor,
  6053. getHighlightColor: getHighlightColor,
  6054. customHighlight: customHighlight,
  6055. resetHighlight: resetHighlight,
  6056. getRadialGradient: getRadialGradient,
  6057. getLinearGradient: getLinearGradient,
  6058. getGradientColors: getGradientColors,
  6059. getStepColors: getStepColors,
  6060. reverse: reverse,
  6061. mix: mix,
  6062. lift: lift,
  6063. trim: trim,
  6064. random: random,
  6065. toRGB: toRGB,
  6066. toRGBA: toRGBA,
  6067. toHex: toHex,
  6068. toHSL: toHSL,
  6069. toHSLA: toHSLA,
  6070. toHSB: toHSB,
  6071. toHSBA: toHSBA,
  6072. toHSV: toHSV,
  6073. toHSVA: toHSVA,
  6074. toName: toName,
  6075. toColor: toColor,
  6076. toArray: toArray,
  6077. alpha: alpha,
  6078. getData: getData
  6079. };
  6080. });define('echarts/component/timeline', [
  6081. 'require',
  6082. './base',
  6083. 'zrender/shape/Rectangle',
  6084. '../util/shape/Icon',
  6085. '../util/shape/Chain',
  6086. '../config',
  6087. 'zrender/tool/util',
  6088. 'zrender/tool/area',
  6089. 'zrender/tool/event',
  6090. '../component'
  6091. ], function (require) {
  6092. var Base = require('./base');
  6093. var RectangleShape = require('zrender/shape/Rectangle');
  6094. var IconShape = require('../util/shape/Icon');
  6095. var ChainShape = require('../util/shape/Chain');
  6096. var ecConfig = require('../config');
  6097. ecConfig.timeline = {
  6098. zlevel: 0,
  6099. z: 4,
  6100. show: true,
  6101. type: 'time',
  6102. notMerge: false,
  6103. realtime: true,
  6104. x: 80,
  6105. x2: 80,
  6106. y2: 0,
  6107. height: 50,
  6108. backgroundColor: 'rgba(0,0,0,0)',
  6109. borderColor: '#ccc',
  6110. borderWidth: 0,
  6111. padding: 5,
  6112. controlPosition: 'left',
  6113. autoPlay: false,
  6114. loop: true,
  6115. playInterval: 2000,
  6116. lineStyle: {
  6117. width: 1,
  6118. color: '#666',
  6119. type: 'dashed'
  6120. },
  6121. label: {
  6122. show: true,
  6123. interval: 'auto',
  6124. rotate: 0,
  6125. textStyle: { color: '#333' }
  6126. },
  6127. checkpointStyle: {
  6128. symbol: 'auto',
  6129. symbolSize: 'auto',
  6130. color: 'auto',
  6131. borderColor: 'auto',
  6132. borderWidth: 'auto',
  6133. label: {
  6134. show: false,
  6135. textStyle: { color: 'auto' }
  6136. }
  6137. },
  6138. controlStyle: {
  6139. itemSize: 15,
  6140. itemGap: 5,
  6141. normal: { color: '#333' },
  6142. emphasis: { color: '#1e90ff' }
  6143. },
  6144. symbol: 'emptyDiamond',
  6145. symbolSize: 4,
  6146. currentIndex: 0
  6147. };
  6148. var zrUtil = require('zrender/tool/util');
  6149. var zrArea = require('zrender/tool/area');
  6150. var zrEvent = require('zrender/tool/event');
  6151. function Timeline(ecTheme, messageCenter, zr, option, myChart) {
  6152. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  6153. var self = this;
  6154. self._onclick = function (param) {
  6155. return self.__onclick(param);
  6156. };
  6157. self._ondrift = function (dx, dy) {
  6158. return self.__ondrift(this, dx, dy);
  6159. };
  6160. self._ondragend = function () {
  6161. return self.__ondragend();
  6162. };
  6163. self._setCurrentOption = function () {
  6164. var timelineOption = self.timelineOption;
  6165. self.currentIndex %= timelineOption.data.length;
  6166. var curOption = self.options[self.currentIndex] || {};
  6167. self.myChart.setOption(curOption, timelineOption.notMerge);
  6168. self.messageCenter.dispatch(ecConfig.EVENT.TIMELINE_CHANGED, null, {
  6169. currentIndex: self.currentIndex,
  6170. data: timelineOption.data[self.currentIndex].name != null ? timelineOption.data[self.currentIndex].name : timelineOption.data[self.currentIndex]
  6171. }, self.myChart);
  6172. };
  6173. self._onFrame = function () {
  6174. self._setCurrentOption();
  6175. self._syncHandleShape();
  6176. if (self.timelineOption.autoPlay) {
  6177. self.playTicket = setTimeout(function () {
  6178. self.currentIndex += 1;
  6179. if (!self.timelineOption.loop && self.currentIndex >= self.timelineOption.data.length) {
  6180. self.currentIndex = self.timelineOption.data.length - 1;
  6181. self.stop();
  6182. return;
  6183. }
  6184. self._onFrame();
  6185. }, self.timelineOption.playInterval);
  6186. }
  6187. };
  6188. this.setTheme(false);
  6189. this.options = this.option.options;
  6190. this.currentIndex = this.timelineOption.currentIndex % this.timelineOption.data.length;
  6191. if (!this.timelineOption.notMerge && this.currentIndex !== 0) {
  6192. this.options[this.currentIndex] = zrUtil.merge(this.options[this.currentIndex], this.options[0]);
  6193. }
  6194. if (this.timelineOption.show) {
  6195. this._buildShape();
  6196. this._syncHandleShape();
  6197. }
  6198. this._setCurrentOption();
  6199. if (this.timelineOption.autoPlay) {
  6200. var self = this;
  6201. this.playTicket = setTimeout(function () {
  6202. self.play();
  6203. }, this.ecTheme.animationDuration != null ? this.ecTheme.animationDuration : ecConfig.animationDuration);
  6204. }
  6205. }
  6206. Timeline.prototype = {
  6207. type: ecConfig.COMPONENT_TYPE_TIMELINE,
  6208. _buildShape: function () {
  6209. this._location = this._getLocation();
  6210. this._buildBackground();
  6211. this._buildControl();
  6212. this._chainPoint = this._getChainPoint();
  6213. if (this.timelineOption.label.show) {
  6214. var interval = this._getInterval();
  6215. for (var i = 0, len = this._chainPoint.length; i < len; i += interval) {
  6216. this._chainPoint[i].showLabel = true;
  6217. }
  6218. }
  6219. this._buildChain();
  6220. this._buildHandle();
  6221. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  6222. this.zr.addShape(this.shapeList[i]);
  6223. }
  6224. },
  6225. _getLocation: function () {
  6226. var timelineOption = this.timelineOption;
  6227. var padding = this.reformCssArray(this.timelineOption.padding);
  6228. var zrWidth = this.zr.getWidth();
  6229. var x = this.parsePercent(timelineOption.x, zrWidth);
  6230. var x2 = this.parsePercent(timelineOption.x2, zrWidth);
  6231. var width;
  6232. if (timelineOption.width == null) {
  6233. width = zrWidth - x - x2;
  6234. x2 = zrWidth - x2;
  6235. } else {
  6236. width = this.parsePercent(timelineOption.width, zrWidth);
  6237. x2 = x + width;
  6238. }
  6239. var zrHeight = this.zr.getHeight();
  6240. var height = this.parsePercent(timelineOption.height, zrHeight);
  6241. var y;
  6242. var y2;
  6243. if (timelineOption.y != null) {
  6244. y = this.parsePercent(timelineOption.y, zrHeight);
  6245. y2 = y + height;
  6246. } else {
  6247. y2 = zrHeight - this.parsePercent(timelineOption.y2, zrHeight);
  6248. y = y2 - height;
  6249. }
  6250. return {
  6251. x: x + padding[3],
  6252. y: y + padding[0],
  6253. x2: x2 - padding[1],
  6254. y2: y2 - padding[2],
  6255. width: width - padding[1] - padding[3],
  6256. height: height - padding[0] - padding[2]
  6257. };
  6258. },
  6259. _getReformedLabel: function (idx) {
  6260. var timelineOption = this.timelineOption;
  6261. var data = timelineOption.data[idx].name != null ? timelineOption.data[idx].name : timelineOption.data[idx];
  6262. var formatter = timelineOption.data[idx].formatter || timelineOption.label.formatter;
  6263. if (formatter) {
  6264. if (typeof formatter === 'function') {
  6265. data = formatter.call(this.myChart, data);
  6266. } else if (typeof formatter === 'string') {
  6267. data = formatter.replace('{value}', data);
  6268. }
  6269. }
  6270. return data;
  6271. },
  6272. _getInterval: function () {
  6273. var chainPoint = this._chainPoint;
  6274. var timelineOption = this.timelineOption;
  6275. var interval = timelineOption.label.interval;
  6276. if (interval === 'auto') {
  6277. var fontSize = timelineOption.label.textStyle.fontSize;
  6278. var data = timelineOption.data;
  6279. var dataLength = timelineOption.data.length;
  6280. if (dataLength > 3) {
  6281. var isEnough = false;
  6282. var labelSpace;
  6283. var labelSize;
  6284. interval = 0;
  6285. while (!isEnough && interval < dataLength) {
  6286. interval++;
  6287. isEnough = true;
  6288. for (var i = interval; i < dataLength; i += interval) {
  6289. labelSpace = chainPoint[i].x - chainPoint[i - interval].x;
  6290. if (timelineOption.label.rotate !== 0) {
  6291. labelSize = fontSize;
  6292. } else if (data[i].textStyle) {
  6293. labelSize = zrArea.getTextWidth(chainPoint[i].name, chainPoint[i].textFont);
  6294. } else {
  6295. var label = chainPoint[i].name + '';
  6296. var wLen = (label.match(/\w/g) || '').length;
  6297. var oLen = label.length - wLen;
  6298. labelSize = wLen * fontSize * 2 / 3 + oLen * fontSize;
  6299. }
  6300. if (labelSpace < labelSize) {
  6301. isEnough = false;
  6302. break;
  6303. }
  6304. }
  6305. }
  6306. } else {
  6307. interval = 1;
  6308. }
  6309. } else {
  6310. interval = interval - 0 + 1;
  6311. }
  6312. return interval;
  6313. },
  6314. _getChainPoint: function () {
  6315. var timelineOption = this.timelineOption;
  6316. var symbol = timelineOption.symbol.toLowerCase();
  6317. var symbolSize = timelineOption.symbolSize;
  6318. var rotate = timelineOption.label.rotate;
  6319. var textStyle = timelineOption.label.textStyle;
  6320. var textFont = this.getFont(textStyle);
  6321. var dataTextStyle;
  6322. var data = timelineOption.data;
  6323. var x = this._location.x;
  6324. var y = this._location.y + this._location.height / 4 * 3;
  6325. var width = this._location.x2 - this._location.x;
  6326. var len = data.length;
  6327. function _getName(i) {
  6328. return data[i].name != null ? data[i].name : data[i] + '';
  6329. }
  6330. var xList = [];
  6331. if (len > 1) {
  6332. var boundaryGap = width / len;
  6333. boundaryGap = boundaryGap > 50 ? 50 : boundaryGap < 20 ? 5 : boundaryGap;
  6334. width -= boundaryGap * 2;
  6335. if (timelineOption.type === 'number') {
  6336. for (var i = 0; i < len; i++) {
  6337. xList.push(x + boundaryGap + width / (len - 1) * i);
  6338. }
  6339. } else {
  6340. xList[0] = new Date(_getName(0).replace(/-/g, '/'));
  6341. xList[len - 1] = new Date(_getName(len - 1).replace(/-/g, '/')) - xList[0];
  6342. for (var i = 1; i < len; i++) {
  6343. xList[i] = x + boundaryGap + width * (new Date(_getName(i).replace(/-/g, '/')) - xList[0]) / xList[len - 1];
  6344. }
  6345. xList[0] = x + boundaryGap;
  6346. }
  6347. } else {
  6348. xList.push(x + width / 2);
  6349. }
  6350. var list = [];
  6351. var curSymbol;
  6352. var n;
  6353. var isEmpty;
  6354. var textAlign;
  6355. var rotation;
  6356. for (var i = 0; i < len; i++) {
  6357. x = xList[i];
  6358. curSymbol = data[i].symbol && data[i].symbol.toLowerCase() || symbol;
  6359. if (curSymbol.match('empty')) {
  6360. curSymbol = curSymbol.replace('empty', '');
  6361. isEmpty = true;
  6362. } else {
  6363. isEmpty = false;
  6364. }
  6365. if (curSymbol.match('star')) {
  6366. n = curSymbol.replace('star', '') - 0 || 5;
  6367. curSymbol = 'star';
  6368. }
  6369. dataTextStyle = data[i].textStyle ? zrUtil.merge(data[i].textStyle || {}, textStyle) : textStyle;
  6370. textAlign = dataTextStyle.align || 'center';
  6371. if (rotate) {
  6372. textAlign = rotate > 0 ? 'right' : 'left';
  6373. rotation = [
  6374. rotate * Math.PI / 180,
  6375. x,
  6376. y - 5
  6377. ];
  6378. } else {
  6379. rotation = false;
  6380. }
  6381. list.push({
  6382. x: x,
  6383. n: n,
  6384. isEmpty: isEmpty,
  6385. symbol: curSymbol,
  6386. symbolSize: data[i].symbolSize || symbolSize,
  6387. color: data[i].color,
  6388. borderColor: data[i].borderColor,
  6389. borderWidth: data[i].borderWidth,
  6390. name: this._getReformedLabel(i),
  6391. textColor: dataTextStyle.color,
  6392. textAlign: textAlign,
  6393. textBaseline: dataTextStyle.baseline || 'middle',
  6394. textX: x,
  6395. textY: y - (rotate ? 5 : 0),
  6396. textFont: data[i].textStyle ? this.getFont(dataTextStyle) : textFont,
  6397. rotation: rotation,
  6398. showLabel: false
  6399. });
  6400. }
  6401. return list;
  6402. },
  6403. _buildBackground: function () {
  6404. var timelineOption = this.timelineOption;
  6405. var padding = this.reformCssArray(this.timelineOption.padding);
  6406. var width = this._location.width;
  6407. var height = this._location.height;
  6408. if (timelineOption.borderWidth !== 0 || timelineOption.backgroundColor.replace(/\s/g, '') != 'rgba(0,0,0,0)') {
  6409. this.shapeList.push(new RectangleShape({
  6410. zlevel: this.getZlevelBase(),
  6411. z: this.getZBase(),
  6412. hoverable: false,
  6413. style: {
  6414. x: this._location.x - padding[3],
  6415. y: this._location.y - padding[0],
  6416. width: width + padding[1] + padding[3],
  6417. height: height + padding[0] + padding[2],
  6418. brushType: timelineOption.borderWidth === 0 ? 'fill' : 'both',
  6419. color: timelineOption.backgroundColor,
  6420. strokeColor: timelineOption.borderColor,
  6421. lineWidth: timelineOption.borderWidth
  6422. }
  6423. }));
  6424. }
  6425. },
  6426. _buildControl: function () {
  6427. var self = this;
  6428. var timelineOption = this.timelineOption;
  6429. var lineStyle = timelineOption.lineStyle;
  6430. var controlStyle = timelineOption.controlStyle;
  6431. if (timelineOption.controlPosition === 'none') {
  6432. return;
  6433. }
  6434. var iconSize = controlStyle.itemSize;
  6435. var iconGap = controlStyle.itemGap;
  6436. var x;
  6437. if (timelineOption.controlPosition === 'left') {
  6438. x = this._location.x;
  6439. this._location.x += (iconSize + iconGap) * 3;
  6440. } else {
  6441. x = this._location.x2 - ((iconSize + iconGap) * 3 - iconGap);
  6442. this._location.x2 -= (iconSize + iconGap) * 3;
  6443. }
  6444. var y = this._location.y;
  6445. var iconStyle = {
  6446. zlevel: this.getZlevelBase(),
  6447. z: this.getZBase() + 1,
  6448. style: {
  6449. iconType: 'timelineControl',
  6450. symbol: 'last',
  6451. x: x,
  6452. y: y,
  6453. width: iconSize,
  6454. height: iconSize,
  6455. brushType: 'stroke',
  6456. color: controlStyle.normal.color,
  6457. strokeColor: controlStyle.normal.color,
  6458. lineWidth: lineStyle.width
  6459. },
  6460. highlightStyle: {
  6461. color: controlStyle.emphasis.color,
  6462. strokeColor: controlStyle.emphasis.color,
  6463. lineWidth: lineStyle.width + 1
  6464. },
  6465. clickable: true
  6466. };
  6467. this._ctrLastShape = new IconShape(iconStyle);
  6468. this._ctrLastShape.onclick = function () {
  6469. self.last();
  6470. };
  6471. this.shapeList.push(this._ctrLastShape);
  6472. x += iconSize + iconGap;
  6473. this._ctrPlayShape = new IconShape(zrUtil.clone(iconStyle));
  6474. this._ctrPlayShape.style.brushType = 'fill';
  6475. this._ctrPlayShape.style.symbol = 'play';
  6476. this._ctrPlayShape.style.status = this.timelineOption.autoPlay ? 'playing' : 'stop';
  6477. this._ctrPlayShape.style.x = x;
  6478. this._ctrPlayShape.onclick = function () {
  6479. if (self._ctrPlayShape.style.status === 'stop') {
  6480. self.play();
  6481. } else {
  6482. self.stop();
  6483. }
  6484. };
  6485. this.shapeList.push(this._ctrPlayShape);
  6486. x += iconSize + iconGap;
  6487. this._ctrNextShape = new IconShape(zrUtil.clone(iconStyle));
  6488. this._ctrNextShape.style.symbol = 'next';
  6489. this._ctrNextShape.style.x = x;
  6490. this._ctrNextShape.onclick = function () {
  6491. self.next();
  6492. };
  6493. this.shapeList.push(this._ctrNextShape);
  6494. },
  6495. _buildChain: function () {
  6496. var timelineOption = this.timelineOption;
  6497. var lineStyle = timelineOption.lineStyle;
  6498. this._timelineShae = {
  6499. zlevel: this.getZlevelBase(),
  6500. z: this.getZBase(),
  6501. style: {
  6502. x: this._location.x,
  6503. y: this.subPixelOptimize(this._location.y, lineStyle.width),
  6504. width: this._location.x2 - this._location.x,
  6505. height: this._location.height,
  6506. chainPoint: this._chainPoint,
  6507. brushType: 'both',
  6508. strokeColor: lineStyle.color,
  6509. lineWidth: lineStyle.width,
  6510. lineType: lineStyle.type
  6511. },
  6512. hoverable: false,
  6513. clickable: true,
  6514. onclick: this._onclick
  6515. };
  6516. this._timelineShae = new ChainShape(this._timelineShae);
  6517. this.shapeList.push(this._timelineShae);
  6518. },
  6519. _buildHandle: function () {
  6520. var curPoint = this._chainPoint[this.currentIndex];
  6521. var symbolSize = curPoint.symbolSize + 1;
  6522. symbolSize = symbolSize < 5 ? 5 : symbolSize;
  6523. this._handleShape = {
  6524. zlevel: this.getZlevelBase(),
  6525. z: this.getZBase() + 1,
  6526. hoverable: false,
  6527. draggable: true,
  6528. style: {
  6529. iconType: 'diamond',
  6530. n: curPoint.n,
  6531. x: curPoint.x - symbolSize,
  6532. y: this._location.y + this._location.height / 4 - symbolSize,
  6533. width: symbolSize * 2,
  6534. height: symbolSize * 2,
  6535. brushType: 'both',
  6536. textPosition: 'specific',
  6537. textX: curPoint.x,
  6538. textY: this._location.y - this._location.height / 4,
  6539. textAlign: 'center',
  6540. textBaseline: 'middle'
  6541. },
  6542. highlightStyle: {},
  6543. ondrift: this._ondrift,
  6544. ondragend: this._ondragend
  6545. };
  6546. this._handleShape = new IconShape(this._handleShape);
  6547. this.shapeList.push(this._handleShape);
  6548. },
  6549. _syncHandleShape: function () {
  6550. if (!this.timelineOption.show) {
  6551. return;
  6552. }
  6553. var timelineOption = this.timelineOption;
  6554. var cpStyle = timelineOption.checkpointStyle;
  6555. var curPoint = this._chainPoint[this.currentIndex];
  6556. this._handleShape.style.text = cpStyle.label.show ? curPoint.name : '';
  6557. this._handleShape.style.textFont = curPoint.textFont;
  6558. this._handleShape.style.n = curPoint.n;
  6559. if (cpStyle.symbol === 'auto') {
  6560. this._handleShape.style.iconType = curPoint.symbol != 'none' ? curPoint.symbol : 'diamond';
  6561. } else {
  6562. this._handleShape.style.iconType = cpStyle.symbol;
  6563. if (cpStyle.symbol.match('star')) {
  6564. this._handleShape.style.n = cpStyle.symbol.replace('star', '') - 0 || 5;
  6565. this._handleShape.style.iconType = 'star';
  6566. }
  6567. }
  6568. var symbolSize;
  6569. if (cpStyle.symbolSize === 'auto') {
  6570. symbolSize = curPoint.symbolSize + 2;
  6571. symbolSize = symbolSize < 5 ? 5 : symbolSize;
  6572. } else {
  6573. symbolSize = cpStyle.symbolSize - 0;
  6574. }
  6575. this._handleShape.style.color = cpStyle.color === 'auto' ? curPoint.color ? curPoint.color : timelineOption.controlStyle.emphasis.color : cpStyle.color;
  6576. this._handleShape.style.textColor = cpStyle.label.textStyle.color === 'auto' ? this._handleShape.style.color : cpStyle.label.textStyle.color;
  6577. this._handleShape.highlightStyle.strokeColor = this._handleShape.style.strokeColor = cpStyle.borderColor === 'auto' ? curPoint.borderColor ? curPoint.borderColor : '#fff' : cpStyle.borderColor;
  6578. this._handleShape.style.lineWidth = cpStyle.borderWidth === 'auto' ? curPoint.borderWidth ? curPoint.borderWidth : 0 : cpStyle.borderWidth - 0;
  6579. this._handleShape.highlightStyle.lineWidth = this._handleShape.style.lineWidth + 1;
  6580. this.zr.animate(this._handleShape.id, 'style').when(500, {
  6581. x: curPoint.x - symbolSize,
  6582. textX: curPoint.x,
  6583. y: this._location.y + this._location.height / 4 - symbolSize,
  6584. width: symbolSize * 2,
  6585. height: symbolSize * 2
  6586. }).start('ExponentialOut');
  6587. },
  6588. _findChainIndex: function (x) {
  6589. var chainPoint = this._chainPoint;
  6590. var len = chainPoint.length;
  6591. if (x <= chainPoint[0].x) {
  6592. return 0;
  6593. } else if (x >= chainPoint[len - 1].x) {
  6594. return len - 1;
  6595. }
  6596. for (var i = 0; i < len - 1; i++) {
  6597. if (x >= chainPoint[i].x && x <= chainPoint[i + 1].x) {
  6598. return Math.abs(x - chainPoint[i].x) < Math.abs(x - chainPoint[i + 1].x) ? i : i + 1;
  6599. }
  6600. }
  6601. },
  6602. __onclick: function (param) {
  6603. var x = zrEvent.getX(param.event);
  6604. var newIndex = this._findChainIndex(x);
  6605. if (newIndex === this.currentIndex) {
  6606. return true;
  6607. }
  6608. this.currentIndex = newIndex;
  6609. this.timelineOption.autoPlay && this.stop();
  6610. clearTimeout(this.playTicket);
  6611. this._onFrame();
  6612. },
  6613. __ondrift: function (shape, dx) {
  6614. this.timelineOption.autoPlay && this.stop();
  6615. var chainPoint = this._chainPoint;
  6616. var len = chainPoint.length;
  6617. var newIndex;
  6618. if (shape.style.x + dx <= chainPoint[0].x - chainPoint[0].symbolSize) {
  6619. shape.style.x = chainPoint[0].x - chainPoint[0].symbolSize;
  6620. newIndex = 0;
  6621. } else if (shape.style.x + dx >= chainPoint[len - 1].x - chainPoint[len - 1].symbolSize) {
  6622. shape.style.x = chainPoint[len - 1].x - chainPoint[len - 1].symbolSize;
  6623. newIndex = len - 1;
  6624. } else {
  6625. shape.style.x += dx;
  6626. newIndex = this._findChainIndex(shape.style.x);
  6627. }
  6628. var curPoint = chainPoint[newIndex];
  6629. var symbolSize = curPoint.symbolSize + 2;
  6630. shape.style.iconType = curPoint.symbol;
  6631. shape.style.n = curPoint.n;
  6632. shape.style.textX = shape.style.x + symbolSize / 2;
  6633. shape.style.y = this._location.y + this._location.height / 4 - symbolSize;
  6634. shape.style.width = symbolSize * 2;
  6635. shape.style.height = symbolSize * 2;
  6636. shape.style.text = curPoint.name;
  6637. if (newIndex === this.currentIndex) {
  6638. return true;
  6639. }
  6640. this.currentIndex = newIndex;
  6641. if (this.timelineOption.realtime) {
  6642. clearTimeout(this.playTicket);
  6643. var self = this;
  6644. this.playTicket = setTimeout(function () {
  6645. self._setCurrentOption();
  6646. }, 200);
  6647. }
  6648. return true;
  6649. },
  6650. __ondragend: function () {
  6651. this.isDragend = true;
  6652. },
  6653. ondragend: function (param, status) {
  6654. if (!this.isDragend || !param.target) {
  6655. return;
  6656. }
  6657. !this.timelineOption.realtime && this._setCurrentOption();
  6658. status.dragOut = true;
  6659. status.dragIn = true;
  6660. status.needRefresh = false;
  6661. this.isDragend = false;
  6662. this._syncHandleShape();
  6663. return;
  6664. },
  6665. last: function () {
  6666. this.timelineOption.autoPlay && this.stop();
  6667. this.currentIndex -= 1;
  6668. if (this.currentIndex < 0) {
  6669. this.currentIndex = this.timelineOption.data.length - 1;
  6670. }
  6671. this._onFrame();
  6672. return this.currentIndex;
  6673. },
  6674. next: function () {
  6675. this.timelineOption.autoPlay && this.stop();
  6676. this.currentIndex += 1;
  6677. if (this.currentIndex >= this.timelineOption.data.length) {
  6678. this.currentIndex = 0;
  6679. }
  6680. this._onFrame();
  6681. return this.currentIndex;
  6682. },
  6683. play: function (targetIndex, autoPlay) {
  6684. if (this._ctrPlayShape && this._ctrPlayShape.style.status != 'playing') {
  6685. this._ctrPlayShape.style.status = 'playing';
  6686. this.zr.modShape(this._ctrPlayShape.id);
  6687. this.zr.refreshNextFrame();
  6688. }
  6689. this.timelineOption.autoPlay = autoPlay != null ? autoPlay : true;
  6690. if (!this.timelineOption.autoPlay) {
  6691. clearTimeout(this.playTicket);
  6692. }
  6693. this.currentIndex = targetIndex != null ? targetIndex : this.currentIndex + 1;
  6694. if (this.currentIndex >= this.timelineOption.data.length) {
  6695. this.currentIndex = 0;
  6696. }
  6697. this._onFrame();
  6698. return this.currentIndex;
  6699. },
  6700. stop: function () {
  6701. if (this._ctrPlayShape && this._ctrPlayShape.style.status != 'stop') {
  6702. this._ctrPlayShape.style.status = 'stop';
  6703. this.zr.modShape(this._ctrPlayShape.id);
  6704. this.zr.refreshNextFrame();
  6705. }
  6706. this.timelineOption.autoPlay = false;
  6707. clearTimeout(this.playTicket);
  6708. return this.currentIndex;
  6709. },
  6710. resize: function () {
  6711. if (this.timelineOption.show) {
  6712. this.clear();
  6713. this._buildShape();
  6714. this._syncHandleShape();
  6715. }
  6716. },
  6717. setTheme: function (needRefresh) {
  6718. this.timelineOption = this.reformOption(zrUtil.clone(this.option.timeline));
  6719. this.timelineOption.label.textStyle = this.getTextStyle(this.timelineOption.label.textStyle);
  6720. this.timelineOption.checkpointStyle.label.textStyle = this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle);
  6721. if (!this.myChart.canvasSupported) {
  6722. this.timelineOption.realtime = false;
  6723. }
  6724. if (this.timelineOption.show && needRefresh) {
  6725. this.clear();
  6726. this._buildShape();
  6727. this._syncHandleShape();
  6728. }
  6729. },
  6730. onbeforDispose: function () {
  6731. clearTimeout(this.playTicket);
  6732. }
  6733. };
  6734. function timelineControl(ctx, style) {
  6735. var lineWidth = 2;
  6736. var x = style.x + lineWidth;
  6737. var y = style.y + lineWidth + 2;
  6738. var width = style.width - lineWidth;
  6739. var height = style.height - lineWidth;
  6740. var symbol = style.symbol;
  6741. if (symbol === 'last') {
  6742. ctx.moveTo(x + width - 2, y + height / 3);
  6743. ctx.lineTo(x + width - 2, y);
  6744. ctx.lineTo(x + 2, y + height / 2);
  6745. ctx.lineTo(x + width - 2, y + height);
  6746. ctx.lineTo(x + width - 2, y + height / 3 * 2);
  6747. ctx.moveTo(x, y);
  6748. ctx.lineTo(x, y);
  6749. } else if (symbol === 'next') {
  6750. ctx.moveTo(x + 2, y + height / 3);
  6751. ctx.lineTo(x + 2, y);
  6752. ctx.lineTo(x + width - 2, y + height / 2);
  6753. ctx.lineTo(x + 2, y + height);
  6754. ctx.lineTo(x + 2, y + height / 3 * 2);
  6755. ctx.moveTo(x, y);
  6756. ctx.lineTo(x, y);
  6757. } else if (symbol === 'play') {
  6758. if (style.status === 'stop') {
  6759. ctx.moveTo(x + 2, y);
  6760. ctx.lineTo(x + width - 2, y + height / 2);
  6761. ctx.lineTo(x + 2, y + height);
  6762. ctx.lineTo(x + 2, y);
  6763. } else {
  6764. var delta = style.brushType === 'both' ? 2 : 3;
  6765. ctx.rect(x + 2, y, delta, height);
  6766. ctx.rect(x + width - delta - 2, y, delta, height);
  6767. }
  6768. } else if (symbol.match('image')) {
  6769. var imageLocation = '';
  6770. imageLocation = symbol.replace(new RegExp('^image:\\/\\/'), '');
  6771. symbol = IconShape.prototype.iconLibrary.image;
  6772. symbol(ctx, {
  6773. x: x,
  6774. y: y,
  6775. width: width,
  6776. height: height,
  6777. image: imageLocation
  6778. });
  6779. }
  6780. }
  6781. IconShape.prototype.iconLibrary['timelineControl'] = timelineControl;
  6782. zrUtil.inherits(Timeline, Base);
  6783. require('../component').define('timeline', Timeline);
  6784. return Timeline;
  6785. });define('zrender/shape/Image', [
  6786. 'require',
  6787. './Base',
  6788. '../tool/util'
  6789. ], function (require) {
  6790. var Base = require('./Base');
  6791. var ZImage = function (options) {
  6792. Base.call(this, options);
  6793. };
  6794. ZImage.prototype = {
  6795. type: 'image',
  6796. brush: function (ctx, isHighlight, refreshNextFrame) {
  6797. var style = this.style || {};
  6798. if (isHighlight) {
  6799. style = this.getHighlightStyle(style, this.highlightStyle || {});
  6800. }
  6801. var image = style.image;
  6802. var self = this;
  6803. if (!this._imageCache) {
  6804. this._imageCache = {};
  6805. }
  6806. if (typeof image === 'string') {
  6807. var src = image;
  6808. if (this._imageCache[src]) {
  6809. image = this._imageCache[src];
  6810. } else {
  6811. image = new Image();
  6812. image.onload = function () {
  6813. image.onload = null;
  6814. self.modSelf();
  6815. refreshNextFrame();
  6816. };
  6817. image.src = src;
  6818. this._imageCache[src] = image;
  6819. }
  6820. }
  6821. if (image) {
  6822. if (image.nodeName.toUpperCase() == 'IMG') {
  6823. if (window.ActiveXObject) {
  6824. if (image.readyState != 'complete') {
  6825. return;
  6826. }
  6827. } else {
  6828. if (!image.complete) {
  6829. return;
  6830. }
  6831. }
  6832. }
  6833. var width = style.width || image.width;
  6834. var height = style.height || image.height;
  6835. var x = style.x;
  6836. var y = style.y;
  6837. if (!image.width || !image.height) {
  6838. return;
  6839. }
  6840. ctx.save();
  6841. this.doClip(ctx);
  6842. this.setContext(ctx, style);
  6843. this.setTransform(ctx);
  6844. if (style.sWidth && style.sHeight) {
  6845. var sx = style.sx || 0;
  6846. var sy = style.sy || 0;
  6847. ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);
  6848. } else if (style.sx && style.sy) {
  6849. var sx = style.sx;
  6850. var sy = style.sy;
  6851. var sWidth = width - sx;
  6852. var sHeight = height - sy;
  6853. ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height);
  6854. } else {
  6855. ctx.drawImage(image, x, y, width, height);
  6856. }
  6857. if (!style.width) {
  6858. style.width = width;
  6859. }
  6860. if (!style.height) {
  6861. style.height = height;
  6862. }
  6863. if (!this.style.width) {
  6864. this.style.width = width;
  6865. }
  6866. if (!this.style.height) {
  6867. this.style.height = height;
  6868. }
  6869. this.drawText(ctx, style, this.style);
  6870. ctx.restore();
  6871. }
  6872. },
  6873. getRect: function (style) {
  6874. return {
  6875. x: style.x,
  6876. y: style.y,
  6877. width: style.width,
  6878. height: style.height
  6879. };
  6880. },
  6881. clearCache: function () {
  6882. this._imageCache = {};
  6883. }
  6884. };
  6885. require('../tool/util').inherits(ZImage, Base);
  6886. return ZImage;
  6887. });define('zrender/loadingEffect/Bar', [
  6888. 'require',
  6889. './Base',
  6890. '../tool/util',
  6891. '../tool/color',
  6892. '../shape/Rectangle'
  6893. ], function (require) {
  6894. var Base = require('./Base');
  6895. var util = require('../tool/util');
  6896. var zrColor = require('../tool/color');
  6897. var RectangleShape = require('../shape/Rectangle');
  6898. function Bar(options) {
  6899. Base.call(this, options);
  6900. }
  6901. util.inherits(Bar, Base);
  6902. Bar.prototype._start = function (addShapeHandle, refreshHandle) {
  6903. var options = util.merge(this.options, {
  6904. textStyle: { color: '#888' },
  6905. backgroundColor: 'rgba(250, 250, 250, 0.8)',
  6906. effectOption: {
  6907. x: 0,
  6908. y: this.canvasHeight / 2 - 30,
  6909. width: this.canvasWidth,
  6910. height: 5,
  6911. brushType: 'fill',
  6912. timeInterval: 100
  6913. }
  6914. });
  6915. var textShape = this.createTextShape(options.textStyle);
  6916. var background = this.createBackgroundShape(options.backgroundColor);
  6917. var effectOption = options.effectOption;
  6918. var barShape = new RectangleShape({ highlightStyle: util.clone(effectOption) });
  6919. barShape.highlightStyle.color = effectOption.color || zrColor.getLinearGradient(effectOption.x, effectOption.y, effectOption.x + effectOption.width, effectOption.y + effectOption.height, [
  6920. [
  6921. 0,
  6922. '#ff6400'
  6923. ],
  6924. [
  6925. 0.5,
  6926. '#ffe100'
  6927. ],
  6928. [
  6929. 1,
  6930. '#b1ff00'
  6931. ]
  6932. ]);
  6933. if (options.progress != null) {
  6934. addShapeHandle(background);
  6935. barShape.highlightStyle.width = this.adjust(options.progress, [
  6936. 0,
  6937. 1
  6938. ]) * options.effectOption.width;
  6939. addShapeHandle(barShape);
  6940. addShapeHandle(textShape);
  6941. refreshHandle();
  6942. return;
  6943. } else {
  6944. barShape.highlightStyle.width = 0;
  6945. return setInterval(function () {
  6946. addShapeHandle(background);
  6947. if (barShape.highlightStyle.width < effectOption.width) {
  6948. barShape.highlightStyle.width += 8;
  6949. } else {
  6950. barShape.highlightStyle.width = 0;
  6951. }
  6952. addShapeHandle(barShape);
  6953. addShapeHandle(textShape);
  6954. refreshHandle();
  6955. }, effectOption.timeInterval);
  6956. }
  6957. };
  6958. return Bar;
  6959. });define('zrender/loadingEffect/Bubble', [
  6960. 'require',
  6961. './Base',
  6962. '../tool/util',
  6963. '../tool/color',
  6964. '../shape/Circle'
  6965. ], function (require) {
  6966. var Base = require('./Base');
  6967. var util = require('../tool/util');
  6968. var zrColor = require('../tool/color');
  6969. var CircleShape = require('../shape/Circle');
  6970. function Bubble(options) {
  6971. Base.call(this, options);
  6972. }
  6973. util.inherits(Bubble, Base);
  6974. Bubble.prototype._start = function (addShapeHandle, refreshHandle) {
  6975. var options = util.merge(this.options, {
  6976. textStyle: { color: '#888' },
  6977. backgroundColor: 'rgba(250, 250, 250, 0.8)',
  6978. effect: {
  6979. n: 50,
  6980. lineWidth: 2,
  6981. brushType: 'stroke',
  6982. color: 'random',
  6983. timeInterval: 100
  6984. }
  6985. });
  6986. var textShape = this.createTextShape(options.textStyle);
  6987. var background = this.createBackgroundShape(options.backgroundColor);
  6988. var effectOption = options.effect;
  6989. var n = effectOption.n;
  6990. var brushType = effectOption.brushType;
  6991. var lineWidth = effectOption.lineWidth;
  6992. var shapeList = [];
  6993. var canvasWidth = this.canvasWidth;
  6994. var canvasHeight = this.canvasHeight;
  6995. for (var i = 0; i < n; i++) {
  6996. var color = effectOption.color == 'random' ? zrColor.alpha(zrColor.random(), 0.3) : effectOption.color;
  6997. shapeList[i] = new CircleShape({
  6998. highlightStyle: {
  6999. x: Math.ceil(Math.random() * canvasWidth),
  7000. y: Math.ceil(Math.random() * canvasHeight),
  7001. r: Math.ceil(Math.random() * 40),
  7002. brushType: brushType,
  7003. color: color,
  7004. strokeColor: color,
  7005. lineWidth: lineWidth
  7006. },
  7007. animationY: Math.ceil(Math.random() * 20)
  7008. });
  7009. }
  7010. return setInterval(function () {
  7011. addShapeHandle(background);
  7012. for (var i = 0; i < n; i++) {
  7013. var style = shapeList[i].highlightStyle;
  7014. if (style.y - shapeList[i].animationY + style.r <= 0) {
  7015. shapeList[i].highlightStyle.y = canvasHeight + style.r;
  7016. shapeList[i].highlightStyle.x = Math.ceil(Math.random() * canvasWidth);
  7017. }
  7018. shapeList[i].highlightStyle.y -= shapeList[i].animationY;
  7019. addShapeHandle(shapeList[i]);
  7020. }
  7021. addShapeHandle(textShape);
  7022. refreshHandle();
  7023. }, effectOption.timeInterval);
  7024. };
  7025. return Bubble;
  7026. });define('zrender/loadingEffect/DynamicLine', [
  7027. 'require',
  7028. './Base',
  7029. '../tool/util',
  7030. '../tool/color',
  7031. '../shape/Line'
  7032. ], function (require) {
  7033. var Base = require('./Base');
  7034. var util = require('../tool/util');
  7035. var zrColor = require('../tool/color');
  7036. var LineShape = require('../shape/Line');
  7037. function DynamicLine(options) {
  7038. Base.call(this, options);
  7039. }
  7040. util.inherits(DynamicLine, Base);
  7041. DynamicLine.prototype._start = function (addShapeHandle, refreshHandle) {
  7042. var options = util.merge(this.options, {
  7043. textStyle: { color: '#fff' },
  7044. backgroundColor: 'rgba(0, 0, 0, 0.8)',
  7045. effectOption: {
  7046. n: 30,
  7047. lineWidth: 1,
  7048. color: 'random',
  7049. timeInterval: 100
  7050. }
  7051. });
  7052. var textShape = this.createTextShape(options.textStyle);
  7053. var background = this.createBackgroundShape(options.backgroundColor);
  7054. var effectOption = options.effectOption;
  7055. var n = effectOption.n;
  7056. var lineWidth = effectOption.lineWidth;
  7057. var shapeList = [];
  7058. var canvasWidth = this.canvasWidth;
  7059. var canvasHeight = this.canvasHeight;
  7060. for (var i = 0; i < n; i++) {
  7061. var xStart = -Math.ceil(Math.random() * 1000);
  7062. var len = Math.ceil(Math.random() * 400);
  7063. var pos = Math.ceil(Math.random() * canvasHeight);
  7064. var color = effectOption.color == 'random' ? zrColor.random() : effectOption.color;
  7065. shapeList[i] = new LineShape({
  7066. highlightStyle: {
  7067. xStart: xStart,
  7068. yStart: pos,
  7069. xEnd: xStart + len,
  7070. yEnd: pos,
  7071. strokeColor: color,
  7072. lineWidth: lineWidth
  7073. },
  7074. animationX: Math.ceil(Math.random() * 100),
  7075. len: len
  7076. });
  7077. }
  7078. return setInterval(function () {
  7079. addShapeHandle(background);
  7080. for (var i = 0; i < n; i++) {
  7081. var style = shapeList[i].highlightStyle;
  7082. if (style.xStart >= canvasWidth) {
  7083. shapeList[i].len = Math.ceil(Math.random() * 400);
  7084. style.xStart = -400;
  7085. style.xEnd = -400 + shapeList[i].len;
  7086. style.yStart = Math.ceil(Math.random() * canvasHeight);
  7087. style.yEnd = style.yStart;
  7088. }
  7089. style.xStart += shapeList[i].animationX;
  7090. style.xEnd += shapeList[i].animationX;
  7091. addShapeHandle(shapeList[i]);
  7092. }
  7093. addShapeHandle(textShape);
  7094. refreshHandle();
  7095. }, effectOption.timeInterval);
  7096. };
  7097. return DynamicLine;
  7098. });define('zrender/loadingEffect/Ring', [
  7099. 'require',
  7100. './Base',
  7101. '../tool/util',
  7102. '../tool/color',
  7103. '../shape/Ring',
  7104. '../shape/Sector'
  7105. ], function (require) {
  7106. var Base = require('./Base');
  7107. var util = require('../tool/util');
  7108. var zrColor = require('../tool/color');
  7109. var RingShape = require('../shape/Ring');
  7110. var SectorShape = require('../shape/Sector');
  7111. function Ring(options) {
  7112. Base.call(this, options);
  7113. }
  7114. util.inherits(Ring, Base);
  7115. Ring.prototype._start = function (addShapeHandle, refreshHandle) {
  7116. var options = util.merge(this.options, {
  7117. textStyle: { color: '#07a' },
  7118. backgroundColor: 'rgba(250, 250, 250, 0.8)',
  7119. effect: {
  7120. x: this.canvasWidth / 2,
  7121. y: this.canvasHeight / 2,
  7122. r0: 60,
  7123. r: 100,
  7124. color: '#bbdcff',
  7125. brushType: 'fill',
  7126. textPosition: 'inside',
  7127. textFont: 'normal 30px verdana',
  7128. textColor: 'rgba(30, 144, 255, 0.6)',
  7129. timeInterval: 100
  7130. }
  7131. });
  7132. var effectOption = options.effect;
  7133. var textStyle = options.textStyle;
  7134. if (textStyle.x == null) {
  7135. textStyle.x = effectOption.x;
  7136. }
  7137. if (textStyle.y == null) {
  7138. textStyle.y = effectOption.y + (effectOption.r0 + effectOption.r) / 2 - 5;
  7139. }
  7140. var textShape = this.createTextShape(options.textStyle);
  7141. var background = this.createBackgroundShape(options.backgroundColor);
  7142. var x = effectOption.x;
  7143. var y = effectOption.y;
  7144. var r0 = effectOption.r0 + 6;
  7145. var r = effectOption.r - 6;
  7146. var color = effectOption.color;
  7147. var darkColor = zrColor.lift(color, 0.1);
  7148. var shapeRing = new RingShape({ highlightStyle: util.clone(effectOption) });
  7149. var shapeList = [];
  7150. var clolrList = zrColor.getGradientColors([
  7151. '#ff6400',
  7152. '#ffe100',
  7153. '#97ff00'
  7154. ], 25);
  7155. var preAngle = 15;
  7156. var endAngle = 240;
  7157. for (var i = 0; i < 16; i++) {
  7158. shapeList.push(new SectorShape({
  7159. highlightStyle: {
  7160. x: x,
  7161. y: y,
  7162. r0: r0,
  7163. r: r,
  7164. startAngle: endAngle - preAngle,
  7165. endAngle: endAngle,
  7166. brushType: 'fill',
  7167. color: darkColor
  7168. },
  7169. _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), [
  7170. [
  7171. 0,
  7172. clolrList[i * 2]
  7173. ],
  7174. [
  7175. 1,
  7176. clolrList[i * 2 + 1]
  7177. ]
  7178. ])
  7179. }));
  7180. endAngle -= preAngle;
  7181. }
  7182. endAngle = 360;
  7183. for (var i = 0; i < 4; i++) {
  7184. shapeList.push(new SectorShape({
  7185. highlightStyle: {
  7186. x: x,
  7187. y: y,
  7188. r0: r0,
  7189. r: r,
  7190. startAngle: endAngle - preAngle,
  7191. endAngle: endAngle,
  7192. brushType: 'fill',
  7193. color: darkColor
  7194. },
  7195. _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), [
  7196. [
  7197. 0,
  7198. clolrList[i * 2 + 32]
  7199. ],
  7200. [
  7201. 1,
  7202. clolrList[i * 2 + 33]
  7203. ]
  7204. ])
  7205. }));
  7206. endAngle -= preAngle;
  7207. }
  7208. var n = 0;
  7209. if (options.progress != null) {
  7210. addShapeHandle(background);
  7211. n = this.adjust(options.progress, [
  7212. 0,
  7213. 1
  7214. ]).toFixed(2) * 100 / 5;
  7215. shapeRing.highlightStyle.text = n * 5 + '%';
  7216. addShapeHandle(shapeRing);
  7217. for (var i = 0; i < 20; i++) {
  7218. shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
  7219. addShapeHandle(shapeList[i]);
  7220. }
  7221. addShapeHandle(textShape);
  7222. refreshHandle();
  7223. return;
  7224. }
  7225. return setInterval(function () {
  7226. addShapeHandle(background);
  7227. n += n >= 20 ? -20 : 1;
  7228. addShapeHandle(shapeRing);
  7229. for (var i = 0; i < 20; i++) {
  7230. shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
  7231. addShapeHandle(shapeList[i]);
  7232. }
  7233. addShapeHandle(textShape);
  7234. refreshHandle();
  7235. }, effectOption.timeInterval);
  7236. };
  7237. return Ring;
  7238. });define('zrender/loadingEffect/Spin', [
  7239. 'require',
  7240. './Base',
  7241. '../tool/util',
  7242. '../tool/color',
  7243. '../tool/area',
  7244. '../shape/Sector'
  7245. ], function (require) {
  7246. var Base = require('./Base');
  7247. var util = require('../tool/util');
  7248. var zrColor = require('../tool/color');
  7249. var zrArea = require('../tool/area');
  7250. var SectorShape = require('../shape/Sector');
  7251. function Spin(options) {
  7252. Base.call(this, options);
  7253. }
  7254. util.inherits(Spin, Base);
  7255. Spin.prototype._start = function (addShapeHandle, refreshHandle) {
  7256. var options = util.merge(this.options, {
  7257. textStyle: {
  7258. color: '#fff',
  7259. textAlign: 'start'
  7260. },
  7261. backgroundColor: 'rgba(0, 0, 0, 0.8)'
  7262. });
  7263. var textShape = this.createTextShape(options.textStyle);
  7264. var textGap = 10;
  7265. var textWidth = zrArea.getTextWidth(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7266. var textHeight = zrArea.getTextHeight(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7267. var effectOption = util.merge(this.options.effect || {}, {
  7268. r0: 9,
  7269. r: 15,
  7270. n: 18,
  7271. color: '#fff',
  7272. timeInterval: 100
  7273. });
  7274. var location = this.getLocation(this.options.textStyle, textWidth + textGap + effectOption.r * 2, Math.max(effectOption.r * 2, textHeight));
  7275. effectOption.x = location.x + effectOption.r;
  7276. effectOption.y = textShape.highlightStyle.y = location.y + location.height / 2;
  7277. textShape.highlightStyle.x = effectOption.x + effectOption.r + textGap;
  7278. var background = this.createBackgroundShape(options.backgroundColor);
  7279. var n = effectOption.n;
  7280. var x = effectOption.x;
  7281. var y = effectOption.y;
  7282. var r0 = effectOption.r0;
  7283. var r = effectOption.r;
  7284. var color = effectOption.color;
  7285. var shapeList = [];
  7286. var preAngle = Math.round(180 / n);
  7287. for (var i = 0; i < n; i++) {
  7288. shapeList[i] = new SectorShape({
  7289. highlightStyle: {
  7290. x: x,
  7291. y: y,
  7292. r0: r0,
  7293. r: r,
  7294. startAngle: preAngle * i * 2,
  7295. endAngle: preAngle * i * 2 + preAngle,
  7296. color: zrColor.alpha(color, (i + 1) / n),
  7297. brushType: 'fill'
  7298. }
  7299. });
  7300. }
  7301. var pos = [
  7302. 0,
  7303. x,
  7304. y
  7305. ];
  7306. return setInterval(function () {
  7307. addShapeHandle(background);
  7308. pos[0] -= 0.3;
  7309. for (var i = 0; i < n; i++) {
  7310. shapeList[i].rotation = pos;
  7311. addShapeHandle(shapeList[i]);
  7312. }
  7313. addShapeHandle(textShape);
  7314. refreshHandle();
  7315. }, effectOption.timeInterval);
  7316. };
  7317. return Spin;
  7318. });define('zrender/loadingEffect/Whirling', [
  7319. 'require',
  7320. './Base',
  7321. '../tool/util',
  7322. '../tool/area',
  7323. '../shape/Ring',
  7324. '../shape/Droplet',
  7325. '../shape/Circle'
  7326. ], function (require) {
  7327. var Base = require('./Base');
  7328. var util = require('../tool/util');
  7329. var zrArea = require('../tool/area');
  7330. var RingShape = require('../shape/Ring');
  7331. var DropletShape = require('../shape/Droplet');
  7332. var CircleShape = require('../shape/Circle');
  7333. function Whirling(options) {
  7334. Base.call(this, options);
  7335. }
  7336. util.inherits(Whirling, Base);
  7337. Whirling.prototype._start = function (addShapeHandle, refreshHandle) {
  7338. var options = util.merge(this.options, {
  7339. textStyle: {
  7340. color: '#888',
  7341. textAlign: 'start'
  7342. },
  7343. backgroundColor: 'rgba(250, 250, 250, 0.8)'
  7344. });
  7345. var textShape = this.createTextShape(options.textStyle);
  7346. var textGap = 10;
  7347. var textWidth = zrArea.getTextWidth(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7348. var textHeight = zrArea.getTextHeight(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7349. var effectOption = util.merge(this.options.effect || {}, {
  7350. r: 18,
  7351. colorIn: '#fff',
  7352. colorOut: '#555',
  7353. colorWhirl: '#6cf',
  7354. timeInterval: 50
  7355. });
  7356. var location = this.getLocation(this.options.textStyle, textWidth + textGap + effectOption.r * 2, Math.max(effectOption.r * 2, textHeight));
  7357. effectOption.x = location.x + effectOption.r;
  7358. effectOption.y = textShape.highlightStyle.y = location.y + location.height / 2;
  7359. textShape.highlightStyle.x = effectOption.x + effectOption.r + textGap;
  7360. var background = this.createBackgroundShape(options.backgroundColor);
  7361. var droplet = new DropletShape({
  7362. highlightStyle: {
  7363. a: Math.round(effectOption.r / 2),
  7364. b: Math.round(effectOption.r - effectOption.r / 6),
  7365. brushType: 'fill',
  7366. color: effectOption.colorWhirl
  7367. }
  7368. });
  7369. var circleIn = new CircleShape({
  7370. highlightStyle: {
  7371. r: Math.round(effectOption.r / 6),
  7372. brushType: 'fill',
  7373. color: effectOption.colorIn
  7374. }
  7375. });
  7376. var circleOut = new RingShape({
  7377. highlightStyle: {
  7378. r0: Math.round(effectOption.r - effectOption.r / 3),
  7379. r: effectOption.r,
  7380. brushType: 'fill',
  7381. color: effectOption.colorOut
  7382. }
  7383. });
  7384. var pos = [
  7385. 0,
  7386. effectOption.x,
  7387. effectOption.y
  7388. ];
  7389. droplet.highlightStyle.x = circleIn.highlightStyle.x = circleOut.highlightStyle.x = pos[1];
  7390. droplet.highlightStyle.y = circleIn.highlightStyle.y = circleOut.highlightStyle.y = pos[2];
  7391. return setInterval(function () {
  7392. addShapeHandle(background);
  7393. addShapeHandle(circleOut);
  7394. pos[0] -= 0.3;
  7395. droplet.rotation = pos;
  7396. addShapeHandle(droplet);
  7397. addShapeHandle(circleIn);
  7398. addShapeHandle(textShape);
  7399. refreshHandle();
  7400. }, effectOption.timeInterval);
  7401. };
  7402. return Whirling;
  7403. });define('echarts/theme/macarons', [], function () {
  7404. var theme = {
  7405. color: [
  7406. '#2ec7c9',
  7407. '#b6a2de',
  7408. '#5ab1ef',
  7409. '#ffb980',
  7410. '#d87a80',
  7411. '#8d98b3',
  7412. '#e5cf0d',
  7413. '#97b552',
  7414. '#95706d',
  7415. '#dc69aa',
  7416. '#07a2a4',
  7417. '#9a7fd1',
  7418. '#588dd5',
  7419. '#f5994e',
  7420. '#c05050',
  7421. '#59678c',
  7422. '#c9ab00',
  7423. '#7eb00a',
  7424. '#6f5553',
  7425. '#c14089'
  7426. ],
  7427. title: {
  7428. textStyle: {
  7429. fontWeight: 'normal',
  7430. color: '#008acd'
  7431. }
  7432. },
  7433. dataRange: {
  7434. itemWidth: 15,
  7435. color: [
  7436. '#5ab1ef',
  7437. '#e0ffff'
  7438. ]
  7439. },
  7440. toolbox: {
  7441. color: [
  7442. '#1e90ff',
  7443. '#1e90ff',
  7444. '#1e90ff',
  7445. '#1e90ff'
  7446. ],
  7447. effectiveColor: '#ff4500'
  7448. },
  7449. tooltip: {
  7450. backgroundColor: 'rgba(50,50,50,0.5)',
  7451. axisPointer: {
  7452. type: 'line',
  7453. lineStyle: { color: '#008acd' },
  7454. crossStyle: { color: '#008acd' },
  7455. shadowStyle: { color: 'rgba(200,200,200,0.2)' }
  7456. }
  7457. },
  7458. dataZoom: {
  7459. dataBackgroundColor: '#efefff',
  7460. fillerColor: 'rgba(182,162,222,0.2)',
  7461. handleColor: '#008acd'
  7462. },
  7463. grid: { borderColor: '#eee' },
  7464. categoryAxis: {
  7465. axisLine: { lineStyle: { color: '#008acd' } },
  7466. splitLine: { lineStyle: { color: ['#eee'] } }
  7467. },
  7468. valueAxis: {
  7469. axisLine: { lineStyle: { color: '#008acd' } },
  7470. splitArea: {
  7471. show: true,
  7472. areaStyle: {
  7473. color: [
  7474. 'rgba(250,250,250,0.1)',
  7475. 'rgba(200,200,200,0.1)'
  7476. ]
  7477. }
  7478. },
  7479. splitLine: { lineStyle: { color: ['#eee'] } }
  7480. },
  7481. polar: {
  7482. axisLine: { lineStyle: { color: '#ddd' } },
  7483. splitArea: {
  7484. show: true,
  7485. areaStyle: {
  7486. color: [
  7487. 'rgba(250,250,250,0.2)',
  7488. 'rgba(200,200,200,0.2)'
  7489. ]
  7490. }
  7491. },
  7492. splitLine: { lineStyle: { color: '#ddd' } }
  7493. },
  7494. timeline: {
  7495. lineStyle: { color: '#008acd' },
  7496. controlStyle: {
  7497. normal: { color: '#008acd' },
  7498. emphasis: { color: '#008acd' }
  7499. },
  7500. symbol: 'emptyCircle',
  7501. symbolSize: 3
  7502. },
  7503. bar: {
  7504. itemStyle: {
  7505. normal: { barBorderRadius: 5 },
  7506. emphasis: { barBorderRadius: 5 }
  7507. }
  7508. },
  7509. line: {
  7510. smooth: true,
  7511. symbol: 'emptyCircle',
  7512. symbolSize: 3
  7513. },
  7514. k: {
  7515. itemStyle: {
  7516. normal: {
  7517. color: '#d87a80',
  7518. color0: '#2ec7c9',
  7519. lineStyle: {
  7520. color: '#d87a80',
  7521. color0: '#2ec7c9'
  7522. }
  7523. }
  7524. }
  7525. },
  7526. scatter: {
  7527. symbol: 'circle',
  7528. symbolSize: 4
  7529. },
  7530. radar: {
  7531. symbol: 'emptyCircle',
  7532. symbolSize: 3
  7533. },
  7534. map: {
  7535. itemStyle: {
  7536. normal: {
  7537. areaStyle: { color: '#ddd' },
  7538. label: { textStyle: { color: '#d87a80' } }
  7539. },
  7540. emphasis: { areaStyle: { color: '#fe994e' } }
  7541. }
  7542. },
  7543. force: { itemStyle: { normal: { linkStyle: { color: '#1e90ff' } } } },
  7544. chord: {
  7545. itemStyle: {
  7546. normal: {
  7547. borderWidth: 1,
  7548. borderColor: 'rgba(128, 128, 128, 0.5)',
  7549. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7550. },
  7551. emphasis: {
  7552. borderWidth: 1,
  7553. borderColor: 'rgba(128, 128, 128, 0.5)',
  7554. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7555. }
  7556. }
  7557. },
  7558. gauge: {
  7559. axisLine: {
  7560. lineStyle: {
  7561. color: [
  7562. [
  7563. 0.2,
  7564. '#2ec7c9'
  7565. ],
  7566. [
  7567. 0.8,
  7568. '#5ab1ef'
  7569. ],
  7570. [
  7571. 1,
  7572. '#d87a80'
  7573. ]
  7574. ],
  7575. width: 10
  7576. }
  7577. },
  7578. axisTick: {
  7579. splitNumber: 10,
  7580. length: 15,
  7581. lineStyle: { color: 'auto' }
  7582. },
  7583. splitLine: {
  7584. length: 22,
  7585. lineStyle: { color: 'auto' }
  7586. },
  7587. pointer: { width: 5 }
  7588. },
  7589. textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' }
  7590. };
  7591. return theme;
  7592. });define('echarts/theme/infographic', [], function () {
  7593. var theme = {
  7594. color: [
  7595. '#C1232B',
  7596. '#B5C334',
  7597. '#FCCE10',
  7598. '#E87C25',
  7599. '#27727B',
  7600. '#FE8463',
  7601. '#9BCA63',
  7602. '#FAD860',
  7603. '#F3A43B',
  7604. '#60C0DD',
  7605. '#D7504B',
  7606. '#C6E579',
  7607. '#F4E001',
  7608. '#F0805A',
  7609. '#26C0C0'
  7610. ],
  7611. title: {
  7612. textStyle: {
  7613. fontWeight: 'normal',
  7614. color: '#27727B'
  7615. }
  7616. },
  7617. dataRange: {
  7618. x: 'right',
  7619. y: 'center',
  7620. itemWidth: 5,
  7621. itemHeight: 25,
  7622. color: [
  7623. '#C1232B',
  7624. '#FCCE10'
  7625. ]
  7626. },
  7627. toolbox: {
  7628. color: [
  7629. '#C1232B',
  7630. '#B5C334',
  7631. '#FCCE10',
  7632. '#E87C25',
  7633. '#27727B',
  7634. '#FE8463',
  7635. '#9BCA63',
  7636. '#FAD860',
  7637. '#F3A43B',
  7638. '#60C0DD'
  7639. ],
  7640. effectiveColor: '#ff4500'
  7641. },
  7642. tooltip: {
  7643. backgroundColor: 'rgba(50,50,50,0.5)',
  7644. axisPointer: {
  7645. type: 'line',
  7646. lineStyle: {
  7647. color: '#27727B',
  7648. type: 'dashed'
  7649. },
  7650. crossStyle: { color: '#27727B' },
  7651. shadowStyle: { color: 'rgba(200,200,200,0.3)' }
  7652. }
  7653. },
  7654. dataZoom: {
  7655. dataBackgroundColor: 'rgba(181,195,52,0.3)',
  7656. fillerColor: 'rgba(181,195,52,0.2)',
  7657. handleColor: '#27727B'
  7658. },
  7659. grid: { borderWidth: 0 },
  7660. categoryAxis: {
  7661. axisLine: { lineStyle: { color: '#27727B' } },
  7662. splitLine: { show: false }
  7663. },
  7664. valueAxis: {
  7665. axisLine: { show: false },
  7666. splitArea: { show: false },
  7667. splitLine: {
  7668. lineStyle: {
  7669. color: ['#ccc'],
  7670. type: 'dashed'
  7671. }
  7672. }
  7673. },
  7674. polar: {
  7675. axisLine: { lineStyle: { color: '#ddd' } },
  7676. splitArea: {
  7677. show: true,
  7678. areaStyle: {
  7679. color: [
  7680. 'rgba(250,250,250,0.2)',
  7681. 'rgba(200,200,200,0.2)'
  7682. ]
  7683. }
  7684. },
  7685. splitLine: { lineStyle: { color: '#ddd' } }
  7686. },
  7687. timeline: {
  7688. lineStyle: { color: '#27727B' },
  7689. controlStyle: {
  7690. normal: { color: '#27727B' },
  7691. emphasis: { color: '#27727B' }
  7692. },
  7693. symbol: 'emptyCircle',
  7694. symbolSize: 3
  7695. },
  7696. line: {
  7697. itemStyle: {
  7698. normal: {
  7699. borderWidth: 2,
  7700. borderColor: '#fff',
  7701. lineStyle: { width: 3 }
  7702. },
  7703. emphasis: { borderWidth: 0 }
  7704. },
  7705. symbol: 'circle',
  7706. symbolSize: 3.5
  7707. },
  7708. k: {
  7709. itemStyle: {
  7710. normal: {
  7711. color: '#C1232B',
  7712. color0: '#B5C334',
  7713. lineStyle: {
  7714. width: 1,
  7715. color: '#C1232B',
  7716. color0: '#B5C334'
  7717. }
  7718. }
  7719. }
  7720. },
  7721. scatter: {
  7722. itemStyle: {
  7723. normal: {
  7724. borderWidth: 1,
  7725. borderColor: 'rgba(200,200,200,0.5)'
  7726. },
  7727. emphasis: { borderWidth: 0 }
  7728. },
  7729. symbol: 'star4',
  7730. symbolSize: 4
  7731. },
  7732. radar: {
  7733. symbol: 'emptyCircle',
  7734. symbolSize: 3
  7735. },
  7736. map: {
  7737. itemStyle: {
  7738. normal: {
  7739. areaStyle: { color: '#ddd' },
  7740. label: { textStyle: { color: '#C1232B' } }
  7741. },
  7742. emphasis: {
  7743. areaStyle: { color: '#fe994e' },
  7744. label: { textStyle: { color: 'rgb(100,0,0)' } }
  7745. }
  7746. }
  7747. },
  7748. force: { itemStyle: { normal: { linkStyle: { color: '#27727B' } } } },
  7749. chord: {
  7750. itemStyle: {
  7751. normal: {
  7752. borderWidth: 1,
  7753. borderColor: 'rgba(128, 128, 128, 0.5)',
  7754. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7755. },
  7756. emphasis: {
  7757. borderWidth: 1,
  7758. borderColor: 'rgba(128, 128, 128, 0.5)',
  7759. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7760. }
  7761. }
  7762. },
  7763. gauge: {
  7764. center: [
  7765. '50%',
  7766. '80%'
  7767. ],
  7768. radius: '100%',
  7769. startAngle: 180,
  7770. endAngle: 0,
  7771. axisLine: {
  7772. show: true,
  7773. lineStyle: {
  7774. color: [
  7775. [
  7776. 0.2,
  7777. '#B5C334'
  7778. ],
  7779. [
  7780. 0.8,
  7781. '#27727B'
  7782. ],
  7783. [
  7784. 1,
  7785. '#C1232B'
  7786. ]
  7787. ],
  7788. width: '40%'
  7789. }
  7790. },
  7791. axisTick: {
  7792. splitNumber: 2,
  7793. length: 5,
  7794. lineStyle: { color: '#fff' }
  7795. },
  7796. axisLabel: {
  7797. textStyle: {
  7798. color: '#fff',
  7799. fontWeight: 'bolder'
  7800. }
  7801. },
  7802. splitLine: {
  7803. length: '5%',
  7804. lineStyle: { color: '#fff' }
  7805. },
  7806. pointer: {
  7807. width: '40%',
  7808. length: '80%',
  7809. color: '#fff'
  7810. },
  7811. title: {
  7812. offsetCenter: [
  7813. 0,
  7814. -20
  7815. ],
  7816. textStyle: {
  7817. color: 'auto',
  7818. fontSize: 20
  7819. }
  7820. },
  7821. detail: {
  7822. offsetCenter: [
  7823. 0,
  7824. 0
  7825. ],
  7826. textStyle: {
  7827. color: 'auto',
  7828. fontSize: 40
  7829. }
  7830. }
  7831. },
  7832. textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' }
  7833. };
  7834. return theme;
  7835. });define('zrender/dep/excanvas', ['require'], function (require) {
  7836. if (!document.createElement('canvas').getContext) {
  7837. (function () {
  7838. var m = Math;
  7839. var mr = m.round;
  7840. var ms = m.sin;
  7841. var mc = m.cos;
  7842. var abs = m.abs;
  7843. var sqrt = m.sqrt;
  7844. var Z = 10;
  7845. var Z2 = Z / 2;
  7846. var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];
  7847. function getContext() {
  7848. return this.context_ || (this.context_ = new CanvasRenderingContext2D_(this));
  7849. }
  7850. var slice = Array.prototype.slice;
  7851. function bind(f, obj, var_args) {
  7852. var a = slice.call(arguments, 2);
  7853. return function () {
  7854. return f.apply(obj, a.concat(slice.call(arguments)));
  7855. };
  7856. }
  7857. function encodeHtmlAttribute(s) {
  7858. return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
  7859. }
  7860. function addNamespace(doc, prefix, urn) {
  7861. if (!doc.namespaces[prefix]) {
  7862. doc.namespaces.add(prefix, urn, '#default#VML');
  7863. }
  7864. }
  7865. function addNamespacesAndStylesheet(doc) {
  7866. addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
  7867. addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');
  7868. if (!doc.styleSheets['ex_canvas_']) {
  7869. var ss = doc.createStyleSheet();
  7870. ss.owningElement.id = 'ex_canvas_';
  7871. ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + 'text-align:left;width:300px;height:150px}';
  7872. }
  7873. }
  7874. addNamespacesAndStylesheet(document);
  7875. var G_vmlCanvasManager_ = {
  7876. init: function (opt_doc) {
  7877. var doc = opt_doc || document;
  7878. doc.createElement('canvas');
  7879. doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
  7880. },
  7881. init_: function (doc) {
  7882. var els = doc.getElementsByTagName('canvas');
  7883. for (var i = 0; i < els.length; i++) {
  7884. this.initElement(els[i]);
  7885. }
  7886. },
  7887. initElement: function (el) {
  7888. if (!el.getContext) {
  7889. el.getContext = getContext;
  7890. addNamespacesAndStylesheet(el.ownerDocument);
  7891. el.innerHTML = '';
  7892. el.attachEvent('onpropertychange', onPropertyChange);
  7893. el.attachEvent('onresize', onResize);
  7894. var attrs = el.attributes;
  7895. if (attrs.width && attrs.width.specified) {
  7896. el.style.width = attrs.width.nodeValue + 'px';
  7897. } else {
  7898. el.width = el.clientWidth;
  7899. }
  7900. if (attrs.height && attrs.height.specified) {
  7901. el.style.height = attrs.height.nodeValue + 'px';
  7902. } else {
  7903. el.height = el.clientHeight;
  7904. }
  7905. }
  7906. return el;
  7907. }
  7908. };
  7909. function onPropertyChange(e) {
  7910. var el = e.srcElement;
  7911. switch (e.propertyName) {
  7912. case 'width':
  7913. el.getContext().clearRect();
  7914. el.style.width = el.attributes.width.nodeValue + 'px';
  7915. el.firstChild.style.width = el.clientWidth + 'px';
  7916. break;
  7917. case 'height':
  7918. el.getContext().clearRect();
  7919. el.style.height = el.attributes.height.nodeValue + 'px';
  7920. el.firstChild.style.height = el.clientHeight + 'px';
  7921. break;
  7922. }
  7923. }
  7924. function onResize(e) {
  7925. var el = e.srcElement;
  7926. if (el.firstChild) {
  7927. el.firstChild.style.width = el.clientWidth + 'px';
  7928. el.firstChild.style.height = el.clientHeight + 'px';
  7929. }
  7930. }
  7931. G_vmlCanvasManager_.init();
  7932. var decToHex = [];
  7933. for (var i = 0; i < 16; i++) {
  7934. for (var j = 0; j < 16; j++) {
  7935. decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
  7936. }
  7937. }
  7938. function createMatrixIdentity() {
  7939. return [
  7940. [
  7941. 1,
  7942. 0,
  7943. 0
  7944. ],
  7945. [
  7946. 0,
  7947. 1,
  7948. 0
  7949. ],
  7950. [
  7951. 0,
  7952. 0,
  7953. 1
  7954. ]
  7955. ];
  7956. }
  7957. function matrixMultiply(m1, m2) {
  7958. var result = createMatrixIdentity();
  7959. for (var x = 0; x < 3; x++) {
  7960. for (var y = 0; y < 3; y++) {
  7961. var sum = 0;
  7962. for (var z = 0; z < 3; z++) {
  7963. sum += m1[x][z] * m2[z][y];
  7964. }
  7965. result[x][y] = sum;
  7966. }
  7967. }
  7968. return result;
  7969. }
  7970. function copyState(o1, o2) {
  7971. o2.fillStyle = o1.fillStyle;
  7972. o2.lineCap = o1.lineCap;
  7973. o2.lineJoin = o1.lineJoin;
  7974. o2.lineWidth = o1.lineWidth;
  7975. o2.miterLimit = o1.miterLimit;
  7976. o2.shadowBlur = o1.shadowBlur;
  7977. o2.shadowColor = o1.shadowColor;
  7978. o2.shadowOffsetX = o1.shadowOffsetX;
  7979. o2.shadowOffsetY = o1.shadowOffsetY;
  7980. o2.strokeStyle = o1.strokeStyle;
  7981. o2.globalAlpha = o1.globalAlpha;
  7982. o2.font = o1.font;
  7983. o2.textAlign = o1.textAlign;
  7984. o2.textBaseline = o1.textBaseline;
  7985. o2.scaleX_ = o1.scaleX_;
  7986. o2.scaleY_ = o1.scaleY_;
  7987. o2.lineScale_ = o1.lineScale_;
  7988. }
  7989. var colorData = {
  7990. aliceblue: '#F0F8FF',
  7991. antiquewhite: '#FAEBD7',
  7992. aquamarine: '#7FFFD4',
  7993. azure: '#F0FFFF',
  7994. beige: '#F5F5DC',
  7995. bisque: '#FFE4C4',
  7996. black: '#000000',
  7997. blanchedalmond: '#FFEBCD',
  7998. blueviolet: '#8A2BE2',
  7999. brown: '#A52A2A',
  8000. burlywood: '#DEB887',
  8001. cadetblue: '#5F9EA0',
  8002. chartreuse: '#7FFF00',
  8003. chocolate: '#D2691E',
  8004. coral: '#FF7F50',
  8005. cornflowerblue: '#6495ED',
  8006. cornsilk: '#FFF8DC',
  8007. crimson: '#DC143C',
  8008. cyan: '#00FFFF',
  8009. darkblue: '#00008B',
  8010. darkcyan: '#008B8B',
  8011. darkgoldenrod: '#B8860B',
  8012. darkgray: '#A9A9A9',
  8013. darkgreen: '#006400',
  8014. darkgrey: '#A9A9A9',
  8015. darkkhaki: '#BDB76B',
  8016. darkmagenta: '#8B008B',
  8017. darkolivegreen: '#556B2F',
  8018. darkorange: '#FF8C00',
  8019. darkorchid: '#9932CC',
  8020. darkred: '#8B0000',
  8021. darksalmon: '#E9967A',
  8022. darkseagreen: '#8FBC8F',
  8023. darkslateblue: '#483D8B',
  8024. darkslategray: '#2F4F4F',
  8025. darkslategrey: '#2F4F4F',
  8026. darkturquoise: '#00CED1',
  8027. darkviolet: '#9400D3',
  8028. deeppink: '#FF1493',
  8029. deepskyblue: '#00BFFF',
  8030. dimgray: '#696969',
  8031. dimgrey: '#696969',
  8032. dodgerblue: '#1E90FF',
  8033. firebrick: '#B22222',
  8034. floralwhite: '#FFFAF0',
  8035. forestgreen: '#228B22',
  8036. gainsboro: '#DCDCDC',
  8037. ghostwhite: '#F8F8FF',
  8038. gold: '#FFD700',
  8039. goldenrod: '#DAA520',
  8040. grey: '#808080',
  8041. greenyellow: '#ADFF2F',
  8042. honeydew: '#F0FFF0',
  8043. hotpink: '#FF69B4',
  8044. indianred: '#CD5C5C',
  8045. indigo: '#4B0082',
  8046. ivory: '#FFFFF0',
  8047. khaki: '#F0E68C',
  8048. lavender: '#E6E6FA',
  8049. lavenderblush: '#FFF0F5',
  8050. lawngreen: '#7CFC00',
  8051. lemonchiffon: '#FFFACD',
  8052. lightblue: '#ADD8E6',
  8053. lightcoral: '#F08080',
  8054. lightcyan: '#E0FFFF',
  8055. lightgoldenrodyellow: '#FAFAD2',
  8056. lightgreen: '#90EE90',
  8057. lightgrey: '#D3D3D3',
  8058. lightpink: '#FFB6C1',
  8059. lightsalmon: '#FFA07A',
  8060. lightseagreen: '#20B2AA',
  8061. lightskyblue: '#87CEFA',
  8062. lightslategray: '#778899',
  8063. lightslategrey: '#778899',
  8064. lightsteelblue: '#B0C4DE',
  8065. lightyellow: '#FFFFE0',
  8066. limegreen: '#32CD32',
  8067. linen: '#FAF0E6',
  8068. magenta: '#FF00FF',
  8069. mediumaquamarine: '#66CDAA',
  8070. mediumblue: '#0000CD',
  8071. mediumorchid: '#BA55D3',
  8072. mediumpurple: '#9370DB',
  8073. mediumseagreen: '#3CB371',
  8074. mediumslateblue: '#7B68EE',
  8075. mediumspringgreen: '#00FA9A',
  8076. mediumturquoise: '#48D1CC',
  8077. mediumvioletred: '#C71585',
  8078. midnightblue: '#191970',
  8079. mintcream: '#F5FFFA',
  8080. mistyrose: '#FFE4E1',
  8081. moccasin: '#FFE4B5',
  8082. navajowhite: '#FFDEAD',
  8083. oldlace: '#FDF5E6',
  8084. olivedrab: '#6B8E23',
  8085. orange: '#FFA500',
  8086. orangered: '#FF4500',
  8087. orchid: '#DA70D6',
  8088. palegoldenrod: '#EEE8AA',
  8089. palegreen: '#98FB98',
  8090. paleturquoise: '#AFEEEE',
  8091. palevioletred: '#DB7093',
  8092. papayawhip: '#FFEFD5',
  8093. peachpuff: '#FFDAB9',
  8094. peru: '#CD853F',
  8095. pink: '#FFC0CB',
  8096. plum: '#DDA0DD',
  8097. powderblue: '#B0E0E6',
  8098. rosybrown: '#BC8F8F',
  8099. royalblue: '#4169E1',
  8100. saddlebrown: '#8B4513',
  8101. salmon: '#FA8072',
  8102. sandybrown: '#F4A460',
  8103. seagreen: '#2E8B57',
  8104. seashell: '#FFF5EE',
  8105. sienna: '#A0522D',
  8106. skyblue: '#87CEEB',
  8107. slateblue: '#6A5ACD',
  8108. slategray: '#708090',
  8109. slategrey: '#708090',
  8110. snow: '#FFFAFA',
  8111. springgreen: '#00FF7F',
  8112. steelblue: '#4682B4',
  8113. tan: '#D2B48C',
  8114. thistle: '#D8BFD8',
  8115. tomato: '#FF6347',
  8116. turquoise: '#40E0D0',
  8117. violet: '#EE82EE',
  8118. wheat: '#F5DEB3',
  8119. whitesmoke: '#F5F5F5',
  8120. yellowgreen: '#9ACD32'
  8121. };
  8122. function getRgbHslContent(styleString) {
  8123. var start = styleString.indexOf('(', 3);
  8124. var end = styleString.indexOf(')', start + 1);
  8125. var parts = styleString.substring(start + 1, end).split(',');
  8126. if (parts.length != 4 || styleString.charAt(3) != 'a') {
  8127. parts[3] = 1;
  8128. }
  8129. return parts;
  8130. }
  8131. function percent(s) {
  8132. return parseFloat(s) / 100;
  8133. }
  8134. function clamp(v, min, max) {
  8135. return Math.min(max, Math.max(min, v));
  8136. }
  8137. function hslToRgb(parts) {
  8138. var r, g, b, h, s, l;
  8139. h = parseFloat(parts[0]) / 360 % 360;
  8140. if (h < 0)
  8141. h++;
  8142. s = clamp(percent(parts[1]), 0, 1);
  8143. l = clamp(percent(parts[2]), 0, 1);
  8144. if (s == 0) {
  8145. r = g = b = l;
  8146. } else {
  8147. var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
  8148. var p = 2 * l - q;
  8149. r = hueToRgb(p, q, h + 1 / 3);
  8150. g = hueToRgb(p, q, h);
  8151. b = hueToRgb(p, q, h - 1 / 3);
  8152. }
  8153. return '#' + decToHex[Math.floor(r * 255)] + decToHex[Math.floor(g * 255)] + decToHex[Math.floor(b * 255)];
  8154. }
  8155. function hueToRgb(m1, m2, h) {
  8156. if (h < 0)
  8157. h++;
  8158. if (h > 1)
  8159. h--;
  8160. if (6 * h < 1)
  8161. return m1 + (m2 - m1) * 6 * h;
  8162. else if (2 * h < 1)
  8163. return m2;
  8164. else if (3 * h < 2)
  8165. return m1 + (m2 - m1) * (2 / 3 - h) * 6;
  8166. else
  8167. return m1;
  8168. }
  8169. var processStyleCache = {};
  8170. function processStyle(styleString) {
  8171. if (styleString in processStyleCache) {
  8172. return processStyleCache[styleString];
  8173. }
  8174. var str, alpha = 1;
  8175. styleString = String(styleString);
  8176. if (styleString.charAt(0) == '#') {
  8177. str = styleString;
  8178. } else if (/^rgb/.test(styleString)) {
  8179. var parts = getRgbHslContent(styleString);
  8180. var str = '#', n;
  8181. for (var i = 0; i < 3; i++) {
  8182. if (parts[i].indexOf('%') != -1) {
  8183. n = Math.floor(percent(parts[i]) * 255);
  8184. } else {
  8185. n = +parts[i];
  8186. }
  8187. str += decToHex[clamp(n, 0, 255)];
  8188. }
  8189. alpha = +parts[3];
  8190. } else if (/^hsl/.test(styleString)) {
  8191. var parts = getRgbHslContent(styleString);
  8192. str = hslToRgb(parts);
  8193. alpha = parts[3];
  8194. } else {
  8195. str = colorData[styleString] || styleString;
  8196. }
  8197. return processStyleCache[styleString] = {
  8198. color: str,
  8199. alpha: alpha
  8200. };
  8201. }
  8202. var DEFAULT_STYLE = {
  8203. style: 'normal',
  8204. variant: 'normal',
  8205. weight: 'normal',
  8206. size: 12,
  8207. family: '微软雅黑'
  8208. };
  8209. var fontStyleCache = {};
  8210. function processFontStyle(styleString) {
  8211. if (fontStyleCache[styleString]) {
  8212. return fontStyleCache[styleString];
  8213. }
  8214. var el = document.createElement('div');
  8215. var style = el.style;
  8216. var fontFamily;
  8217. try {
  8218. style.font = styleString;
  8219. fontFamily = style.fontFamily.split(',')[0];
  8220. } catch (ex) {
  8221. }
  8222. return fontStyleCache[styleString] = {
  8223. style: style.fontStyle || DEFAULT_STYLE.style,
  8224. variant: style.fontVariant || DEFAULT_STYLE.variant,
  8225. weight: style.fontWeight || DEFAULT_STYLE.weight,
  8226. size: style.fontSize || DEFAULT_STYLE.size,
  8227. family: fontFamily || DEFAULT_STYLE.family
  8228. };
  8229. }
  8230. function getComputedStyle(style, element) {
  8231. var computedStyle = {};
  8232. for (var p in style) {
  8233. computedStyle[p] = style[p];
  8234. }
  8235. var canvasFontSize = parseFloat(element.currentStyle.fontSize), fontSize = parseFloat(style.size);
  8236. if (typeof style.size == 'number') {
  8237. computedStyle.size = style.size;
  8238. } else if (style.size.indexOf('px') != -1) {
  8239. computedStyle.size = fontSize;
  8240. } else if (style.size.indexOf('em') != -1) {
  8241. computedStyle.size = canvasFontSize * fontSize;
  8242. } else if (style.size.indexOf('%') != -1) {
  8243. computedStyle.size = canvasFontSize / 100 * fontSize;
  8244. } else if (style.size.indexOf('pt') != -1) {
  8245. computedStyle.size = fontSize / 0.75;
  8246. } else {
  8247. computedStyle.size = canvasFontSize;
  8248. }
  8249. return computedStyle;
  8250. }
  8251. function buildStyle(style) {
  8252. return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + style.size + 'px \'' + style.family + '\'';
  8253. }
  8254. var lineCapMap = {
  8255. 'butt': 'flat',
  8256. 'round': 'round'
  8257. };
  8258. function processLineCap(lineCap) {
  8259. return lineCapMap[lineCap] || 'square';
  8260. }
  8261. function CanvasRenderingContext2D_(canvasElement) {
  8262. this.m_ = createMatrixIdentity();
  8263. this.mStack_ = [];
  8264. this.aStack_ = [];
  8265. this.currentPath_ = [];
  8266. this.strokeStyle = '#000';
  8267. this.fillStyle = '#000';
  8268. this.lineWidth = 1;
  8269. this.lineJoin = 'miter';
  8270. this.lineCap = 'butt';
  8271. this.miterLimit = Z * 1;
  8272. this.globalAlpha = 1;
  8273. this.font = '12px 微软雅黑';
  8274. this.textAlign = 'left';
  8275. this.textBaseline = 'alphabetic';
  8276. this.canvas = canvasElement;
  8277. var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' + canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
  8278. var el = canvasElement.ownerDocument.createElement('div');
  8279. el.style.cssText = cssText;
  8280. canvasElement.appendChild(el);
  8281. var overlayEl = el.cloneNode(false);
  8282. overlayEl.style.backgroundColor = '#fff';
  8283. overlayEl.style.filter = 'alpha(opacity=0)';
  8284. canvasElement.appendChild(overlayEl);
  8285. this.element_ = el;
  8286. this.scaleX_ = 1;
  8287. this.scaleY_ = 1;
  8288. this.lineScale_ = 1;
  8289. }
  8290. var contextPrototype = CanvasRenderingContext2D_.prototype;
  8291. contextPrototype.clearRect = function () {
  8292. if (this.textMeasureEl_) {
  8293. this.textMeasureEl_.removeNode(true);
  8294. this.textMeasureEl_ = null;
  8295. }
  8296. this.element_.innerHTML = '';
  8297. };
  8298. contextPrototype.beginPath = function () {
  8299. this.currentPath_ = [];
  8300. };
  8301. contextPrototype.moveTo = function (aX, aY) {
  8302. var p = getCoords(this, aX, aY);
  8303. this.currentPath_.push({
  8304. type: 'moveTo',
  8305. x: p.x,
  8306. y: p.y
  8307. });
  8308. this.currentX_ = p.x;
  8309. this.currentY_ = p.y;
  8310. };
  8311. contextPrototype.lineTo = function (aX, aY) {
  8312. var p = getCoords(this, aX, aY);
  8313. this.currentPath_.push({
  8314. type: 'lineTo',
  8315. x: p.x,
  8316. y: p.y
  8317. });
  8318. this.currentX_ = p.x;
  8319. this.currentY_ = p.y;
  8320. };
  8321. contextPrototype.bezierCurveTo = function (aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) {
  8322. var p = getCoords(this, aX, aY);
  8323. var cp1 = getCoords(this, aCP1x, aCP1y);
  8324. var cp2 = getCoords(this, aCP2x, aCP2y);
  8325. bezierCurveTo(this, cp1, cp2, p);
  8326. };
  8327. function bezierCurveTo(self, cp1, cp2, p) {
  8328. self.currentPath_.push({
  8329. type: 'bezierCurveTo',
  8330. cp1x: cp1.x,
  8331. cp1y: cp1.y,
  8332. cp2x: cp2.x,
  8333. cp2y: cp2.y,
  8334. x: p.x,
  8335. y: p.y
  8336. });
  8337. self.currentX_ = p.x;
  8338. self.currentY_ = p.y;
  8339. }
  8340. contextPrototype.quadraticCurveTo = function (aCPx, aCPy, aX, aY) {
  8341. var cp = getCoords(this, aCPx, aCPy);
  8342. var p = getCoords(this, aX, aY);
  8343. var cp1 = {
  8344. x: this.currentX_ + 2 / 3 * (cp.x - this.currentX_),
  8345. y: this.currentY_ + 2 / 3 * (cp.y - this.currentY_)
  8346. };
  8347. var cp2 = {
  8348. x: cp1.x + (p.x - this.currentX_) / 3,
  8349. y: cp1.y + (p.y - this.currentY_) / 3
  8350. };
  8351. bezierCurveTo(this, cp1, cp2, p);
  8352. };
  8353. contextPrototype.arc = function (aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {
  8354. aRadius *= Z;
  8355. var arcType = aClockwise ? 'at' : 'wa';
  8356. var xStart = aX + mc(aStartAngle) * aRadius - Z2;
  8357. var yStart = aY + ms(aStartAngle) * aRadius - Z2;
  8358. var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
  8359. var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
  8360. if (xStart == xEnd && !aClockwise) {
  8361. xStart += 0.125;
  8362. }
  8363. var p = getCoords(this, aX, aY);
  8364. var pStart = getCoords(this, xStart, yStart);
  8365. var pEnd = getCoords(this, xEnd, yEnd);
  8366. this.currentPath_.push({
  8367. type: arcType,
  8368. x: p.x,
  8369. y: p.y,
  8370. radius: aRadius,
  8371. xStart: pStart.x,
  8372. yStart: pStart.y,
  8373. xEnd: pEnd.x,
  8374. yEnd: pEnd.y
  8375. });
  8376. };
  8377. contextPrototype.rect = function (aX, aY, aWidth, aHeight) {
  8378. this.moveTo(aX, aY);
  8379. this.lineTo(aX + aWidth, aY);
  8380. this.lineTo(aX + aWidth, aY + aHeight);
  8381. this.lineTo(aX, aY + aHeight);
  8382. this.closePath();
  8383. };
  8384. contextPrototype.strokeRect = function (aX, aY, aWidth, aHeight) {
  8385. var oldPath = this.currentPath_;
  8386. this.beginPath();
  8387. this.moveTo(aX, aY);
  8388. this.lineTo(aX + aWidth, aY);
  8389. this.lineTo(aX + aWidth, aY + aHeight);
  8390. this.lineTo(aX, aY + aHeight);
  8391. this.closePath();
  8392. this.stroke();
  8393. this.currentPath_ = oldPath;
  8394. };
  8395. contextPrototype.fillRect = function (aX, aY, aWidth, aHeight) {
  8396. var oldPath = this.currentPath_;
  8397. this.beginPath();
  8398. this.moveTo(aX, aY);
  8399. this.lineTo(aX + aWidth, aY);
  8400. this.lineTo(aX + aWidth, aY + aHeight);
  8401. this.lineTo(aX, aY + aHeight);
  8402. this.closePath();
  8403. this.fill();
  8404. this.currentPath_ = oldPath;
  8405. };
  8406. contextPrototype.createLinearGradient = function (aX0, aY0, aX1, aY1) {
  8407. var gradient = new CanvasGradient_('gradient');
  8408. gradient.x0_ = aX0;
  8409. gradient.y0_ = aY0;
  8410. gradient.x1_ = aX1;
  8411. gradient.y1_ = aY1;
  8412. return gradient;
  8413. };
  8414. contextPrototype.createRadialGradient = function (aX0, aY0, aR0, aX1, aY1, aR1) {
  8415. var gradient = new CanvasGradient_('gradientradial');
  8416. gradient.x0_ = aX0;
  8417. gradient.y0_ = aY0;
  8418. gradient.r0_ = aR0;
  8419. gradient.x1_ = aX1;
  8420. gradient.y1_ = aY1;
  8421. gradient.r1_ = aR1;
  8422. return gradient;
  8423. };
  8424. contextPrototype.drawImage = function (image, var_args) {
  8425. var dx, dy, dw, dh, sx, sy, sw, sh;
  8426. var oldRuntimeWidth = image.runtimeStyle.width;
  8427. var oldRuntimeHeight = image.runtimeStyle.height;
  8428. image.runtimeStyle.width = 'auto';
  8429. image.runtimeStyle.height = 'auto';
  8430. var w = image.width;
  8431. var h = image.height;
  8432. image.runtimeStyle.width = oldRuntimeWidth;
  8433. image.runtimeStyle.height = oldRuntimeHeight;
  8434. if (arguments.length == 3) {
  8435. dx = arguments[1];
  8436. dy = arguments[2];
  8437. sx = sy = 0;
  8438. sw = dw = w;
  8439. sh = dh = h;
  8440. } else if (arguments.length == 5) {
  8441. dx = arguments[1];
  8442. dy = arguments[2];
  8443. dw = arguments[3];
  8444. dh = arguments[4];
  8445. sx = sy = 0;
  8446. sw = w;
  8447. sh = h;
  8448. } else if (arguments.length == 9) {
  8449. sx = arguments[1];
  8450. sy = arguments[2];
  8451. sw = arguments[3];
  8452. sh = arguments[4];
  8453. dx = arguments[5];
  8454. dy = arguments[6];
  8455. dw = arguments[7];
  8456. dh = arguments[8];
  8457. } else {
  8458. throw Error('Invalid number of arguments');
  8459. }
  8460. var d = getCoords(this, dx, dy);
  8461. var w2 = sw / 2;
  8462. var h2 = sh / 2;
  8463. var vmlStr = [];
  8464. var W = 10;
  8465. var H = 10;
  8466. var scaleX = scaleY = 1;
  8467. vmlStr.push(' <g_vml_:group', ' coordsize="', Z * W, ',', Z * H, '"', ' coordorigin="0,0"', ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
  8468. if (this.m_[0][0] != 1 || this.m_[0][1] || this.m_[1][1] != 1 || this.m_[1][0]) {
  8469. var filter = [];
  8470. var scaleX = this.scaleX_;
  8471. var scaleY = this.scaleY_;
  8472. 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), '');
  8473. var max = d;
  8474. var c2 = getCoords(this, dx + dw, dy);
  8475. var c3 = getCoords(this, dx, dy + dh);
  8476. var c4 = getCoords(this, dx + dw, dy + dh);
  8477. max.x = m.max(max.x, c2.x, c3.x, c4.x);
  8478. max.y = m.max(max.y, c2.y, c3.y, c4.y);
  8479. vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z), 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(', filter.join(''), ', SizingMethod=\'clip\');');
  8480. } else {
  8481. vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
  8482. }
  8483. vmlStr.push(' ">');
  8484. if (sx || sy) {
  8485. 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, ');">');
  8486. }
  8487. vmlStr.push('<div style="width:', Math.round(scaleX * w * dw / sw), 'px;', ' height:', Math.round(scaleY * h * dh / sh), 'px;', ' filter:');
  8488. if (this.globalAlpha < 1) {
  8489. vmlStr.push(' progid:DXImageTransform.Microsoft.Alpha(opacity=' + this.globalAlpha * 100 + ')');
  8490. }
  8491. vmlStr.push(' progid:DXImageTransform.Microsoft.AlphaImageLoader(src=', image.src, ',sizingMethod=scale)">');
  8492. if (sx || sy)
  8493. vmlStr.push('</div>');
  8494. vmlStr.push('</div></div>');
  8495. this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
  8496. };
  8497. contextPrototype.stroke = function (aFill) {
  8498. var lineStr = [];
  8499. var lineOpen = false;
  8500. var W = 10;
  8501. var H = 10;
  8502. 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="');
  8503. var newSeq = false;
  8504. var min = {
  8505. x: null,
  8506. y: null
  8507. };
  8508. var max = {
  8509. x: null,
  8510. y: null
  8511. };
  8512. for (var i = 0; i < this.currentPath_.length; i++) {
  8513. var p = this.currentPath_[i];
  8514. var c;
  8515. switch (p.type) {
  8516. case 'moveTo':
  8517. c = p;
  8518. lineStr.push(' m ', mr(p.x), ',', mr(p.y));
  8519. break;
  8520. case 'lineTo':
  8521. lineStr.push(' l ', mr(p.x), ',', mr(p.y));
  8522. break;
  8523. case 'close':
  8524. lineStr.push(' x ');
  8525. p = null;
  8526. break;
  8527. case 'bezierCurveTo':
  8528. lineStr.push(' c ', mr(p.cp1x), ',', mr(p.cp1y), ',', mr(p.cp2x), ',', mr(p.cp2y), ',', mr(p.x), ',', mr(p.y));
  8529. break;
  8530. case 'at':
  8531. case 'wa':
  8532. 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));
  8533. break;
  8534. }
  8535. if (p) {
  8536. if (min.x == null || p.x < min.x) {
  8537. min.x = p.x;
  8538. }
  8539. if (max.x == null || p.x > max.x) {
  8540. max.x = p.x;
  8541. }
  8542. if (min.y == null || p.y < min.y) {
  8543. min.y = p.y;
  8544. }
  8545. if (max.y == null || p.y > max.y) {
  8546. max.y = p.y;
  8547. }
  8548. }
  8549. }
  8550. lineStr.push(' ">');
  8551. if (!aFill) {
  8552. appendStroke(this, lineStr);
  8553. } else {
  8554. appendFill(this, lineStr, min, max);
  8555. }
  8556. lineStr.push('</g_vml_:shape>');
  8557. this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  8558. };
  8559. function appendStroke(ctx, lineStr) {
  8560. var a = processStyle(ctx.strokeStyle);
  8561. var color = a.color;
  8562. var opacity = a.alpha * ctx.globalAlpha;
  8563. var lineWidth = ctx.lineScale_ * ctx.lineWidth;
  8564. if (lineWidth < 1) {
  8565. opacity *= lineWidth;
  8566. }
  8567. lineStr.push('<g_vml_:stroke', ' opacity="', opacity, '"', ' joinstyle="', ctx.lineJoin, '"', ' miterlimit="', ctx.miterLimit, '"', ' endcap="', processLineCap(ctx.lineCap), '"', ' weight="', lineWidth, 'px"', ' color="', color, '" />');
  8568. }
  8569. function appendFill(ctx, lineStr, min, max) {
  8570. var fillStyle = ctx.fillStyle;
  8571. var arcScaleX = ctx.scaleX_;
  8572. var arcScaleY = ctx.scaleY_;
  8573. var width = max.x - min.x;
  8574. var height = max.y - min.y;
  8575. if (fillStyle instanceof CanvasGradient_) {
  8576. var angle = 0;
  8577. var focus = {
  8578. x: 0,
  8579. y: 0
  8580. };
  8581. var shift = 0;
  8582. var expansion = 1;
  8583. if (fillStyle.type_ == 'gradient') {
  8584. var x0 = fillStyle.x0_ / arcScaleX;
  8585. var y0 = fillStyle.y0_ / arcScaleY;
  8586. var x1 = fillStyle.x1_ / arcScaleX;
  8587. var y1 = fillStyle.y1_ / arcScaleY;
  8588. var p0 = getCoords(ctx, x0, y0);
  8589. var p1 = getCoords(ctx, x1, y1);
  8590. var dx = p1.x - p0.x;
  8591. var dy = p1.y - p0.y;
  8592. angle = Math.atan2(dx, dy) * 180 / Math.PI;
  8593. if (angle < 0) {
  8594. angle += 360;
  8595. }
  8596. if (angle < 0.000001) {
  8597. angle = 0;
  8598. }
  8599. } else {
  8600. var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
  8601. focus = {
  8602. x: (p0.x - min.x) / width,
  8603. y: (p0.y - min.y) / height
  8604. };
  8605. width /= arcScaleX * Z;
  8606. height /= arcScaleY * Z;
  8607. var dimension = m.max(width, height);
  8608. shift = 2 * fillStyle.r0_ / dimension;
  8609. expansion = 2 * fillStyle.r1_ / dimension - shift;
  8610. }
  8611. var stops = fillStyle.colors_;
  8612. stops.sort(function (cs1, cs2) {
  8613. return cs1.offset - cs2.offset;
  8614. });
  8615. var length = stops.length;
  8616. var color1 = stops[0].color;
  8617. var color2 = stops[length - 1].color;
  8618. var opacity1 = stops[0].alpha * ctx.globalAlpha;
  8619. var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;
  8620. var colors = [];
  8621. for (var i = 0; i < length; i++) {
  8622. var stop = stops[i];
  8623. colors.push(stop.offset * expansion + shift + ' ' + stop.color);
  8624. }
  8625. 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, '" />');
  8626. } else if (fillStyle instanceof CanvasPattern_) {
  8627. if (width && height) {
  8628. var deltaLeft = -min.x;
  8629. var deltaTop = -min.y;
  8630. lineStr.push('<g_vml_:fill', ' position="', deltaLeft / width * arcScaleX * arcScaleX, ',', deltaTop / height * arcScaleY * arcScaleY, '"', ' type="tile"', ' src="', fillStyle.src_, '" />');
  8631. }
  8632. } else {
  8633. var a = processStyle(ctx.fillStyle);
  8634. var color = a.color;
  8635. var opacity = a.alpha * ctx.globalAlpha;
  8636. lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, '" />');
  8637. }
  8638. }
  8639. contextPrototype.fill = function () {
  8640. this.stroke(true);
  8641. };
  8642. contextPrototype.closePath = function () {
  8643. this.currentPath_.push({ type: 'close' });
  8644. };
  8645. function getCoords(ctx, aX, aY) {
  8646. var m = ctx.m_;
  8647. return {
  8648. x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
  8649. y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
  8650. };
  8651. }
  8652. ;
  8653. contextPrototype.save = function () {
  8654. var o = {};
  8655. copyState(this, o);
  8656. this.aStack_.push(o);
  8657. this.mStack_.push(this.m_);
  8658. this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
  8659. };
  8660. contextPrototype.restore = function () {
  8661. if (this.aStack_.length) {
  8662. copyState(this.aStack_.pop(), this);
  8663. this.m_ = this.mStack_.pop();
  8664. }
  8665. };
  8666. function matrixIsFinite(m) {
  8667. 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]);
  8668. }
  8669. function setM(ctx, m, updateLineScale) {
  8670. if (!matrixIsFinite(m)) {
  8671. return;
  8672. }
  8673. ctx.m_ = m;
  8674. ctx.scaleX_ = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
  8675. ctx.scaleY_ = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
  8676. if (updateLineScale) {
  8677. var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
  8678. ctx.lineScale_ = sqrt(abs(det));
  8679. }
  8680. }
  8681. contextPrototype.translate = function (aX, aY) {
  8682. var m1 = [
  8683. [
  8684. 1,
  8685. 0,
  8686. 0
  8687. ],
  8688. [
  8689. 0,
  8690. 1,
  8691. 0
  8692. ],
  8693. [
  8694. aX,
  8695. aY,
  8696. 1
  8697. ]
  8698. ];
  8699. setM(this, matrixMultiply(m1, this.m_), false);
  8700. };
  8701. contextPrototype.rotate = function (aRot) {
  8702. var c = mc(aRot);
  8703. var s = ms(aRot);
  8704. var m1 = [
  8705. [
  8706. c,
  8707. s,
  8708. 0
  8709. ],
  8710. [
  8711. -s,
  8712. c,
  8713. 0
  8714. ],
  8715. [
  8716. 0,
  8717. 0,
  8718. 1
  8719. ]
  8720. ];
  8721. setM(this, matrixMultiply(m1, this.m_), false);
  8722. };
  8723. contextPrototype.scale = function (aX, aY) {
  8724. var m1 = [
  8725. [
  8726. aX,
  8727. 0,
  8728. 0
  8729. ],
  8730. [
  8731. 0,
  8732. aY,
  8733. 0
  8734. ],
  8735. [
  8736. 0,
  8737. 0,
  8738. 1
  8739. ]
  8740. ];
  8741. setM(this, matrixMultiply(m1, this.m_), true);
  8742. };
  8743. contextPrototype.transform = function (m11, m12, m21, m22, dx, dy) {
  8744. var m1 = [
  8745. [
  8746. m11,
  8747. m12,
  8748. 0
  8749. ],
  8750. [
  8751. m21,
  8752. m22,
  8753. 0
  8754. ],
  8755. [
  8756. dx,
  8757. dy,
  8758. 1
  8759. ]
  8760. ];
  8761. setM(this, matrixMultiply(m1, this.m_), true);
  8762. };
  8763. contextPrototype.setTransform = function (m11, m12, m21, m22, dx, dy) {
  8764. var m = [
  8765. [
  8766. m11,
  8767. m12,
  8768. 0
  8769. ],
  8770. [
  8771. m21,
  8772. m22,
  8773. 0
  8774. ],
  8775. [
  8776. dx,
  8777. dy,
  8778. 1
  8779. ]
  8780. ];
  8781. setM(this, m, true);
  8782. };
  8783. contextPrototype.drawText_ = function (text, x, y, maxWidth, stroke) {
  8784. var m = this.m_, delta = 1000, left = 0, right = delta, offset = {
  8785. x: 0,
  8786. y: 0
  8787. }, lineStr = [];
  8788. var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_);
  8789. var fontStyleString = buildStyle(fontStyle);
  8790. var elementStyle = this.element_.currentStyle;
  8791. var textAlign = this.textAlign.toLowerCase();
  8792. switch (textAlign) {
  8793. case 'left':
  8794. case 'center':
  8795. case 'right':
  8796. break;
  8797. case 'end':
  8798. textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
  8799. break;
  8800. case 'start':
  8801. textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
  8802. break;
  8803. default:
  8804. textAlign = 'left';
  8805. }
  8806. switch (this.textBaseline) {
  8807. case 'hanging':
  8808. case 'top':
  8809. offset.y = fontStyle.size / 1.75;
  8810. break;
  8811. case 'middle':
  8812. break;
  8813. default:
  8814. case null:
  8815. case 'alphabetic':
  8816. case 'ideographic':
  8817. case 'bottom':
  8818. offset.y = -fontStyle.size / 2.25;
  8819. break;
  8820. }
  8821. switch (textAlign) {
  8822. case 'right':
  8823. left = delta;
  8824. right = 0.05;
  8825. break;
  8826. case 'center':
  8827. left = right = delta / 2;
  8828. break;
  8829. }
  8830. var d = getCoords(this, x + offset.x, y + offset.y);
  8831. 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;">');
  8832. if (stroke) {
  8833. appendStroke(this, lineStr);
  8834. } else {
  8835. appendFill(this, lineStr, {
  8836. x: -left,
  8837. y: 0
  8838. }, {
  8839. x: right,
  8840. y: fontStyle.size
  8841. });
  8842. }
  8843. var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';
  8844. var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);
  8845. 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>');
  8846. this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  8847. };
  8848. contextPrototype.fillText = function (text, x, y, maxWidth) {
  8849. this.drawText_(text, x, y, maxWidth, false);
  8850. };
  8851. contextPrototype.strokeText = function (text, x, y, maxWidth) {
  8852. this.drawText_(text, x, y, maxWidth, true);
  8853. };
  8854. contextPrototype.measureText = function (text) {
  8855. if (!this.textMeasureEl_) {
  8856. var s = '<span style="position:absolute;' + 'top:-20000px;left:0;padding:0;margin:0;border:none;' + 'white-space:pre;"></span>';
  8857. this.element_.insertAdjacentHTML('beforeEnd', s);
  8858. this.textMeasureEl_ = this.element_.lastChild;
  8859. }
  8860. var doc = this.element_.ownerDocument;
  8861. this.textMeasureEl_.innerHTML = '';
  8862. try {
  8863. this.textMeasureEl_.style.font = this.font;
  8864. } catch (ex) {
  8865. }
  8866. this.textMeasureEl_.appendChild(doc.createTextNode(text));
  8867. return { width: this.textMeasureEl_.offsetWidth };
  8868. };
  8869. contextPrototype.clip = function () {
  8870. };
  8871. contextPrototype.arcTo = function () {
  8872. };
  8873. contextPrototype.createPattern = function (image, repetition) {
  8874. return new CanvasPattern_(image, repetition);
  8875. };
  8876. function CanvasGradient_(aType) {
  8877. this.type_ = aType;
  8878. this.x0_ = 0;
  8879. this.y0_ = 0;
  8880. this.r0_ = 0;
  8881. this.x1_ = 0;
  8882. this.y1_ = 0;
  8883. this.r1_ = 0;
  8884. this.colors_ = [];
  8885. }
  8886. CanvasGradient_.prototype.addColorStop = function (aOffset, aColor) {
  8887. aColor = processStyle(aColor);
  8888. this.colors_.push({
  8889. offset: aOffset,
  8890. color: aColor.color,
  8891. alpha: aColor.alpha
  8892. });
  8893. };
  8894. function CanvasPattern_(image, repetition) {
  8895. assertImageIsValid(image);
  8896. switch (repetition) {
  8897. case 'repeat':
  8898. case null:
  8899. case '':
  8900. this.repetition_ = 'repeat';
  8901. break;
  8902. case 'repeat-x':
  8903. case 'repeat-y':
  8904. case 'no-repeat':
  8905. this.repetition_ = repetition;
  8906. break;
  8907. default:
  8908. throwException('SYNTAX_ERR');
  8909. }
  8910. this.src_ = image.src;
  8911. this.width_ = image.width;
  8912. this.height_ = image.height;
  8913. }
  8914. function throwException(s) {
  8915. throw new DOMException_(s);
  8916. }
  8917. function assertImageIsValid(img) {
  8918. if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
  8919. throwException('TYPE_MISMATCH_ERR');
  8920. }
  8921. if (img.readyState != 'complete') {
  8922. throwException('INVALID_STATE_ERR');
  8923. }
  8924. }
  8925. function DOMException_(s) {
  8926. this.code = this[s];
  8927. this.message = s + ': DOM Exception ' + this.code;
  8928. }
  8929. var p = DOMException_.prototype = new Error();
  8930. p.INDEX_SIZE_ERR = 1;
  8931. p.DOMSTRING_SIZE_ERR = 2;
  8932. p.HIERARCHY_REQUEST_ERR = 3;
  8933. p.WRONG_DOCUMENT_ERR = 4;
  8934. p.INVALID_CHARACTER_ERR = 5;
  8935. p.NO_DATA_ALLOWED_ERR = 6;
  8936. p.NO_MODIFICATION_ALLOWED_ERR = 7;
  8937. p.NOT_FOUND_ERR = 8;
  8938. p.NOT_SUPPORTED_ERR = 9;
  8939. p.INUSE_ATTRIBUTE_ERR = 10;
  8940. p.INVALID_STATE_ERR = 11;
  8941. p.SYNTAX_ERR = 12;
  8942. p.INVALID_MODIFICATION_ERR = 13;
  8943. p.NAMESPACE_ERR = 14;
  8944. p.INVALID_ACCESS_ERR = 15;
  8945. p.VALIDATION_ERR = 16;
  8946. p.TYPE_MISMATCH_ERR = 17;
  8947. G_vmlCanvasManager = G_vmlCanvasManager_;
  8948. CanvasRenderingContext2D = CanvasRenderingContext2D_;
  8949. CanvasGradient = CanvasGradient_;
  8950. CanvasPattern = CanvasPattern_;
  8951. DOMException = DOMException_;
  8952. }());
  8953. } else {
  8954. G_vmlCanvasManager = false;
  8955. }
  8956. return G_vmlCanvasManager;
  8957. });define('zrender/mixin/Eventful', ['require'], function (require) {
  8958. var Eventful = function () {
  8959. this._handlers = {};
  8960. };
  8961. Eventful.prototype.one = function (event, handler, context) {
  8962. var _h = this._handlers;
  8963. if (!handler || !event) {
  8964. return this;
  8965. }
  8966. if (!_h[event]) {
  8967. _h[event] = [];
  8968. }
  8969. _h[event].push({
  8970. h: handler,
  8971. one: true,
  8972. ctx: context || this
  8973. });
  8974. return this;
  8975. };
  8976. Eventful.prototype.bind = function (event, handler, context) {
  8977. var _h = this._handlers;
  8978. if (!handler || !event) {
  8979. return this;
  8980. }
  8981. if (!_h[event]) {
  8982. _h[event] = [];
  8983. }
  8984. _h[event].push({
  8985. h: handler,
  8986. one: false,
  8987. ctx: context || this
  8988. });
  8989. return this;
  8990. };
  8991. Eventful.prototype.unbind = function (event, handler) {
  8992. var _h = this._handlers;
  8993. if (!event) {
  8994. this._handlers = {};
  8995. return this;
  8996. }
  8997. if (handler) {
  8998. if (_h[event]) {
  8999. var newList = [];
  9000. for (var i = 0, l = _h[event].length; i < l; i++) {
  9001. if (_h[event][i]['h'] != handler) {
  9002. newList.push(_h[event][i]);
  9003. }
  9004. }
  9005. _h[event] = newList;
  9006. }
  9007. if (_h[event] && _h[event].length === 0) {
  9008. delete _h[event];
  9009. }
  9010. } else {
  9011. delete _h[event];
  9012. }
  9013. return this;
  9014. };
  9015. Eventful.prototype.dispatch = function (type) {
  9016. if (this._handlers[type]) {
  9017. var args = arguments;
  9018. var argLen = args.length;
  9019. if (argLen > 3) {
  9020. args = Array.prototype.slice.call(args, 1);
  9021. }
  9022. var _h = this._handlers[type];
  9023. var len = _h.length;
  9024. for (var i = 0; i < len;) {
  9025. switch (argLen) {
  9026. case 1:
  9027. _h[i]['h'].call(_h[i]['ctx']);
  9028. break;
  9029. case 2:
  9030. _h[i]['h'].call(_h[i]['ctx'], args[1]);
  9031. break;
  9032. case 3:
  9033. _h[i]['h'].call(_h[i]['ctx'], args[1], args[2]);
  9034. break;
  9035. default:
  9036. _h[i]['h'].apply(_h[i]['ctx'], args);
  9037. break;
  9038. }
  9039. if (_h[i]['one']) {
  9040. _h.splice(i, 1);
  9041. len--;
  9042. } else {
  9043. i++;
  9044. }
  9045. }
  9046. }
  9047. return this;
  9048. };
  9049. Eventful.prototype.dispatchWithContext = function (type) {
  9050. if (this._handlers[type]) {
  9051. var args = arguments;
  9052. var argLen = args.length;
  9053. if (argLen > 4) {
  9054. args = Array.prototype.slice.call(args, 1, args.length - 1);
  9055. }
  9056. var ctx = args[args.length - 1];
  9057. var _h = this._handlers[type];
  9058. var len = _h.length;
  9059. for (var i = 0; i < len;) {
  9060. switch (argLen) {
  9061. case 1:
  9062. _h[i]['h'].call(ctx);
  9063. break;
  9064. case 2:
  9065. _h[i]['h'].call(ctx, args[1]);
  9066. break;
  9067. case 3:
  9068. _h[i]['h'].call(ctx, args[1], args[2]);
  9069. break;
  9070. default:
  9071. _h[i]['h'].apply(ctx, args);
  9072. break;
  9073. }
  9074. if (_h[i]['one']) {
  9075. _h.splice(i, 1);
  9076. len--;
  9077. } else {
  9078. i++;
  9079. }
  9080. }
  9081. }
  9082. return this;
  9083. };
  9084. return Eventful;
  9085. });define('zrender/tool/log', [
  9086. 'require',
  9087. '../config'
  9088. ], function (require) {
  9089. var config = require('../config');
  9090. return function () {
  9091. if (config.debugMode === 0) {
  9092. return;
  9093. } else if (config.debugMode == 1) {
  9094. for (var k in arguments) {
  9095. throw new Error(arguments[k]);
  9096. }
  9097. } else if (config.debugMode > 1) {
  9098. for (var k in arguments) {
  9099. console.log(arguments[k]);
  9100. }
  9101. }
  9102. };
  9103. });define('zrender/tool/guid', [], function () {
  9104. var idStart = 2311;
  9105. return function () {
  9106. return 'zrender__' + idStart++;
  9107. };
  9108. });define('zrender/Handler', [
  9109. 'require',
  9110. './config',
  9111. './tool/env',
  9112. './tool/event',
  9113. './tool/util',
  9114. './tool/vector',
  9115. './tool/matrix',
  9116. './mixin/Eventful'
  9117. ], function (require) {
  9118. 'use strict';
  9119. var config = require('./config');
  9120. var env = require('./tool/env');
  9121. var eventTool = require('./tool/event');
  9122. var util = require('./tool/util');
  9123. var vec2 = require('./tool/vector');
  9124. var mat2d = require('./tool/matrix');
  9125. var EVENT = config.EVENT;
  9126. var Eventful = require('./mixin/Eventful');
  9127. var domHandlerNames = [
  9128. 'resize',
  9129. 'click',
  9130. 'dblclick',
  9131. 'mousewheel',
  9132. 'mousemove',
  9133. 'mouseout',
  9134. 'mouseup',
  9135. 'mousedown',
  9136. 'touchstart',
  9137. 'touchend',
  9138. 'touchmove'
  9139. ];
  9140. var domHandlers = {
  9141. resize: function (event) {
  9142. event = event || window.event;
  9143. this._lastHover = null;
  9144. this._isMouseDown = 0;
  9145. this.dispatch(EVENT.RESIZE, event);
  9146. },
  9147. click: function (event) {
  9148. event = this._zrenderEventFixed(event);
  9149. var _lastHover = this._lastHover;
  9150. if (_lastHover && _lastHover.clickable || !_lastHover) {
  9151. if (this._clickThreshold < 5) {
  9152. this._dispatchAgency(_lastHover, EVENT.CLICK, event);
  9153. }
  9154. }
  9155. this._mousemoveHandler(event);
  9156. },
  9157. dblclick: function (event) {
  9158. event = event || window.event;
  9159. event = this._zrenderEventFixed(event);
  9160. var _lastHover = this._lastHover;
  9161. if (_lastHover && _lastHover.clickable || !_lastHover) {
  9162. if (this._clickThreshold < 5) {
  9163. this._dispatchAgency(_lastHover, EVENT.DBLCLICK, event);
  9164. }
  9165. }
  9166. this._mousemoveHandler(event);
  9167. },
  9168. mousewheel: function (event) {
  9169. event = this._zrenderEventFixed(event);
  9170. var delta = event.wheelDelta || -event.detail;
  9171. var scale = delta > 0 ? 1.1 : 1 / 1.1;
  9172. var needsRefresh = false;
  9173. var mouseX = this._mouseX;
  9174. var mouseY = this._mouseY;
  9175. this.painter.eachBuildinLayer(function (layer) {
  9176. var pos = layer.position;
  9177. if (layer.zoomable) {
  9178. layer.__zoom = layer.__zoom || 1;
  9179. var newZoom = layer.__zoom;
  9180. newZoom *= scale;
  9181. newZoom = Math.max(Math.min(layer.maxZoom, newZoom), layer.minZoom);
  9182. scale = newZoom / layer.__zoom;
  9183. layer.__zoom = newZoom;
  9184. pos[0] -= (mouseX - pos[0]) * (scale - 1);
  9185. pos[1] -= (mouseY - pos[1]) * (scale - 1);
  9186. layer.scale[0] *= scale;
  9187. layer.scale[1] *= scale;
  9188. layer.dirty = true;
  9189. needsRefresh = true;
  9190. eventTool.stop(event);
  9191. }
  9192. });
  9193. if (needsRefresh) {
  9194. this.painter.refresh();
  9195. }
  9196. this._dispatchAgency(this._lastHover, EVENT.MOUSEWHEEL, event);
  9197. this._mousemoveHandler(event);
  9198. },
  9199. mousemove: function (event) {
  9200. if (this.painter.isLoading()) {
  9201. return;
  9202. }
  9203. event = this._zrenderEventFixed(event);
  9204. this._lastX = this._mouseX;
  9205. this._lastY = this._mouseY;
  9206. this._mouseX = eventTool.getX(event);
  9207. this._mouseY = eventTool.getY(event);
  9208. var dx = this._mouseX - this._lastX;
  9209. var dy = this._mouseY - this._lastY;
  9210. this._processDragStart(event);
  9211. this._hasfound = 0;
  9212. this._event = event;
  9213. this._iterateAndFindHover();
  9214. if (!this._hasfound) {
  9215. if (!this._draggingTarget || this._lastHover && this._lastHover != this._draggingTarget) {
  9216. this._processOutShape(event);
  9217. this._processDragLeave(event);
  9218. }
  9219. this._lastHover = null;
  9220. this.storage.delHover();
  9221. this.painter.clearHover();
  9222. }
  9223. var cursor = 'default';
  9224. if (this._draggingTarget) {
  9225. this.storage.drift(this._draggingTarget.id, dx, dy);
  9226. this._draggingTarget.modSelf();
  9227. this.storage.addHover(this._draggingTarget);
  9228. this._clickThreshold++;
  9229. } else if (this._isMouseDown) {
  9230. var needsRefresh = false;
  9231. this.painter.eachBuildinLayer(function (layer) {
  9232. if (layer.panable) {
  9233. cursor = 'move';
  9234. layer.position[0] += dx;
  9235. layer.position[1] += dy;
  9236. needsRefresh = true;
  9237. layer.dirty = true;
  9238. }
  9239. });
  9240. if (needsRefresh) {
  9241. this.painter.refresh();
  9242. }
  9243. }
  9244. if (this._draggingTarget || this._hasfound && this._lastHover.draggable) {
  9245. cursor = 'move';
  9246. } else if (this._hasfound && this._lastHover.clickable) {
  9247. cursor = 'pointer';
  9248. }
  9249. this.root.style.cursor = cursor;
  9250. this._dispatchAgency(this._lastHover, EVENT.MOUSEMOVE, event);
  9251. if (this._draggingTarget || this._hasfound || this.storage.hasHoverShape()) {
  9252. this.painter.refreshHover();
  9253. }
  9254. },
  9255. mouseout: function (event) {
  9256. event = this._zrenderEventFixed(event);
  9257. var element = event.toElement || event.relatedTarget;
  9258. if (element != this.root) {
  9259. while (element && element.nodeType != 9) {
  9260. if (element == this.root) {
  9261. this._mousemoveHandler(event);
  9262. return;
  9263. }
  9264. element = element.parentNode;
  9265. }
  9266. }
  9267. event.zrenderX = this._lastX;
  9268. event.zrenderY = this._lastY;
  9269. this.root.style.cursor = 'default';
  9270. this._isMouseDown = 0;
  9271. this._processOutShape(event);
  9272. this._processDrop(event);
  9273. this._processDragEnd(event);
  9274. if (!this.painter.isLoading()) {
  9275. this.painter.refreshHover();
  9276. }
  9277. this.dispatch(EVENT.GLOBALOUT, event);
  9278. },
  9279. mousedown: function (event) {
  9280. this._clickThreshold = 0;
  9281. if (this._lastDownButton == 2) {
  9282. this._lastDownButton = event.button;
  9283. this._mouseDownTarget = null;
  9284. return;
  9285. }
  9286. this._lastMouseDownMoment = new Date();
  9287. event = this._zrenderEventFixed(event);
  9288. this._isMouseDown = 1;
  9289. this._mouseDownTarget = this._lastHover;
  9290. this._dispatchAgency(this._lastHover, EVENT.MOUSEDOWN, event);
  9291. this._lastDownButton = event.button;
  9292. },
  9293. mouseup: function (event) {
  9294. event = this._zrenderEventFixed(event);
  9295. this.root.style.cursor = 'default';
  9296. this._isMouseDown = 0;
  9297. this._mouseDownTarget = null;
  9298. this._dispatchAgency(this._lastHover, EVENT.MOUSEUP, event);
  9299. this._processDrop(event);
  9300. this._processDragEnd(event);
  9301. },
  9302. touchstart: function (event) {
  9303. event = this._zrenderEventFixed(event, true);
  9304. this._lastTouchMoment = new Date();
  9305. this._mobileFindFixed(event);
  9306. this._mousedownHandler(event);
  9307. },
  9308. touchmove: function (event) {
  9309. event = this._zrenderEventFixed(event, true);
  9310. this._mousemoveHandler(event);
  9311. if (this._isDragging) {
  9312. eventTool.stop(event);
  9313. }
  9314. },
  9315. touchend: function (event) {
  9316. event = this._zrenderEventFixed(event, true);
  9317. this._mouseupHandler(event);
  9318. var now = new Date();
  9319. if (now - this._lastTouchMoment < EVENT.touchClickDelay) {
  9320. this._mobileFindFixed(event);
  9321. this._clickHandler(event);
  9322. if (now - this._lastClickMoment < EVENT.touchClickDelay / 2) {
  9323. this._dblclickHandler(event);
  9324. if (this._lastHover && this._lastHover.clickable) {
  9325. eventTool.stop(event);
  9326. }
  9327. }
  9328. this._lastClickMoment = now;
  9329. }
  9330. this.painter.clearHover();
  9331. }
  9332. };
  9333. function bind1Arg(handler, context) {
  9334. return function (e) {
  9335. return handler.call(context, e);
  9336. };
  9337. }
  9338. function bind3Arg(handler, context) {
  9339. return function (arg1, arg2, arg3) {
  9340. return handler.call(context, arg1, arg2, arg3);
  9341. };
  9342. }
  9343. function initDomHandler(instance) {
  9344. var len = domHandlerNames.length;
  9345. while (len--) {
  9346. var name = domHandlerNames[len];
  9347. instance['_' + name + 'Handler'] = bind1Arg(domHandlers[name], instance);
  9348. }
  9349. }
  9350. var Handler = function (root, storage, painter) {
  9351. Eventful.call(this);
  9352. this.root = root;
  9353. this.storage = storage;
  9354. this.painter = painter;
  9355. this._lastX = this._lastY = this._mouseX = this._mouseY = 0;
  9356. this._findHover = bind3Arg(findHover, this);
  9357. this._domHover = painter.getDomHover();
  9358. initDomHandler(this);
  9359. if (window.addEventListener) {
  9360. window.addEventListener('resize', this._resizeHandler);
  9361. if (env.os.tablet || env.os.phone) {
  9362. root.addEventListener('touchstart', this._touchstartHandler);
  9363. root.addEventListener('touchmove', this._touchmoveHandler);
  9364. root.addEventListener('touchend', this._touchendHandler);
  9365. } else {
  9366. root.addEventListener('click', this._clickHandler);
  9367. root.addEventListener('dblclick', this._dblclickHandler);
  9368. root.addEventListener('mousewheel', this._mousewheelHandler);
  9369. root.addEventListener('mousemove', this._mousemoveHandler);
  9370. root.addEventListener('mousedown', this._mousedownHandler);
  9371. root.addEventListener('mouseup', this._mouseupHandler);
  9372. }
  9373. root.addEventListener('DOMMouseScroll', this._mousewheelHandler);
  9374. root.addEventListener('mouseout', this._mouseoutHandler);
  9375. } else {
  9376. window.attachEvent('onresize', this._resizeHandler);
  9377. root.attachEvent('onclick', this._clickHandler);
  9378. root.ondblclick = this._dblclickHandler;
  9379. root.attachEvent('onmousewheel', this._mousewheelHandler);
  9380. root.attachEvent('onmousemove', this._mousemoveHandler);
  9381. root.attachEvent('onmouseout', this._mouseoutHandler);
  9382. root.attachEvent('onmousedown', this._mousedownHandler);
  9383. root.attachEvent('onmouseup', this._mouseupHandler);
  9384. }
  9385. };
  9386. Handler.prototype.on = function (eventName, handler, context) {
  9387. this.bind(eventName, handler, context);
  9388. return this;
  9389. };
  9390. Handler.prototype.un = function (eventName, handler) {
  9391. this.unbind(eventName, handler);
  9392. return this;
  9393. };
  9394. Handler.prototype.trigger = function (eventName, eventArgs) {
  9395. switch (eventName) {
  9396. case EVENT.RESIZE:
  9397. case EVENT.CLICK:
  9398. case EVENT.DBLCLICK:
  9399. case EVENT.MOUSEWHEEL:
  9400. case EVENT.MOUSEMOVE:
  9401. case EVENT.MOUSEDOWN:
  9402. case EVENT.MOUSEUP:
  9403. case EVENT.MOUSEOUT:
  9404. this['_' + eventName + 'Handler'](eventArgs);
  9405. break;
  9406. }
  9407. };
  9408. Handler.prototype.dispose = function () {
  9409. var root = this.root;
  9410. if (window.removeEventListener) {
  9411. window.removeEventListener('resize', this._resizeHandler);
  9412. if (env.os.tablet || env.os.phone) {
  9413. root.removeEventListener('touchstart', this._touchstartHandler);
  9414. root.removeEventListener('touchmove', this._touchmoveHandler);
  9415. root.removeEventListener('touchend', this._touchendHandler);
  9416. } else {
  9417. root.removeEventListener('click', this._clickHandler);
  9418. root.removeEventListener('dblclick', this._dblclickHandler);
  9419. root.removeEventListener('mousewheel', this._mousewheelHandler);
  9420. root.removeEventListener('mousemove', this._mousemoveHandler);
  9421. root.removeEventListener('mousedown', this._mousedownHandler);
  9422. root.removeEventListener('mouseup', this._mouseupHandler);
  9423. }
  9424. root.removeEventListener('DOMMouseScroll', this._mousewheelHandler);
  9425. root.removeEventListener('mouseout', this._mouseoutHandler);
  9426. } else {
  9427. window.detachEvent('onresize', this._resizeHandler);
  9428. root.detachEvent('onclick', this._clickHandler);
  9429. root.detachEvent('dblclick', this._dblclickHandler);
  9430. root.detachEvent('onmousewheel', this._mousewheelHandler);
  9431. root.detachEvent('onmousemove', this._mousemoveHandler);
  9432. root.detachEvent('onmouseout', this._mouseoutHandler);
  9433. root.detachEvent('onmousedown', this._mousedownHandler);
  9434. root.detachEvent('onmouseup', this._mouseupHandler);
  9435. }
  9436. this.root = this._domHover = this.storage = this.painter = null;
  9437. this.un();
  9438. };
  9439. Handler.prototype._processDragStart = function (event) {
  9440. var _lastHover = this._lastHover;
  9441. if (this._isMouseDown && _lastHover && _lastHover.draggable && !this._draggingTarget && this._mouseDownTarget == _lastHover) {
  9442. if (_lastHover.dragEnableTime && new Date() - this._lastMouseDownMoment < _lastHover.dragEnableTime) {
  9443. return;
  9444. }
  9445. var _draggingTarget = _lastHover;
  9446. this._draggingTarget = _draggingTarget;
  9447. this._isDragging = 1;
  9448. _draggingTarget.invisible = true;
  9449. this.storage.mod(_draggingTarget.id);
  9450. this._dispatchAgency(_draggingTarget, EVENT.DRAGSTART, event);
  9451. this.painter.refresh();
  9452. }
  9453. };
  9454. Handler.prototype._processDragEnter = function (event) {
  9455. if (this._draggingTarget) {
  9456. this._dispatchAgency(this._lastHover, EVENT.DRAGENTER, event, this._draggingTarget);
  9457. }
  9458. };
  9459. Handler.prototype._processDragOver = function (event) {
  9460. if (this._draggingTarget) {
  9461. this._dispatchAgency(this._lastHover, EVENT.DRAGOVER, event, this._draggingTarget);
  9462. }
  9463. };
  9464. Handler.prototype._processDragLeave = function (event) {
  9465. if (this._draggingTarget) {
  9466. this._dispatchAgency(this._lastHover, EVENT.DRAGLEAVE, event, this._draggingTarget);
  9467. }
  9468. };
  9469. Handler.prototype._processDrop = function (event) {
  9470. if (this._draggingTarget) {
  9471. this._draggingTarget.invisible = false;
  9472. this.storage.mod(this._draggingTarget.id);
  9473. this.painter.refresh();
  9474. this._dispatchAgency(this._lastHover, EVENT.DROP, event, this._draggingTarget);
  9475. }
  9476. };
  9477. Handler.prototype._processDragEnd = function (event) {
  9478. if (this._draggingTarget) {
  9479. this._dispatchAgency(this._draggingTarget, EVENT.DRAGEND, event);
  9480. this._lastHover = null;
  9481. }
  9482. this._isDragging = 0;
  9483. this._draggingTarget = null;
  9484. };
  9485. Handler.prototype._processOverShape = function (event) {
  9486. this._dispatchAgency(this._lastHover, EVENT.MOUSEOVER, event);
  9487. };
  9488. Handler.prototype._processOutShape = function (event) {
  9489. this._dispatchAgency(this._lastHover, EVENT.MOUSEOUT, event);
  9490. };
  9491. Handler.prototype._dispatchAgency = function (targetShape, eventName, event, draggedShape) {
  9492. var eventHandler = 'on' + eventName;
  9493. var eventPacket = {
  9494. type: eventName,
  9495. event: event,
  9496. target: targetShape,
  9497. cancelBubble: false
  9498. };
  9499. var el = targetShape;
  9500. if (draggedShape) {
  9501. eventPacket.dragged = draggedShape;
  9502. }
  9503. while (el) {
  9504. el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler](eventPacket));
  9505. el.dispatch(eventName, eventPacket);
  9506. el = el.parent;
  9507. if (eventPacket.cancelBubble) {
  9508. break;
  9509. }
  9510. }
  9511. if (targetShape) {
  9512. if (!eventPacket.cancelBubble) {
  9513. this.dispatch(eventName, eventPacket);
  9514. }
  9515. } else if (!draggedShape) {
  9516. var eveObj = {
  9517. type: eventName,
  9518. event: event
  9519. };
  9520. this.dispatch(eventName, eveObj);
  9521. this.painter.eachOtherLayer(function (layer) {
  9522. if (typeof layer[eventHandler] == 'function') {
  9523. layer[eventHandler](eveObj);
  9524. }
  9525. if (layer.dispatch) {
  9526. layer.dispatch(eventName, eveObj);
  9527. }
  9528. });
  9529. }
  9530. };
  9531. Handler.prototype._iterateAndFindHover = function () {
  9532. var invTransform = mat2d.create();
  9533. return function () {
  9534. var list = this.storage.getShapeList();
  9535. var currentZLevel;
  9536. var currentLayer;
  9537. var tmp = [
  9538. 0,
  9539. 0
  9540. ];
  9541. for (var i = list.length - 1; i >= 0; i--) {
  9542. var shape = list[i];
  9543. if (currentZLevel !== shape.zlevel) {
  9544. currentLayer = this.painter.getLayer(shape.zlevel, currentLayer);
  9545. tmp[0] = this._mouseX;
  9546. tmp[1] = this._mouseY;
  9547. if (currentLayer.needTransform) {
  9548. mat2d.invert(invTransform, currentLayer.transform);
  9549. vec2.applyTransform(tmp, tmp, invTransform);
  9550. }
  9551. }
  9552. if (this._findHover(shape, tmp[0], tmp[1])) {
  9553. break;
  9554. }
  9555. }
  9556. };
  9557. }();
  9558. var MOBILE_TOUCH_OFFSETS = [
  9559. { x: 10 },
  9560. { x: -20 },
  9561. {
  9562. x: 10,
  9563. y: 10
  9564. },
  9565. { y: -20 }
  9566. ];
  9567. Handler.prototype._mobileFindFixed = function (event) {
  9568. this._lastHover = null;
  9569. this._mouseX = event.zrenderX;
  9570. this._mouseY = event.zrenderY;
  9571. this._event = event;
  9572. this._iterateAndFindHover();
  9573. for (var i = 0; !this._lastHover && i < MOBILE_TOUCH_OFFSETS.length; i++) {
  9574. var offset = MOBILE_TOUCH_OFFSETS[i];
  9575. offset.x && (this._mouseX += offset.x);
  9576. offset.y && (this._mouseY += offset.y);
  9577. this._iterateAndFindHover();
  9578. }
  9579. if (this._lastHover) {
  9580. event.zrenderX = this._mouseX;
  9581. event.zrenderY = this._mouseY;
  9582. }
  9583. };
  9584. function findHover(shape, x, y) {
  9585. if (this._draggingTarget && this._draggingTarget.id == shape.id || shape.isSilent()) {
  9586. return false;
  9587. }
  9588. var event = this._event;
  9589. if (shape.isCover(x, y)) {
  9590. if (shape.hoverable) {
  9591. this.storage.addHover(shape);
  9592. }
  9593. var p = shape.parent;
  9594. while (p) {
  9595. if (p.clipShape && !p.clipShape.isCover(this._mouseX, this._mouseY)) {
  9596. return false;
  9597. }
  9598. p = p.parent;
  9599. }
  9600. if (this._lastHover != shape) {
  9601. this._processOutShape(event);
  9602. this._processDragLeave(event);
  9603. this._lastHover = shape;
  9604. this._processDragEnter(event);
  9605. }
  9606. this._processOverShape(event);
  9607. this._processDragOver(event);
  9608. this._hasfound = 1;
  9609. return true;
  9610. }
  9611. return false;
  9612. }
  9613. Handler.prototype._zrenderEventFixed = function (event, isTouch) {
  9614. if (event.zrenderFixed) {
  9615. return event;
  9616. }
  9617. if (!isTouch) {
  9618. event = event || window.event;
  9619. var target = event.toElement || event.relatedTarget || event.srcElement || event.target;
  9620. if (target && target != this._domHover) {
  9621. event.zrenderX = (typeof event.offsetX != 'undefined' ? event.offsetX : event.layerX) + target.offsetLeft;
  9622. event.zrenderY = (typeof event.offsetY != 'undefined' ? event.offsetY : event.layerY) + target.offsetTop;
  9623. }
  9624. } else {
  9625. var touch = event.type != 'touchend' ? event.targetTouches[0] : event.changedTouches[0];
  9626. if (touch) {
  9627. var rBounding = this.painter._domRoot.getBoundingClientRect();
  9628. event.zrenderX = touch.clientX - rBounding.left;
  9629. event.zrenderY = touch.clientY - rBounding.top;
  9630. }
  9631. }
  9632. event.zrenderFixed = 1;
  9633. return event;
  9634. };
  9635. util.merge(Handler.prototype, Eventful.prototype, true);
  9636. return Handler;
  9637. });define('zrender/Painter', [
  9638. 'require',
  9639. './config',
  9640. './tool/util',
  9641. './tool/log',
  9642. './loadingEffect/Base',
  9643. './Layer',
  9644. './shape/Image'
  9645. ], function (require) {
  9646. 'use strict';
  9647. var config = require('./config');
  9648. var util = require('./tool/util');
  9649. var log = require('./tool/log');
  9650. var BaseLoadingEffect = require('./loadingEffect/Base');
  9651. var Layer = require('./Layer');
  9652. function returnFalse() {
  9653. return false;
  9654. }
  9655. function doNothing() {
  9656. }
  9657. function isLayerValid(layer) {
  9658. if (!layer) {
  9659. return false;
  9660. }
  9661. if (layer.isBuildin) {
  9662. return true;
  9663. }
  9664. if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {
  9665. return false;
  9666. }
  9667. return true;
  9668. }
  9669. var Painter = function (root, storage) {
  9670. this.root = root;
  9671. root.style['-webkit-tap-highlight-color'] = 'transparent';
  9672. root.style['-webkit-user-select'] = 'none';
  9673. root.style['user-select'] = 'none';
  9674. root.style['-webkit-touch-callout'] = 'none';
  9675. this.storage = storage;
  9676. root.innerHTML = '';
  9677. this._width = this._getWidth();
  9678. this._height = this._getHeight();
  9679. var domRoot = document.createElement('div');
  9680. this._domRoot = domRoot;
  9681. domRoot.style.position = 'relative';
  9682. domRoot.style.overflow = 'hidden';
  9683. domRoot.style.width = this._width + 'px';
  9684. domRoot.style.height = this._height + 'px';
  9685. root.appendChild(domRoot);
  9686. this._layers = {};
  9687. this._zlevelList = [];
  9688. this._layerConfig = {};
  9689. this._loadingEffect = new BaseLoadingEffect({});
  9690. this.shapeToImage = this._createShapeToImageProcessor();
  9691. this._bgDom = document.createElement('div');
  9692. this._bgDom.style.cssText = [
  9693. 'position:absolute;left:0px;top:0px;width:',
  9694. this._width,
  9695. 'px;height:',
  9696. this._height + 'px;',
  9697. '-webkit-user-select:none;user-select;none;',
  9698. '-webkit-touch-callout:none;'
  9699. ].join('');
  9700. this._bgDom.setAttribute('data-zr-dom-id', 'bg');
  9701. domRoot.appendChild(this._bgDom);
  9702. this._bgDom.onselectstart = returnFalse;
  9703. var hoverLayer = new Layer('_zrender_hover_', this);
  9704. this._layers['hover'] = hoverLayer;
  9705. domRoot.appendChild(hoverLayer.dom);
  9706. hoverLayer.initContext();
  9707. hoverLayer.dom.onselectstart = returnFalse;
  9708. hoverLayer.dom.style['-webkit-user-select'] = 'none';
  9709. hoverLayer.dom.style['user-select'] = 'none';
  9710. hoverLayer.dom.style['-webkit-touch-callout'] = 'none';
  9711. this.refreshNextFrame = null;
  9712. };
  9713. Painter.prototype.render = function (callback) {
  9714. if (this.isLoading()) {
  9715. this.hideLoading();
  9716. }
  9717. this.refresh(callback, true);
  9718. return this;
  9719. };
  9720. Painter.prototype.refresh = function (callback, paintAll) {
  9721. var list = this.storage.getShapeList(true);
  9722. this._paintList(list, paintAll);
  9723. for (var i = 0; i < this._zlevelList.length; i++) {
  9724. var z = this._zlevelList[i];
  9725. var layer = this._layers[z];
  9726. if (!layer.isBuildin && layer.refresh) {
  9727. layer.refresh();
  9728. }
  9729. }
  9730. if (typeof callback == 'function') {
  9731. callback();
  9732. }
  9733. return this;
  9734. };
  9735. Painter.prototype._preProcessLayer = function (layer) {
  9736. layer.unusedCount++;
  9737. layer.updateTransform();
  9738. };
  9739. Painter.prototype._postProcessLayer = function (layer) {
  9740. layer.dirty = false;
  9741. if (layer.unusedCount == 1) {
  9742. layer.clear();
  9743. }
  9744. };
  9745. Painter.prototype._paintList = function (list, paintAll) {
  9746. if (typeof paintAll == 'undefined') {
  9747. paintAll = false;
  9748. }
  9749. this._updateLayerStatus(list);
  9750. var currentLayer;
  9751. var currentZLevel;
  9752. var ctx;
  9753. this.eachBuildinLayer(this._preProcessLayer);
  9754. for (var i = 0, l = list.length; i < l; i++) {
  9755. var shape = list[i];
  9756. if (currentZLevel !== shape.zlevel) {
  9757. if (currentLayer) {
  9758. if (currentLayer.needTransform) {
  9759. ctx.restore();
  9760. }
  9761. ctx.flush && ctx.flush();
  9762. }
  9763. currentZLevel = shape.zlevel;
  9764. currentLayer = this.getLayer(currentZLevel);
  9765. if (!currentLayer.isBuildin) {
  9766. log('ZLevel ' + currentZLevel + ' has been used by unkown layer ' + currentLayer.id);
  9767. }
  9768. ctx = currentLayer.ctx;
  9769. currentLayer.unusedCount = 0;
  9770. if (currentLayer.dirty || paintAll) {
  9771. currentLayer.clear();
  9772. }
  9773. if (currentLayer.needTransform) {
  9774. ctx.save();
  9775. currentLayer.setTransform(ctx);
  9776. }
  9777. }
  9778. if ((currentLayer.dirty || paintAll) && !shape.invisible) {
  9779. if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, false)) {
  9780. if (config.catchBrushException) {
  9781. try {
  9782. shape.brush(ctx, false, this.refreshNextFrame);
  9783. } catch (error) {
  9784. log(error, 'brush error of ' + shape.type, shape);
  9785. }
  9786. } else {
  9787. shape.brush(ctx, false, this.refreshNextFrame);
  9788. }
  9789. }
  9790. }
  9791. shape.__dirty = false;
  9792. }
  9793. if (currentLayer) {
  9794. if (currentLayer.needTransform) {
  9795. ctx.restore();
  9796. }
  9797. ctx.flush && ctx.flush();
  9798. }
  9799. this.eachBuildinLayer(this._postProcessLayer);
  9800. };
  9801. Painter.prototype.getLayer = function (zlevel) {
  9802. var layer = this._layers[zlevel];
  9803. if (!layer) {
  9804. layer = new Layer(zlevel, this);
  9805. layer.isBuildin = true;
  9806. if (this._layerConfig[zlevel]) {
  9807. util.merge(layer, this._layerConfig[zlevel], true);
  9808. }
  9809. layer.updateTransform();
  9810. this.insertLayer(zlevel, layer);
  9811. layer.initContext();
  9812. }
  9813. return layer;
  9814. };
  9815. Painter.prototype.insertLayer = function (zlevel, layer) {
  9816. if (this._layers[zlevel]) {
  9817. log('ZLevel ' + zlevel + ' has been used already');
  9818. return;
  9819. }
  9820. if (!isLayerValid(layer)) {
  9821. log('Layer of zlevel ' + zlevel + ' is not valid');
  9822. return;
  9823. }
  9824. var len = this._zlevelList.length;
  9825. var prevLayer = null;
  9826. var i = -1;
  9827. if (len > 0 && zlevel > this._zlevelList[0]) {
  9828. for (i = 0; i < len - 1; i++) {
  9829. if (this._zlevelList[i] < zlevel && this._zlevelList[i + 1] > zlevel) {
  9830. break;
  9831. }
  9832. }
  9833. prevLayer = this._layers[this._zlevelList[i]];
  9834. }
  9835. this._zlevelList.splice(i + 1, 0, zlevel);
  9836. var prevDom = prevLayer ? prevLayer.dom : this._bgDom;
  9837. if (prevDom.nextSibling) {
  9838. prevDom.parentNode.insertBefore(layer.dom, prevDom.nextSibling);
  9839. } else {
  9840. prevDom.parentNode.appendChild(layer.dom);
  9841. }
  9842. this._layers[zlevel] = layer;
  9843. };
  9844. Painter.prototype.eachLayer = function (cb, context) {
  9845. for (var i = 0; i < this._zlevelList.length; i++) {
  9846. var z = this._zlevelList[i];
  9847. cb.call(context, this._layers[z], z);
  9848. }
  9849. };
  9850. Painter.prototype.eachBuildinLayer = function (cb, context) {
  9851. for (var i = 0; i < this._zlevelList.length; i++) {
  9852. var z = this._zlevelList[i];
  9853. var layer = this._layers[z];
  9854. if (layer.isBuildin) {
  9855. cb.call(context, layer, z);
  9856. }
  9857. }
  9858. };
  9859. Painter.prototype.eachOtherLayer = function (cb, context) {
  9860. for (var i = 0; i < this._zlevelList.length; i++) {
  9861. var z = this._zlevelList[i];
  9862. var layer = this._layers[z];
  9863. if (!layer.isBuildin) {
  9864. cb.call(context, layer, z);
  9865. }
  9866. }
  9867. };
  9868. Painter.prototype.getLayers = function () {
  9869. return this._layers;
  9870. };
  9871. Painter.prototype._updateLayerStatus = function (list) {
  9872. var layers = this._layers;
  9873. var elCounts = {};
  9874. this.eachBuildinLayer(function (layer, z) {
  9875. elCounts[z] = layer.elCount;
  9876. layer.elCount = 0;
  9877. });
  9878. for (var i = 0, l = list.length; i < l; i++) {
  9879. var shape = list[i];
  9880. var zlevel = shape.zlevel;
  9881. var layer = layers[zlevel];
  9882. if (layer) {
  9883. layer.elCount++;
  9884. if (layer.dirty) {
  9885. continue;
  9886. }
  9887. layer.dirty = shape.__dirty;
  9888. }
  9889. }
  9890. this.eachBuildinLayer(function (layer, z) {
  9891. if (elCounts[z] !== layer.elCount) {
  9892. layer.dirty = true;
  9893. }
  9894. });
  9895. };
  9896. Painter.prototype.refreshShapes = function (shapeList, callback) {
  9897. for (var i = 0, l = shapeList.length; i < l; i++) {
  9898. var shape = shapeList[i];
  9899. shape.modSelf();
  9900. }
  9901. this.refresh(callback);
  9902. return this;
  9903. };
  9904. Painter.prototype.setLoadingEffect = function (loadingEffect) {
  9905. this._loadingEffect = loadingEffect;
  9906. return this;
  9907. };
  9908. Painter.prototype.clear = function () {
  9909. this.eachBuildinLayer(this._clearLayer);
  9910. return this;
  9911. };
  9912. Painter.prototype._clearLayer = function (layer) {
  9913. layer.clear();
  9914. };
  9915. Painter.prototype.modLayer = function (zlevel, config) {
  9916. if (config) {
  9917. if (!this._layerConfig[zlevel]) {
  9918. this._layerConfig[zlevel] = config;
  9919. } else {
  9920. util.merge(this._layerConfig[zlevel], config, true);
  9921. }
  9922. var layer = this._layers[zlevel];
  9923. if (layer) {
  9924. util.merge(layer, this._layerConfig[zlevel], true);
  9925. }
  9926. }
  9927. };
  9928. Painter.prototype.delLayer = function (zlevel) {
  9929. var layer = this._layers[zlevel];
  9930. if (!layer) {
  9931. return;
  9932. }
  9933. this.modLayer(zlevel, {
  9934. position: layer.position,
  9935. rotation: layer.rotation,
  9936. scale: layer.scale
  9937. });
  9938. layer.dom.parentNode.removeChild(layer.dom);
  9939. delete this._layers[zlevel];
  9940. this._zlevelList.splice(util.indexOf(this._zlevelList, zlevel), 1);
  9941. };
  9942. Painter.prototype.refreshHover = function () {
  9943. this.clearHover();
  9944. var list = this.storage.getHoverShapes(true);
  9945. for (var i = 0, l = list.length; i < l; i++) {
  9946. this._brushHover(list[i]);
  9947. }
  9948. var ctx = this._layers.hover.ctx;
  9949. ctx.flush && ctx.flush();
  9950. this.storage.delHover();
  9951. return this;
  9952. };
  9953. Painter.prototype.clearHover = function () {
  9954. var hover = this._layers.hover;
  9955. hover && hover.clear();
  9956. return this;
  9957. };
  9958. Painter.prototype.showLoading = function (loadingEffect) {
  9959. this._loadingEffect && this._loadingEffect.stop();
  9960. loadingEffect && this.setLoadingEffect(loadingEffect);
  9961. this._loadingEffect.start(this);
  9962. this.loading = true;
  9963. return this;
  9964. };
  9965. Painter.prototype.hideLoading = function () {
  9966. this._loadingEffect.stop();
  9967. this.clearHover();
  9968. this.loading = false;
  9969. return this;
  9970. };
  9971. Painter.prototype.isLoading = function () {
  9972. return this.loading;
  9973. };
  9974. Painter.prototype.resize = function () {
  9975. var domRoot = this._domRoot;
  9976. domRoot.style.display = 'none';
  9977. var width = this._getWidth();
  9978. var height = this._getHeight();
  9979. domRoot.style.display = '';
  9980. if (this._width != width || height != this._height) {
  9981. this._width = width;
  9982. this._height = height;
  9983. domRoot.style.width = width + 'px';
  9984. domRoot.style.height = height + 'px';
  9985. for (var id in this._layers) {
  9986. this._layers[id].resize(width, height);
  9987. }
  9988. this.refresh(null, true);
  9989. }
  9990. return this;
  9991. };
  9992. Painter.prototype.clearLayer = function (zLevel) {
  9993. var layer = this._layers[zLevel];
  9994. if (layer) {
  9995. layer.clear();
  9996. }
  9997. };
  9998. Painter.prototype.dispose = function () {
  9999. if (this.isLoading()) {
  10000. this.hideLoading();
  10001. }
  10002. this.root.innerHTML = '';
  10003. this.root = this.storage = this._domRoot = this._layers = null;
  10004. };
  10005. Painter.prototype.getDomHover = function () {
  10006. return this._layers.hover.dom;
  10007. };
  10008. Painter.prototype.toDataURL = function (type, backgroundColor, args) {
  10009. if (window['G_vmlCanvasManager']) {
  10010. return null;
  10011. }
  10012. var imageLayer = new Layer('image', this);
  10013. this._bgDom.appendChild(imageLayer.dom);
  10014. imageLayer.initContext();
  10015. var ctx = imageLayer.ctx;
  10016. imageLayer.clearColor = backgroundColor || '#fff';
  10017. imageLayer.clear();
  10018. var self = this;
  10019. this.storage.iterShape(function (shape) {
  10020. if (!shape.invisible) {
  10021. if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, false)) {
  10022. if (config.catchBrushException) {
  10023. try {
  10024. shape.brush(ctx, false, self.refreshNextFrame);
  10025. } catch (error) {
  10026. log(error, 'brush error of ' + shape.type, shape);
  10027. }
  10028. } else {
  10029. shape.brush(ctx, false, self.refreshNextFrame);
  10030. }
  10031. }
  10032. }
  10033. }, {
  10034. normal: 'up',
  10035. update: true
  10036. });
  10037. var image = imageLayer.dom.toDataURL(type, args);
  10038. ctx = null;
  10039. this._bgDom.removeChild(imageLayer.dom);
  10040. return image;
  10041. };
  10042. Painter.prototype.getWidth = function () {
  10043. return this._width;
  10044. };
  10045. Painter.prototype.getHeight = function () {
  10046. return this._height;
  10047. };
  10048. Painter.prototype._getWidth = function () {
  10049. var root = this.root;
  10050. var stl = root.currentStyle || document.defaultView.getComputedStyle(root);
  10051. return ((root.clientWidth || parseInt(stl.width, 10)) - parseInt(stl.paddingLeft, 10) - parseInt(stl.paddingRight, 10)).toFixed(0) - 0;
  10052. };
  10053. Painter.prototype._getHeight = function () {
  10054. var root = this.root;
  10055. var stl = root.currentStyle || document.defaultView.getComputedStyle(root);
  10056. return ((root.clientHeight || parseInt(stl.height, 10)) - parseInt(stl.paddingTop, 10) - parseInt(stl.paddingBottom, 10)).toFixed(0) - 0;
  10057. };
  10058. Painter.prototype._brushHover = function (shape) {
  10059. var ctx = this._layers.hover.ctx;
  10060. if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, true)) {
  10061. var layer = this.getLayer(shape.zlevel);
  10062. if (layer.needTransform) {
  10063. ctx.save();
  10064. layer.setTransform(ctx);
  10065. }
  10066. if (config.catchBrushException) {
  10067. try {
  10068. shape.brush(ctx, true, this.refreshNextFrame);
  10069. } catch (error) {
  10070. log(error, 'hoverBrush error of ' + shape.type, shape);
  10071. }
  10072. } else {
  10073. shape.brush(ctx, true, this.refreshNextFrame);
  10074. }
  10075. if (layer.needTransform) {
  10076. ctx.restore();
  10077. }
  10078. }
  10079. };
  10080. Painter.prototype._shapeToImage = function (id, shape, width, height, devicePixelRatio) {
  10081. var canvas = document.createElement('canvas');
  10082. var ctx = canvas.getContext('2d');
  10083. canvas.style.width = width + 'px';
  10084. canvas.style.height = height + 'px';
  10085. canvas.setAttribute('width', width * devicePixelRatio);
  10086. canvas.setAttribute('height', height * devicePixelRatio);
  10087. ctx.clearRect(0, 0, width * devicePixelRatio, height * devicePixelRatio);
  10088. var shapeTransform = {
  10089. position: shape.position,
  10090. rotation: shape.rotation,
  10091. scale: shape.scale
  10092. };
  10093. shape.position = [
  10094. 0,
  10095. 0,
  10096. 0
  10097. ];
  10098. shape.rotation = 0;
  10099. shape.scale = [
  10100. 1,
  10101. 1
  10102. ];
  10103. if (shape) {
  10104. shape.brush(ctx, false);
  10105. }
  10106. var ImageShape = require('./shape/Image');
  10107. var imgShape = new ImageShape({
  10108. id: id,
  10109. style: {
  10110. x: 0,
  10111. y: 0,
  10112. image: canvas
  10113. }
  10114. });
  10115. if (shapeTransform.position != null) {
  10116. imgShape.position = shape.position = shapeTransform.position;
  10117. }
  10118. if (shapeTransform.rotation != null) {
  10119. imgShape.rotation = shape.rotation = shapeTransform.rotation;
  10120. }
  10121. if (shapeTransform.scale != null) {
  10122. imgShape.scale = shape.scale = shapeTransform.scale;
  10123. }
  10124. return imgShape;
  10125. };
  10126. Painter.prototype._createShapeToImageProcessor = function () {
  10127. if (window['G_vmlCanvasManager']) {
  10128. return doNothing;
  10129. }
  10130. var me = this;
  10131. return function (id, e, width, height) {
  10132. return me._shapeToImage(id, e, width, height, config.devicePixelRatio);
  10133. };
  10134. };
  10135. return Painter;
  10136. });define('zrender/Storage', [
  10137. 'require',
  10138. './tool/util',
  10139. './Group'
  10140. ], function (require) {
  10141. 'use strict';
  10142. var util = require('./tool/util');
  10143. var Group = require('./Group');
  10144. var defaultIterateOption = {
  10145. hover: false,
  10146. normal: 'down',
  10147. update: false
  10148. };
  10149. function shapeCompareFunc(a, b) {
  10150. if (a.zlevel == b.zlevel) {
  10151. if (a.z == b.z) {
  10152. return a.__renderidx - b.__renderidx;
  10153. }
  10154. return a.z - b.z;
  10155. }
  10156. return a.zlevel - b.zlevel;
  10157. }
  10158. var Storage = function () {
  10159. this._elements = {};
  10160. this._hoverElements = [];
  10161. this._roots = [];
  10162. this._shapeList = [];
  10163. this._shapeListOffset = 0;
  10164. };
  10165. Storage.prototype.iterShape = function (fun, option) {
  10166. if (!option) {
  10167. option = defaultIterateOption;
  10168. }
  10169. if (option.hover) {
  10170. for (var i = 0, l = this._hoverElements.length; i < l; i++) {
  10171. var el = this._hoverElements[i];
  10172. el.updateTransform();
  10173. if (fun(el)) {
  10174. return this;
  10175. }
  10176. }
  10177. }
  10178. if (option.update) {
  10179. this.updateShapeList();
  10180. }
  10181. switch (option.normal) {
  10182. case 'down':
  10183. var l = this._shapeList.length;
  10184. while (l--) {
  10185. if (fun(this._shapeList[l])) {
  10186. return this;
  10187. }
  10188. }
  10189. break;
  10190. default:
  10191. for (var i = 0, l = this._shapeList.length; i < l; i++) {
  10192. if (fun(this._shapeList[i])) {
  10193. return this;
  10194. }
  10195. }
  10196. break;
  10197. }
  10198. return this;
  10199. };
  10200. Storage.prototype.getHoverShapes = function (update) {
  10201. var hoverElements = [];
  10202. for (var i = 0, l = this._hoverElements.length; i < l; i++) {
  10203. hoverElements.push(this._hoverElements[i]);
  10204. var target = this._hoverElements[i].hoverConnect;
  10205. if (target) {
  10206. var shape;
  10207. target = target instanceof Array ? target : [target];
  10208. for (var j = 0, k = target.length; j < k; j++) {
  10209. shape = target[j].id ? target[j] : this.get(target[j]);
  10210. if (shape) {
  10211. hoverElements.push(shape);
  10212. }
  10213. }
  10214. }
  10215. }
  10216. hoverElements.sort(shapeCompareFunc);
  10217. if (update) {
  10218. for (var i = 0, l = hoverElements.length; i < l; i++) {
  10219. hoverElements[i].updateTransform();
  10220. }
  10221. }
  10222. return hoverElements;
  10223. };
  10224. Storage.prototype.getShapeList = function (update) {
  10225. if (update) {
  10226. this.updateShapeList();
  10227. }
  10228. return this._shapeList;
  10229. };
  10230. Storage.prototype.updateShapeList = function () {
  10231. this._shapeListOffset = 0;
  10232. for (var i = 0, len = this._roots.length; i < len; i++) {
  10233. var root = this._roots[i];
  10234. this._updateAndAddShape(root);
  10235. }
  10236. this._shapeList.length = this._shapeListOffset;
  10237. for (var i = 0, len = this._shapeList.length; i < len; i++) {
  10238. this._shapeList[i].__renderidx = i;
  10239. }
  10240. this._shapeList.sort(shapeCompareFunc);
  10241. };
  10242. Storage.prototype._updateAndAddShape = function (el, clipShapes) {
  10243. if (el.ignore) {
  10244. return;
  10245. }
  10246. el.updateTransform();
  10247. if (el.type == 'group') {
  10248. if (el.clipShape) {
  10249. el.clipShape.parent = el;
  10250. el.clipShape.updateTransform();
  10251. if (clipShapes) {
  10252. clipShapes = clipShapes.slice();
  10253. clipShapes.push(el.clipShape);
  10254. } else {
  10255. clipShapes = [el.clipShape];
  10256. }
  10257. }
  10258. for (var i = 0; i < el._children.length; i++) {
  10259. var child = el._children[i];
  10260. child.__dirty = el.__dirty || child.__dirty;
  10261. this._updateAndAddShape(child, clipShapes);
  10262. }
  10263. el.__dirty = false;
  10264. } else {
  10265. el.__clipShapes = clipShapes;
  10266. this._shapeList[this._shapeListOffset++] = el;
  10267. }
  10268. };
  10269. Storage.prototype.mod = function (el, params) {
  10270. if (typeof el === 'string') {
  10271. el = this._elements[el];
  10272. }
  10273. if (el) {
  10274. el.modSelf();
  10275. if (params) {
  10276. if (params.parent || params._storage || params.__clipShapes) {
  10277. var target = {};
  10278. for (var name in params) {
  10279. if (name === 'parent' || name === '_storage' || name === '__clipShapes') {
  10280. continue;
  10281. }
  10282. if (params.hasOwnProperty(name)) {
  10283. target[name] = params[name];
  10284. }
  10285. }
  10286. util.merge(el, target, true);
  10287. } else {
  10288. util.merge(el, params, true);
  10289. }
  10290. }
  10291. }
  10292. return this;
  10293. };
  10294. Storage.prototype.drift = function (shapeId, dx, dy) {
  10295. var shape = this._elements[shapeId];
  10296. if (shape) {
  10297. shape.needTransform = true;
  10298. if (shape.draggable === 'horizontal') {
  10299. dy = 0;
  10300. } else if (shape.draggable === 'vertical') {
  10301. dx = 0;
  10302. }
  10303. if (!shape.ondrift || shape.ondrift && !shape.ondrift(dx, dy)) {
  10304. shape.drift(dx, dy);
  10305. }
  10306. }
  10307. return this;
  10308. };
  10309. Storage.prototype.addHover = function (shape) {
  10310. shape.updateNeedTransform();
  10311. this._hoverElements.push(shape);
  10312. return this;
  10313. };
  10314. Storage.prototype.delHover = function () {
  10315. this._hoverElements = [];
  10316. return this;
  10317. };
  10318. Storage.prototype.hasHoverShape = function () {
  10319. return this._hoverElements.length > 0;
  10320. };
  10321. Storage.prototype.addRoot = function (el) {
  10322. if (this._elements[el.id]) {
  10323. return;
  10324. }
  10325. if (el instanceof Group) {
  10326. el.addChildrenToStorage(this);
  10327. }
  10328. this.addToMap(el);
  10329. this._roots.push(el);
  10330. };
  10331. Storage.prototype.delRoot = function (elId) {
  10332. if (typeof elId == 'undefined') {
  10333. for (var i = 0; i < this._roots.length; i++) {
  10334. var root = this._roots[i];
  10335. if (root instanceof Group) {
  10336. root.delChildrenFromStorage(this);
  10337. }
  10338. }
  10339. this._elements = {};
  10340. this._hoverElements = [];
  10341. this._roots = [];
  10342. this._shapeList = [];
  10343. this._shapeListOffset = 0;
  10344. return;
  10345. }
  10346. if (elId instanceof Array) {
  10347. for (var i = 0, l = elId.length; i < l; i++) {
  10348. this.delRoot(elId[i]);
  10349. }
  10350. return;
  10351. }
  10352. var el;
  10353. if (typeof elId == 'string') {
  10354. el = this._elements[elId];
  10355. } else {
  10356. el = elId;
  10357. }
  10358. var idx = util.indexOf(this._roots, el);
  10359. if (idx >= 0) {
  10360. this.delFromMap(el.id);
  10361. this._roots.splice(idx, 1);
  10362. if (el instanceof Group) {
  10363. el.delChildrenFromStorage(this);
  10364. }
  10365. }
  10366. };
  10367. Storage.prototype.addToMap = function (el) {
  10368. if (el instanceof Group) {
  10369. el._storage = this;
  10370. }
  10371. el.modSelf();
  10372. this._elements[el.id] = el;
  10373. return this;
  10374. };
  10375. Storage.prototype.get = function (elId) {
  10376. return this._elements[elId];
  10377. };
  10378. Storage.prototype.delFromMap = function (elId) {
  10379. var el = this._elements[elId];
  10380. if (el) {
  10381. delete this._elements[elId];
  10382. if (el instanceof Group) {
  10383. el._storage = null;
  10384. }
  10385. }
  10386. return this;
  10387. };
  10388. Storage.prototype.dispose = function () {
  10389. this._elements = this._renderList = this._roots = this._hoverElements = null;
  10390. };
  10391. return Storage;
  10392. });define('zrender/animation/Animation', [
  10393. 'require',
  10394. './Clip',
  10395. '../tool/color',
  10396. '../tool/util',
  10397. '../tool/event'
  10398. ], function (require) {
  10399. 'use strict';
  10400. var Clip = require('./Clip');
  10401. var color = require('../tool/color');
  10402. var util = require('../tool/util');
  10403. var Dispatcher = require('../tool/event').Dispatcher;
  10404. var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (func) {
  10405. setTimeout(func, 16);
  10406. };
  10407. var arraySlice = Array.prototype.slice;
  10408. var Animation = function (options) {
  10409. options = options || {};
  10410. this.stage = options.stage || {};
  10411. this.onframe = options.onframe || function () {
  10412. };
  10413. this._clips = [];
  10414. this._running = false;
  10415. this._time = 0;
  10416. Dispatcher.call(this);
  10417. };
  10418. Animation.prototype = {
  10419. add: function (clip) {
  10420. this._clips.push(clip);
  10421. },
  10422. remove: function (clip) {
  10423. var idx = util.indexOf(this._clips, clip);
  10424. if (idx >= 0) {
  10425. this._clips.splice(idx, 1);
  10426. }
  10427. },
  10428. _update: function () {
  10429. var time = new Date().getTime();
  10430. var delta = time - this._time;
  10431. var clips = this._clips;
  10432. var len = clips.length;
  10433. var deferredEvents = [];
  10434. var deferredClips = [];
  10435. for (var i = 0; i < len; i++) {
  10436. var clip = clips[i];
  10437. var e = clip.step(time);
  10438. if (e) {
  10439. deferredEvents.push(e);
  10440. deferredClips.push(clip);
  10441. }
  10442. }
  10443. for (var i = 0; i < len;) {
  10444. if (clips[i]._needsRemove) {
  10445. clips[i] = clips[len - 1];
  10446. clips.pop();
  10447. len--;
  10448. } else {
  10449. i++;
  10450. }
  10451. }
  10452. len = deferredEvents.length;
  10453. for (var i = 0; i < len; i++) {
  10454. deferredClips[i].fire(deferredEvents[i]);
  10455. }
  10456. this._time = time;
  10457. this.onframe(delta);
  10458. this.dispatch('frame', delta);
  10459. if (this.stage.update) {
  10460. this.stage.update();
  10461. }
  10462. },
  10463. start: function () {
  10464. var self = this;
  10465. this._running = true;
  10466. function step() {
  10467. if (self._running) {
  10468. requestAnimationFrame(step);
  10469. self._update();
  10470. }
  10471. }
  10472. this._time = new Date().getTime();
  10473. requestAnimationFrame(step);
  10474. },
  10475. stop: function () {
  10476. this._running = false;
  10477. },
  10478. clear: function () {
  10479. this._clips = [];
  10480. },
  10481. animate: function (target, options) {
  10482. options = options || {};
  10483. var deferred = new Animator(target, options.loop, options.getter, options.setter);
  10484. deferred.animation = this;
  10485. return deferred;
  10486. },
  10487. constructor: Animation
  10488. };
  10489. util.merge(Animation.prototype, Dispatcher.prototype, true);
  10490. function _defaultGetter(target, key) {
  10491. return target[key];
  10492. }
  10493. function _defaultSetter(target, key, value) {
  10494. target[key] = value;
  10495. }
  10496. function _interpolateNumber(p0, p1, percent) {
  10497. return (p1 - p0) * percent + p0;
  10498. }
  10499. function _interpolateArray(p0, p1, percent, out, arrDim) {
  10500. var len = p0.length;
  10501. if (arrDim == 1) {
  10502. for (var i = 0; i < len; i++) {
  10503. out[i] = _interpolateNumber(p0[i], p1[i], percent);
  10504. }
  10505. } else {
  10506. var len2 = p0[0].length;
  10507. for (var i = 0; i < len; i++) {
  10508. for (var j = 0; j < len2; j++) {
  10509. out[i][j] = _interpolateNumber(p0[i][j], p1[i][j], percent);
  10510. }
  10511. }
  10512. }
  10513. }
  10514. function _isArrayLike(data) {
  10515. switch (typeof data) {
  10516. case 'undefined':
  10517. case 'string':
  10518. return false;
  10519. }
  10520. return typeof data.length !== 'undefined';
  10521. }
  10522. function _catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {
  10523. var len = p0.length;
  10524. if (arrDim == 1) {
  10525. for (var i = 0; i < len; i++) {
  10526. out[i] = _catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);
  10527. }
  10528. } else {
  10529. var len2 = p0[0].length;
  10530. for (var i = 0; i < len; i++) {
  10531. for (var j = 0; j < len2; j++) {
  10532. out[i][j] = _catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);
  10533. }
  10534. }
  10535. }
  10536. }
  10537. function _catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {
  10538. var v0 = (p2 - p0) * 0.5;
  10539. var v1 = (p3 - p1) * 0.5;
  10540. return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;
  10541. }
  10542. function _cloneValue(value) {
  10543. if (_isArrayLike(value)) {
  10544. var len = value.length;
  10545. if (_isArrayLike(value[0])) {
  10546. var ret = [];
  10547. for (var i = 0; i < len; i++) {
  10548. ret.push(arraySlice.call(value[i]));
  10549. }
  10550. return ret;
  10551. } else {
  10552. return arraySlice.call(value);
  10553. }
  10554. } else {
  10555. return value;
  10556. }
  10557. }
  10558. function rgba2String(rgba) {
  10559. rgba[0] = Math.floor(rgba[0]);
  10560. rgba[1] = Math.floor(rgba[1]);
  10561. rgba[2] = Math.floor(rgba[2]);
  10562. return 'rgba(' + rgba.join(',') + ')';
  10563. }
  10564. var Animator = function (target, loop, getter, setter) {
  10565. this._tracks = {};
  10566. this._target = target;
  10567. this._loop = loop || false;
  10568. this._getter = getter || _defaultGetter;
  10569. this._setter = setter || _defaultSetter;
  10570. this._clipCount = 0;
  10571. this._delay = 0;
  10572. this._doneList = [];
  10573. this._onframeList = [];
  10574. this._clipList = [];
  10575. };
  10576. Animator.prototype = {
  10577. when: function (time, props) {
  10578. for (var propName in props) {
  10579. if (!this._tracks[propName]) {
  10580. this._tracks[propName] = [];
  10581. if (time !== 0) {
  10582. this._tracks[propName].push({
  10583. time: 0,
  10584. value: _cloneValue(this._getter(this._target, propName))
  10585. });
  10586. }
  10587. }
  10588. this._tracks[propName].push({
  10589. time: parseInt(time, 10),
  10590. value: props[propName]
  10591. });
  10592. }
  10593. return this;
  10594. },
  10595. during: function (callback) {
  10596. this._onframeList.push(callback);
  10597. return this;
  10598. },
  10599. start: function (easing) {
  10600. var self = this;
  10601. var setter = this._setter;
  10602. var getter = this._getter;
  10603. var useSpline = easing === 'spline';
  10604. var ondestroy = function () {
  10605. self._clipCount--;
  10606. if (self._clipCount === 0) {
  10607. self._tracks = {};
  10608. var len = self._doneList.length;
  10609. for (var i = 0; i < len; i++) {
  10610. self._doneList[i].call(self);
  10611. }
  10612. }
  10613. };
  10614. var createTrackClip = function (keyframes, propName) {
  10615. var trackLen = keyframes.length;
  10616. if (!trackLen) {
  10617. return;
  10618. }
  10619. var firstVal = keyframes[0].value;
  10620. var isValueArray = _isArrayLike(firstVal);
  10621. var isValueColor = false;
  10622. var arrDim = isValueArray && _isArrayLike(firstVal[0]) ? 2 : 1;
  10623. keyframes.sort(function (a, b) {
  10624. return a.time - b.time;
  10625. });
  10626. var trackMaxTime;
  10627. if (trackLen) {
  10628. trackMaxTime = keyframes[trackLen - 1].time;
  10629. } else {
  10630. return;
  10631. }
  10632. var kfPercents = [];
  10633. var kfValues = [];
  10634. for (var i = 0; i < trackLen; i++) {
  10635. kfPercents.push(keyframes[i].time / trackMaxTime);
  10636. var value = keyframes[i].value;
  10637. if (typeof value == 'string') {
  10638. value = color.toArray(value);
  10639. if (value.length === 0) {
  10640. value[0] = value[1] = value[2] = 0;
  10641. value[3] = 1;
  10642. }
  10643. isValueColor = true;
  10644. }
  10645. kfValues.push(value);
  10646. }
  10647. var cacheKey = 0;
  10648. var cachePercent = 0;
  10649. var start;
  10650. var i;
  10651. var w;
  10652. var p0;
  10653. var p1;
  10654. var p2;
  10655. var p3;
  10656. if (isValueColor) {
  10657. var rgba = [
  10658. 0,
  10659. 0,
  10660. 0,
  10661. 0
  10662. ];
  10663. }
  10664. var onframe = function (target, percent) {
  10665. if (percent < cachePercent) {
  10666. start = Math.min(cacheKey + 1, trackLen - 1);
  10667. for (i = start; i >= 0; i--) {
  10668. if (kfPercents[i] <= percent) {
  10669. break;
  10670. }
  10671. }
  10672. i = Math.min(i, trackLen - 2);
  10673. } else {
  10674. for (i = cacheKey; i < trackLen; i++) {
  10675. if (kfPercents[i] > percent) {
  10676. break;
  10677. }
  10678. }
  10679. i = Math.min(i - 1, trackLen - 2);
  10680. }
  10681. cacheKey = i;
  10682. cachePercent = percent;
  10683. var range = kfPercents[i + 1] - kfPercents[i];
  10684. if (range === 0) {
  10685. return;
  10686. } else {
  10687. w = (percent - kfPercents[i]) / range;
  10688. }
  10689. if (useSpline) {
  10690. p1 = kfValues[i];
  10691. p0 = kfValues[i === 0 ? i : i - 1];
  10692. p2 = kfValues[i > trackLen - 2 ? trackLen - 1 : i + 1];
  10693. p3 = kfValues[i > trackLen - 3 ? trackLen - 1 : i + 2];
  10694. if (isValueArray) {
  10695. _catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);
  10696. } else {
  10697. var value;
  10698. if (isValueColor) {
  10699. value = _catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);
  10700. value = rgba2String(rgba);
  10701. } else {
  10702. value = _catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);
  10703. }
  10704. setter(target, propName, value);
  10705. }
  10706. } else {
  10707. if (isValueArray) {
  10708. _interpolateArray(kfValues[i], kfValues[i + 1], w, getter(target, propName), arrDim);
  10709. } else {
  10710. var value;
  10711. if (isValueColor) {
  10712. _interpolateArray(kfValues[i], kfValues[i + 1], w, rgba, 1);
  10713. value = rgba2String(rgba);
  10714. } else {
  10715. value = _interpolateNumber(kfValues[i], kfValues[i + 1], w);
  10716. }
  10717. setter(target, propName, value);
  10718. }
  10719. }
  10720. for (i = 0; i < self._onframeList.length; i++) {
  10721. self._onframeList[i](target, percent);
  10722. }
  10723. };
  10724. var clip = new Clip({
  10725. target: self._target,
  10726. life: trackMaxTime,
  10727. loop: self._loop,
  10728. delay: self._delay,
  10729. onframe: onframe,
  10730. ondestroy: ondestroy
  10731. });
  10732. if (easing && easing !== 'spline') {
  10733. clip.easing = easing;
  10734. }
  10735. self._clipList.push(clip);
  10736. self._clipCount++;
  10737. self.animation.add(clip);
  10738. };
  10739. for (var propName in this._tracks) {
  10740. createTrackClip(this._tracks[propName], propName);
  10741. }
  10742. return this;
  10743. },
  10744. stop: function () {
  10745. for (var i = 0; i < this._clipList.length; i++) {
  10746. var clip = this._clipList[i];
  10747. this.animation.remove(clip);
  10748. }
  10749. this._clipList = [];
  10750. },
  10751. delay: function (time) {
  10752. this._delay = time;
  10753. return this;
  10754. },
  10755. done: function (cb) {
  10756. if (cb) {
  10757. this._doneList.push(cb);
  10758. }
  10759. return this;
  10760. }
  10761. };
  10762. return Animation;
  10763. });define('zrender/tool/vector', [], function () {
  10764. var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;
  10765. var vector = {
  10766. create: function (x, y) {
  10767. var out = new ArrayCtor(2);
  10768. out[0] = x || 0;
  10769. out[1] = y || 0;
  10770. return out;
  10771. },
  10772. copy: function (out, v) {
  10773. out[0] = v[0];
  10774. out[1] = v[1];
  10775. return out;
  10776. },
  10777. clone: function (v) {
  10778. var out = new ArrayCtor(2);
  10779. out[0] = v[0];
  10780. out[1] = v[1];
  10781. return out;
  10782. },
  10783. set: function (out, a, b) {
  10784. out[0] = a;
  10785. out[1] = b;
  10786. return out;
  10787. },
  10788. add: function (out, v1, v2) {
  10789. out[0] = v1[0] + v2[0];
  10790. out[1] = v1[1] + v2[1];
  10791. return out;
  10792. },
  10793. scaleAndAdd: function (out, v1, v2, a) {
  10794. out[0] = v1[0] + v2[0] * a;
  10795. out[1] = v1[1] + v2[1] * a;
  10796. return out;
  10797. },
  10798. sub: function (out, v1, v2) {
  10799. out[0] = v1[0] - v2[0];
  10800. out[1] = v1[1] - v2[1];
  10801. return out;
  10802. },
  10803. len: function (v) {
  10804. return Math.sqrt(this.lenSquare(v));
  10805. },
  10806. lenSquare: function (v) {
  10807. return v[0] * v[0] + v[1] * v[1];
  10808. },
  10809. mul: function (out, v1, v2) {
  10810. out[0] = v1[0] * v2[0];
  10811. out[1] = v1[1] * v2[1];
  10812. return out;
  10813. },
  10814. div: function (out, v1, v2) {
  10815. out[0] = v1[0] / v2[0];
  10816. out[1] = v1[1] / v2[1];
  10817. return out;
  10818. },
  10819. dot: function (v1, v2) {
  10820. return v1[0] * v2[0] + v1[1] * v2[1];
  10821. },
  10822. scale: function (out, v, s) {
  10823. out[0] = v[0] * s;
  10824. out[1] = v[1] * s;
  10825. return out;
  10826. },
  10827. normalize: function (out, v) {
  10828. var d = vector.len(v);
  10829. if (d === 0) {
  10830. out[0] = 0;
  10831. out[1] = 0;
  10832. } else {
  10833. out[0] = v[0] / d;
  10834. out[1] = v[1] / d;
  10835. }
  10836. return out;
  10837. },
  10838. distance: function (v1, v2) {
  10839. return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]));
  10840. },
  10841. distanceSquare: function (v1, v2) {
  10842. return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);
  10843. },
  10844. negate: function (out, v) {
  10845. out[0] = -v[0];
  10846. out[1] = -v[1];
  10847. return out;
  10848. },
  10849. lerp: function (out, v1, v2, t) {
  10850. out[0] = v1[0] + t * (v2[0] - v1[0]);
  10851. out[1] = v1[1] + t * (v2[1] - v1[1]);
  10852. return out;
  10853. },
  10854. applyTransform: function (out, v, m) {
  10855. var x = v[0];
  10856. var y = v[1];
  10857. out[0] = m[0] * x + m[2] * y + m[4];
  10858. out[1] = m[1] * x + m[3] * y + m[5];
  10859. return out;
  10860. },
  10861. min: function (out, v1, v2) {
  10862. out[0] = Math.min(v1[0], v2[0]);
  10863. out[1] = Math.min(v1[1], v2[1]);
  10864. return out;
  10865. },
  10866. max: function (out, v1, v2) {
  10867. out[0] = Math.max(v1[0], v2[0]);
  10868. out[1] = Math.max(v1[1], v2[1]);
  10869. return out;
  10870. }
  10871. };
  10872. vector.length = vector.len;
  10873. vector.lengthSquare = vector.lenSquare;
  10874. vector.dist = vector.distance;
  10875. vector.distSquare = vector.distanceSquare;
  10876. return vector;
  10877. });define('zrender/tool/matrix', [], function () {
  10878. var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;
  10879. var matrix = {
  10880. create: function () {
  10881. var out = new ArrayCtor(6);
  10882. matrix.identity(out);
  10883. return out;
  10884. },
  10885. identity: function (out) {
  10886. out[0] = 1;
  10887. out[1] = 0;
  10888. out[2] = 0;
  10889. out[3] = 1;
  10890. out[4] = 0;
  10891. out[5] = 0;
  10892. return out;
  10893. },
  10894. copy: function (out, m) {
  10895. out[0] = m[0];
  10896. out[1] = m[1];
  10897. out[2] = m[2];
  10898. out[3] = m[3];
  10899. out[4] = m[4];
  10900. out[5] = m[5];
  10901. return out;
  10902. },
  10903. mul: function (out, m1, m2) {
  10904. out[0] = m1[0] * m2[0] + m1[2] * m2[1];
  10905. out[1] = m1[1] * m2[0] + m1[3] * m2[1];
  10906. out[2] = m1[0] * m2[2] + m1[2] * m2[3];
  10907. out[3] = m1[1] * m2[2] + m1[3] * m2[3];
  10908. out[4] = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];
  10909. out[5] = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];
  10910. return out;
  10911. },
  10912. translate: function (out, a, v) {
  10913. out[0] = a[0];
  10914. out[1] = a[1];
  10915. out[2] = a[2];
  10916. out[3] = a[3];
  10917. out[4] = a[4] + v[0];
  10918. out[5] = a[5] + v[1];
  10919. return out;
  10920. },
  10921. rotate: function (out, a, rad) {
  10922. var aa = a[0];
  10923. var ac = a[2];
  10924. var atx = a[4];
  10925. var ab = a[1];
  10926. var ad = a[3];
  10927. var aty = a[5];
  10928. var st = Math.sin(rad);
  10929. var ct = Math.cos(rad);
  10930. out[0] = aa * ct + ab * st;
  10931. out[1] = -aa * st + ab * ct;
  10932. out[2] = ac * ct + ad * st;
  10933. out[3] = -ac * st + ct * ad;
  10934. out[4] = ct * atx + st * aty;
  10935. out[5] = ct * aty - st * atx;
  10936. return out;
  10937. },
  10938. scale: function (out, a, v) {
  10939. var vx = v[0];
  10940. var vy = v[1];
  10941. out[0] = a[0] * vx;
  10942. out[1] = a[1] * vy;
  10943. out[2] = a[2] * vx;
  10944. out[3] = a[3] * vy;
  10945. out[4] = a[4] * vx;
  10946. out[5] = a[5] * vy;
  10947. return out;
  10948. },
  10949. invert: function (out, a) {
  10950. var aa = a[0];
  10951. var ac = a[2];
  10952. var atx = a[4];
  10953. var ab = a[1];
  10954. var ad = a[3];
  10955. var aty = a[5];
  10956. var det = aa * ad - ab * ac;
  10957. if (!det) {
  10958. return null;
  10959. }
  10960. det = 1 / det;
  10961. out[0] = ad * det;
  10962. out[1] = -ab * det;
  10963. out[2] = -ac * det;
  10964. out[3] = aa * det;
  10965. out[4] = (ac * aty - ad * atx) * det;
  10966. out[5] = (ab * atx - aa * aty) * det;
  10967. return out;
  10968. },
  10969. mulVector: function (out, a, v) {
  10970. var aa = a[0];
  10971. var ac = a[2];
  10972. var atx = a[4];
  10973. var ab = a[1];
  10974. var ad = a[3];
  10975. var aty = a[5];
  10976. out[0] = v[0] * aa + v[1] * ac + atx;
  10977. out[1] = v[0] * ab + v[1] * ad + aty;
  10978. return out;
  10979. }
  10980. };
  10981. return matrix;
  10982. });define('zrender/loadingEffect/Base', [
  10983. 'require',
  10984. '../tool/util',
  10985. '../shape/Text',
  10986. '../shape/Rectangle'
  10987. ], function (require) {
  10988. var util = require('../tool/util');
  10989. var TextShape = require('../shape/Text');
  10990. var RectangleShape = require('../shape/Rectangle');
  10991. var DEFAULT_TEXT = 'Loading...';
  10992. var DEFAULT_TEXT_FONT = 'normal 16px Arial';
  10993. function Base(options) {
  10994. this.setOptions(options);
  10995. }
  10996. Base.prototype.createTextShape = function (textStyle) {
  10997. return new TextShape({
  10998. highlightStyle: util.merge({
  10999. x: this.canvasWidth / 2,
  11000. y: this.canvasHeight / 2,
  11001. text: DEFAULT_TEXT,
  11002. textAlign: 'center',
  11003. textBaseline: 'middle',
  11004. textFont: DEFAULT_TEXT_FONT,
  11005. color: '#333',
  11006. brushType: 'fill'
  11007. }, textStyle, true)
  11008. });
  11009. };
  11010. Base.prototype.createBackgroundShape = function (color) {
  11011. return new RectangleShape({
  11012. highlightStyle: {
  11013. x: 0,
  11014. y: 0,
  11015. width: this.canvasWidth,
  11016. height: this.canvasHeight,
  11017. brushType: 'fill',
  11018. color: color
  11019. }
  11020. });
  11021. };
  11022. Base.prototype.start = function (painter) {
  11023. this.canvasWidth = painter._width;
  11024. this.canvasHeight = painter._height;
  11025. function addShapeHandle(param) {
  11026. painter.storage.addHover(param);
  11027. }
  11028. function refreshHandle() {
  11029. painter.refreshHover();
  11030. }
  11031. this.loadingTimer = this._start(addShapeHandle, refreshHandle);
  11032. };
  11033. Base.prototype._start = function () {
  11034. return setInterval(function () {
  11035. }, 10000);
  11036. };
  11037. Base.prototype.stop = function () {
  11038. clearInterval(this.loadingTimer);
  11039. };
  11040. Base.prototype.setOptions = function (options) {
  11041. this.options = options || {};
  11042. };
  11043. Base.prototype.adjust = function (value, region) {
  11044. if (value <= region[0]) {
  11045. value = region[0];
  11046. } else if (value >= region[1]) {
  11047. value = region[1];
  11048. }
  11049. return value;
  11050. };
  11051. Base.prototype.getLocation = function (loc, totalWidth, totalHeight) {
  11052. var x = loc.x != null ? loc.x : 'center';
  11053. switch (x) {
  11054. case 'center':
  11055. x = Math.floor((this.canvasWidth - totalWidth) / 2);
  11056. break;
  11057. case 'left':
  11058. x = 0;
  11059. break;
  11060. case 'right':
  11061. x = this.canvasWidth - totalWidth;
  11062. break;
  11063. }
  11064. var y = loc.y != null ? loc.y : 'center';
  11065. switch (y) {
  11066. case 'center':
  11067. y = Math.floor((this.canvasHeight - totalHeight) / 2);
  11068. break;
  11069. case 'top':
  11070. y = 0;
  11071. break;
  11072. case 'bottom':
  11073. y = this.canvasHeight - totalHeight;
  11074. break;
  11075. }
  11076. return {
  11077. x: x,
  11078. y: y,
  11079. width: totalWidth,
  11080. height: totalHeight
  11081. };
  11082. };
  11083. return Base;
  11084. });define('zrender/Layer', [
  11085. 'require',
  11086. './mixin/Transformable',
  11087. './tool/util',
  11088. './config'
  11089. ], function (require) {
  11090. var Transformable = require('./mixin/Transformable');
  11091. var util = require('./tool/util');
  11092. var vmlCanvasManager = window['G_vmlCanvasManager'];
  11093. var config = require('./config');
  11094. function returnFalse() {
  11095. return false;
  11096. }
  11097. function createDom(id, type, painter) {
  11098. var newDom = document.createElement(type);
  11099. var width = painter.getWidth();
  11100. var height = painter.getHeight();
  11101. newDom.style.position = 'absolute';
  11102. newDom.style.left = 0;
  11103. newDom.style.top = 0;
  11104. newDom.style.width = width + 'px';
  11105. newDom.style.height = height + 'px';
  11106. newDom.width = width * config.devicePixelRatio;
  11107. newDom.height = height * config.devicePixelRatio;
  11108. newDom.setAttribute('data-zr-dom-id', id);
  11109. return newDom;
  11110. }
  11111. var Layer = function (id, painter) {
  11112. this.id = id;
  11113. this.dom = createDom(id, 'canvas', painter);
  11114. this.dom.onselectstart = returnFalse;
  11115. this.dom.style['-webkit-user-select'] = 'none';
  11116. this.dom.style['user-select'] = 'none';
  11117. this.dom.style['-webkit-touch-callout'] = 'none';
  11118. this.dom.style['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';
  11119. vmlCanvasManager && vmlCanvasManager.initElement(this.dom);
  11120. this.domBack = null;
  11121. this.ctxBack = null;
  11122. this.painter = painter;
  11123. this.unusedCount = 0;
  11124. this.config = null;
  11125. this.dirty = true;
  11126. this.elCount = 0;
  11127. this.clearColor = 0;
  11128. this.motionBlur = false;
  11129. this.lastFrameAlpha = 0.7;
  11130. this.zoomable = false;
  11131. this.panable = false;
  11132. this.maxZoom = Infinity;
  11133. this.minZoom = 0;
  11134. Transformable.call(this);
  11135. };
  11136. Layer.prototype.initContext = function () {
  11137. this.ctx = this.dom.getContext('2d');
  11138. var dpr = config.devicePixelRatio;
  11139. if (dpr != 1) {
  11140. this.ctx.scale(dpr, dpr);
  11141. }
  11142. };
  11143. Layer.prototype.createBackBuffer = function () {
  11144. if (vmlCanvasManager) {
  11145. return;
  11146. }
  11147. this.domBack = createDom('back-' + this.id, 'canvas', this.painter);
  11148. this.ctxBack = this.domBack.getContext('2d');
  11149. var dpr = config.devicePixelRatio;
  11150. if (dpr != 1) {
  11151. this.ctxBack.scale(dpr, dpr);
  11152. }
  11153. };
  11154. Layer.prototype.resize = function (width, height) {
  11155. var dpr = config.devicePixelRatio;
  11156. this.dom.style.width = width + 'px';
  11157. this.dom.style.height = height + 'px';
  11158. this.dom.setAttribute('width', width * dpr);
  11159. this.dom.setAttribute('height', height * dpr);
  11160. if (dpr != 1) {
  11161. this.ctx.scale(dpr, dpr);
  11162. }
  11163. if (this.domBack) {
  11164. this.domBack.setAttribute('width', width * dpr);
  11165. this.domBack.setAttribute('height', height * dpr);
  11166. if (dpr != 1) {
  11167. this.ctxBack.scale(dpr, dpr);
  11168. }
  11169. }
  11170. };
  11171. Layer.prototype.clear = function () {
  11172. var dom = this.dom;
  11173. var ctx = this.ctx;
  11174. var width = dom.width;
  11175. var height = dom.height;
  11176. var haveClearColor = this.clearColor && !vmlCanvasManager;
  11177. var haveMotionBLur = this.motionBlur && !vmlCanvasManager;
  11178. var lastFrameAlpha = this.lastFrameAlpha;
  11179. var dpr = config.devicePixelRatio;
  11180. if (haveMotionBLur) {
  11181. if (!this.domBack) {
  11182. this.createBackBuffer();
  11183. }
  11184. this.ctxBack.globalCompositeOperation = 'copy';
  11185. this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);
  11186. }
  11187. ctx.clearRect(0, 0, width / dpr, height / dpr);
  11188. if (haveClearColor) {
  11189. ctx.save();
  11190. ctx.fillStyle = this.clearColor;
  11191. ctx.fillRect(0, 0, width / dpr, height / dpr);
  11192. ctx.restore();
  11193. }
  11194. if (haveMotionBLur) {
  11195. var domBack = this.domBack;
  11196. ctx.save();
  11197. ctx.globalAlpha = lastFrameAlpha;
  11198. ctx.drawImage(domBack, 0, 0, width / dpr, height / dpr);
  11199. ctx.restore();
  11200. }
  11201. };
  11202. util.merge(Layer.prototype, Transformable.prototype);
  11203. return Layer;
  11204. });define('zrender/shape/Text', [
  11205. 'require',
  11206. '../tool/area',
  11207. './Base',
  11208. '../tool/util'
  11209. ], function (require) {
  11210. var area = require('../tool/area');
  11211. var Base = require('./Base');
  11212. var Text = function (options) {
  11213. Base.call(this, options);
  11214. };
  11215. Text.prototype = {
  11216. type: 'text',
  11217. brush: function (ctx, isHighlight) {
  11218. var style = this.style;
  11219. if (isHighlight) {
  11220. style = this.getHighlightStyle(style, this.highlightStyle || {});
  11221. }
  11222. if (typeof style.text == 'undefined' || style.text === false) {
  11223. return;
  11224. }
  11225. ctx.save();
  11226. this.doClip(ctx);
  11227. this.setContext(ctx, style);
  11228. this.setTransform(ctx);
  11229. if (style.textFont) {
  11230. ctx.font = style.textFont;
  11231. }
  11232. ctx.textAlign = style.textAlign || 'start';
  11233. ctx.textBaseline = style.textBaseline || 'middle';
  11234. var text = (style.text + '').split('\n');
  11235. var lineHeight = area.getTextHeight('国', style.textFont);
  11236. var rect = this.getRect(style);
  11237. var x = style.x;
  11238. var y;
  11239. if (style.textBaseline == 'top') {
  11240. y = rect.y;
  11241. } else if (style.textBaseline == 'bottom') {
  11242. y = rect.y + lineHeight;
  11243. } else {
  11244. y = rect.y + lineHeight / 2;
  11245. }
  11246. for (var i = 0, l = text.length; i < l; i++) {
  11247. if (style.maxWidth) {
  11248. switch (style.brushType) {
  11249. case 'fill':
  11250. ctx.fillText(text[i], x, y, style.maxWidth);
  11251. break;
  11252. case 'stroke':
  11253. ctx.strokeText(text[i], x, y, style.maxWidth);
  11254. break;
  11255. case 'both':
  11256. ctx.fillText(text[i], x, y, style.maxWidth);
  11257. ctx.strokeText(text[i], x, y, style.maxWidth);
  11258. break;
  11259. default:
  11260. ctx.fillText(text[i], x, y, style.maxWidth);
  11261. }
  11262. } else {
  11263. switch (style.brushType) {
  11264. case 'fill':
  11265. ctx.fillText(text[i], x, y);
  11266. break;
  11267. case 'stroke':
  11268. ctx.strokeText(text[i], x, y);
  11269. break;
  11270. case 'both':
  11271. ctx.fillText(text[i], x, y);
  11272. ctx.strokeText(text[i], x, y);
  11273. break;
  11274. default:
  11275. ctx.fillText(text[i], x, y);
  11276. }
  11277. }
  11278. y += lineHeight;
  11279. }
  11280. ctx.restore();
  11281. return;
  11282. },
  11283. getRect: function (style) {
  11284. if (style.__rect) {
  11285. return style.__rect;
  11286. }
  11287. var width = area.getTextWidth(style.text, style.textFont);
  11288. var height = area.getTextHeight(style.text, style.textFont);
  11289. var textX = style.x;
  11290. if (style.textAlign == 'end' || style.textAlign == 'right') {
  11291. textX -= width;
  11292. } else if (style.textAlign == 'center') {
  11293. textX -= width / 2;
  11294. }
  11295. var textY;
  11296. if (style.textBaseline == 'top') {
  11297. textY = style.y;
  11298. } else if (style.textBaseline == 'bottom') {
  11299. textY = style.y - height;
  11300. } else {
  11301. textY = style.y - height / 2;
  11302. }
  11303. style.__rect = {
  11304. x: textX,
  11305. y: textY,
  11306. width: width,
  11307. height: height
  11308. };
  11309. return style.__rect;
  11310. }
  11311. };
  11312. require('../tool/util').inherits(Text, Base);
  11313. return Text;
  11314. });define('zrender/shape/Rectangle', [
  11315. 'require',
  11316. './Base',
  11317. '../tool/util'
  11318. ], function (require) {
  11319. var Base = require('./Base');
  11320. var Rectangle = function (options) {
  11321. Base.call(this, options);
  11322. };
  11323. Rectangle.prototype = {
  11324. type: 'rectangle',
  11325. _buildRadiusPath: function (ctx, style) {
  11326. var x = style.x;
  11327. var y = style.y;
  11328. var width = style.width;
  11329. var height = style.height;
  11330. var r = style.radius;
  11331. var r1;
  11332. var r2;
  11333. var r3;
  11334. var r4;
  11335. if (typeof r === 'number') {
  11336. r1 = r2 = r3 = r4 = r;
  11337. } else if (r instanceof Array) {
  11338. if (r.length === 1) {
  11339. r1 = r2 = r3 = r4 = r[0];
  11340. } else if (r.length === 2) {
  11341. r1 = r3 = r[0];
  11342. r2 = r4 = r[1];
  11343. } else if (r.length === 3) {
  11344. r1 = r[0];
  11345. r2 = r4 = r[1];
  11346. r3 = r[2];
  11347. } else {
  11348. r1 = r[0];
  11349. r2 = r[1];
  11350. r3 = r[2];
  11351. r4 = r[3];
  11352. }
  11353. } else {
  11354. r1 = r2 = r3 = r4 = 0;
  11355. }
  11356. var total;
  11357. if (r1 + r2 > width) {
  11358. total = r1 + r2;
  11359. r1 *= width / total;
  11360. r2 *= width / total;
  11361. }
  11362. if (r3 + r4 > width) {
  11363. total = r3 + r4;
  11364. r3 *= width / total;
  11365. r4 *= width / total;
  11366. }
  11367. if (r2 + r3 > height) {
  11368. total = r2 + r3;
  11369. r2 *= height / total;
  11370. r3 *= height / total;
  11371. }
  11372. if (r1 + r4 > height) {
  11373. total = r1 + r4;
  11374. r1 *= height / total;
  11375. r4 *= height / total;
  11376. }
  11377. ctx.moveTo(x + r1, y);
  11378. ctx.lineTo(x + width - r2, y);
  11379. r2 !== 0 && ctx.quadraticCurveTo(x + width, y, x + width, y + r2);
  11380. ctx.lineTo(x + width, y + height - r3);
  11381. r3 !== 0 && ctx.quadraticCurveTo(x + width, y + height, x + width - r3, y + height);
  11382. ctx.lineTo(x + r4, y + height);
  11383. r4 !== 0 && ctx.quadraticCurveTo(x, y + height, x, y + height - r4);
  11384. ctx.lineTo(x, y + r1);
  11385. r1 !== 0 && ctx.quadraticCurveTo(x, y, x + r1, y);
  11386. },
  11387. buildPath: function (ctx, style) {
  11388. if (!style.radius) {
  11389. ctx.moveTo(style.x, style.y);
  11390. ctx.lineTo(style.x + style.width, style.y);
  11391. ctx.lineTo(style.x + style.width, style.y + style.height);
  11392. ctx.lineTo(style.x, style.y + style.height);
  11393. ctx.lineTo(style.x, style.y);
  11394. } else {
  11395. this._buildRadiusPath(ctx, style);
  11396. }
  11397. ctx.closePath();
  11398. return;
  11399. },
  11400. getRect: function (style) {
  11401. if (style.__rect) {
  11402. return style.__rect;
  11403. }
  11404. var lineWidth;
  11405. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  11406. lineWidth = style.lineWidth || 1;
  11407. } else {
  11408. lineWidth = 0;
  11409. }
  11410. style.__rect = {
  11411. x: Math.round(style.x - lineWidth / 2),
  11412. y: Math.round(style.y - lineWidth / 2),
  11413. width: style.width + lineWidth,
  11414. height: style.height + lineWidth
  11415. };
  11416. return style.__rect;
  11417. }
  11418. };
  11419. require('../tool/util').inherits(Rectangle, Base);
  11420. return Rectangle;
  11421. });define('zrender/tool/area', [
  11422. 'require',
  11423. './util',
  11424. './curve'
  11425. ], function (require) {
  11426. 'use strict';
  11427. var util = require('./util');
  11428. var curve = require('./curve');
  11429. var _ctx;
  11430. var _textWidthCache = {};
  11431. var _textHeightCache = {};
  11432. var _textWidthCacheCounter = 0;
  11433. var _textHeightCacheCounter = 0;
  11434. var TEXT_CACHE_MAX = 5000;
  11435. var PI2 = Math.PI * 2;
  11436. function normalizeRadian(angle) {
  11437. angle %= PI2;
  11438. if (angle < 0) {
  11439. angle += PI2;
  11440. }
  11441. return angle;
  11442. }
  11443. function isInside(shape, area, x, y) {
  11444. if (!area || !shape) {
  11445. return false;
  11446. }
  11447. var zoneType = shape.type;
  11448. _ctx = _ctx || util.getContext();
  11449. var _mathReturn = _mathMethod(shape, area, x, y);
  11450. if (typeof _mathReturn != 'undefined') {
  11451. return _mathReturn;
  11452. }
  11453. if (shape.buildPath && _ctx.isPointInPath) {
  11454. return _buildPathMethod(shape, _ctx, area, x, y);
  11455. }
  11456. switch (zoneType) {
  11457. case 'ellipse':
  11458. return true;
  11459. case 'trochoid':
  11460. var _r = area.location == 'out' ? area.r1 + area.r2 + area.d : area.r1 - area.r2 + area.d;
  11461. return isInsideCircle(area, x, y, _r);
  11462. case 'rose':
  11463. return isInsideCircle(area, x, y, area.maxr);
  11464. default:
  11465. return false;
  11466. }
  11467. }
  11468. function _mathMethod(shape, area, x, y) {
  11469. var zoneType = shape.type;
  11470. switch (zoneType) {
  11471. case 'bezier-curve':
  11472. if (typeof area.cpX2 === 'undefined') {
  11473. return isInsideQuadraticStroke(area.xStart, area.yStart, area.cpX1, area.cpY1, area.xEnd, area.yEnd, area.lineWidth, x, y);
  11474. }
  11475. return isInsideCubicStroke(area.xStart, area.yStart, area.cpX1, area.cpY1, area.cpX2, area.cpY2, area.xEnd, area.yEnd, area.lineWidth, x, y);
  11476. case 'line':
  11477. return isInsideLine(area.xStart, area.yStart, area.xEnd, area.yEnd, area.lineWidth, x, y);
  11478. case 'polyline':
  11479. return isInsidePolyline(area.pointList, area.lineWidth, x, y);
  11480. case 'ring':
  11481. return isInsideRing(area.x, area.y, area.r0, area.r, x, y);
  11482. case 'circle':
  11483. return isInsideCircle(area.x, area.y, area.r, x, y);
  11484. case 'sector':
  11485. var startAngle = area.startAngle * Math.PI / 180;
  11486. var endAngle = area.endAngle * Math.PI / 180;
  11487. if (!area.clockWise) {
  11488. startAngle = -startAngle;
  11489. endAngle = -endAngle;
  11490. }
  11491. return isInsideSector(area.x, area.y, area.r0, area.r, startAngle, endAngle, !area.clockWise, x, y);
  11492. case 'path':
  11493. return area.pathArray && isInsidePath(area.pathArray, Math.max(area.lineWidth, 5), area.brushType, x, y);
  11494. case 'polygon':
  11495. case 'star':
  11496. case 'isogon':
  11497. return isInsidePolygon(area.pointList, x, y);
  11498. case 'text':
  11499. var rect = area.__rect || shape.getRect(area);
  11500. return isInsideRect(rect.x, rect.y, rect.width, rect.height, x, y);
  11501. case 'rectangle':
  11502. case 'image':
  11503. return isInsideRect(area.x, area.y, area.width, area.height, x, y);
  11504. }
  11505. }
  11506. function _buildPathMethod(shape, context, area, x, y) {
  11507. context.beginPath();
  11508. shape.buildPath(context, area);
  11509. context.closePath();
  11510. return context.isPointInPath(x, y);
  11511. }
  11512. function isOutside(shape, area, x, y) {
  11513. return !isInside(shape, area, x, y);
  11514. }
  11515. function isInsideLine(x0, y0, x1, y1, lineWidth, x, y) {
  11516. if (lineWidth === 0) {
  11517. return false;
  11518. }
  11519. var _l = Math.max(lineWidth, 5);
  11520. var _a = 0;
  11521. var _b = x0;
  11522. 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) {
  11523. return false;
  11524. }
  11525. if (x0 !== x1) {
  11526. _a = (y0 - y1) / (x0 - x1);
  11527. _b = (x0 * y1 - x1 * y0) / (x0 - x1);
  11528. } else {
  11529. return Math.abs(x - x0) <= _l / 2;
  11530. }
  11531. var tmp = _a * x - y + _b;
  11532. var _s = tmp * tmp / (_a * _a + 1);
  11533. return _s <= _l / 2 * _l / 2;
  11534. }
  11535. function isInsideCubicStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {
  11536. if (lineWidth === 0) {
  11537. return false;
  11538. }
  11539. var _l = Math.max(lineWidth, 5);
  11540. 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) {
  11541. return false;
  11542. }
  11543. var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);
  11544. return d <= _l / 2;
  11545. }
  11546. function isInsideQuadraticStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {
  11547. if (lineWidth === 0) {
  11548. return false;
  11549. }
  11550. var _l = Math.max(lineWidth, 5);
  11551. 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) {
  11552. return false;
  11553. }
  11554. var d = curve.quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);
  11555. return d <= _l / 2;
  11556. }
  11557. function isInsideArcStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {
  11558. if (lineWidth === 0) {
  11559. return false;
  11560. }
  11561. var _l = Math.max(lineWidth, 5);
  11562. x -= cx;
  11563. y -= cy;
  11564. var d = Math.sqrt(x * x + y * y);
  11565. if (d - _l > r || d + _l < r) {
  11566. return false;
  11567. }
  11568. if (Math.abs(startAngle - endAngle) >= PI2) {
  11569. return true;
  11570. }
  11571. if (anticlockwise) {
  11572. var tmp = startAngle;
  11573. startAngle = normalizeRadian(endAngle);
  11574. endAngle = normalizeRadian(tmp);
  11575. } else {
  11576. startAngle = normalizeRadian(startAngle);
  11577. endAngle = normalizeRadian(endAngle);
  11578. }
  11579. if (startAngle > endAngle) {
  11580. endAngle += PI2;
  11581. }
  11582. var angle = Math.atan2(y, x);
  11583. if (angle < 0) {
  11584. angle += PI2;
  11585. }
  11586. return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;
  11587. }
  11588. function isInsidePolyline(points, lineWidth, x, y) {
  11589. var lineWidth = Math.max(lineWidth, 10);
  11590. for (var i = 0, l = points.length - 1; i < l; i++) {
  11591. var x0 = points[i][0];
  11592. var y0 = points[i][1];
  11593. var x1 = points[i + 1][0];
  11594. var y1 = points[i + 1][1];
  11595. if (isInsideLine(x0, y0, x1, y1, lineWidth, x, y)) {
  11596. return true;
  11597. }
  11598. }
  11599. return false;
  11600. }
  11601. function isInsideRing(cx, cy, r0, r, x, y) {
  11602. var d = (x - cx) * (x - cx) + (y - cy) * (y - cy);
  11603. return d < r * r && d > r0 * r0;
  11604. }
  11605. function isInsideRect(x0, y0, width, height, x, y) {
  11606. return x >= x0 && x <= x0 + width && y >= y0 && y <= y0 + height;
  11607. }
  11608. function isInsideCircle(x0, y0, r, x, y) {
  11609. return (x - x0) * (x - x0) + (y - y0) * (y - y0) < r * r;
  11610. }
  11611. function isInsideSector(cx, cy, r0, r, startAngle, endAngle, anticlockwise, x, y) {
  11612. return isInsideArcStroke(cx, cy, (r0 + r) / 2, startAngle, endAngle, anticlockwise, r - r0, x, y);
  11613. }
  11614. function isInsidePolygon(points, x, y) {
  11615. var N = points.length;
  11616. var w = 0;
  11617. for (var i = 0, j = N - 1; i < N; i++) {
  11618. var x0 = points[j][0];
  11619. var y0 = points[j][1];
  11620. var x1 = points[i][0];
  11621. var y1 = points[i][1];
  11622. w += windingLine(x0, y0, x1, y1, x, y);
  11623. j = i;
  11624. }
  11625. return w !== 0;
  11626. }
  11627. function windingLine(x0, y0, x1, y1, x, y) {
  11628. if (y > y0 && y > y1 || y < y0 && y < y1) {
  11629. return 0;
  11630. }
  11631. if (y1 == y0) {
  11632. return 0;
  11633. }
  11634. var dir = y1 < y0 ? 1 : -1;
  11635. var t = (y - y0) / (y1 - y0);
  11636. var x_ = t * (x1 - x0) + x0;
  11637. return x_ > x ? dir : 0;
  11638. }
  11639. var roots = [
  11640. -1,
  11641. -1,
  11642. -1
  11643. ];
  11644. var extrema = [
  11645. -1,
  11646. -1
  11647. ];
  11648. function swapExtrema() {
  11649. var tmp = extrema[0];
  11650. extrema[0] = extrema[1];
  11651. extrema[1] = tmp;
  11652. }
  11653. function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {
  11654. if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {
  11655. return 0;
  11656. }
  11657. var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);
  11658. if (nRoots === 0) {
  11659. return 0;
  11660. } else {
  11661. var w = 0;
  11662. var nExtrema = -1;
  11663. var y0_, y1_;
  11664. for (var i = 0; i < nRoots; i++) {
  11665. var t = roots[i];
  11666. var x_ = curve.cubicAt(x0, x1, x2, x3, t);
  11667. if (x_ < x) {
  11668. continue;
  11669. }
  11670. if (nExtrema < 0) {
  11671. nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);
  11672. if (extrema[1] < extrema[0] && nExtrema > 1) {
  11673. swapExtrema();
  11674. }
  11675. y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);
  11676. if (nExtrema > 1) {
  11677. y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);
  11678. }
  11679. }
  11680. if (nExtrema == 2) {
  11681. if (t < extrema[0]) {
  11682. w += y0_ < y0 ? 1 : -1;
  11683. } else if (t < extrema[1]) {
  11684. w += y1_ < y0_ ? 1 : -1;
  11685. } else {
  11686. w += y3 < y1_ ? 1 : -1;
  11687. }
  11688. } else {
  11689. if (t < extrema[0]) {
  11690. w += y0_ < y0 ? 1 : -1;
  11691. } else {
  11692. w += y3 < y0_ ? 1 : -1;
  11693. }
  11694. }
  11695. }
  11696. return w;
  11697. }
  11698. }
  11699. function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {
  11700. if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {
  11701. return 0;
  11702. }
  11703. var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);
  11704. if (nRoots === 0) {
  11705. return 0;
  11706. } else {
  11707. var t = curve.quadraticExtremum(y0, y1, y2);
  11708. if (t >= 0 && t <= 1) {
  11709. var w = 0;
  11710. var y_ = curve.quadraticAt(y0, y1, y2, t);
  11711. for (var i = 0; i < nRoots; i++) {
  11712. var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);
  11713. if (x_ < x) {
  11714. continue;
  11715. }
  11716. if (roots[i] < t) {
  11717. w += y_ < y0 ? 1 : -1;
  11718. } else {
  11719. w += y2 < y_ ? 1 : -1;
  11720. }
  11721. }
  11722. return w;
  11723. } else {
  11724. var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);
  11725. if (x_ < x) {
  11726. return 0;
  11727. }
  11728. return y2 < y0 ? 1 : -1;
  11729. }
  11730. }
  11731. }
  11732. function windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {
  11733. y -= cy;
  11734. if (y > r || y < -r) {
  11735. return 0;
  11736. }
  11737. var tmp = Math.sqrt(r * r - y * y);
  11738. roots[0] = -tmp;
  11739. roots[1] = tmp;
  11740. if (Math.abs(startAngle - endAngle) >= PI2) {
  11741. startAngle = 0;
  11742. endAngle = PI2;
  11743. var dir = anticlockwise ? 1 : -1;
  11744. if (x >= roots[0] + cx && x <= roots[1] + cx) {
  11745. return dir;
  11746. } else {
  11747. return 0;
  11748. }
  11749. }
  11750. if (anticlockwise) {
  11751. var tmp = startAngle;
  11752. startAngle = normalizeRadian(endAngle);
  11753. endAngle = normalizeRadian(tmp);
  11754. } else {
  11755. startAngle = normalizeRadian(startAngle);
  11756. endAngle = normalizeRadian(endAngle);
  11757. }
  11758. if (startAngle > endAngle) {
  11759. endAngle += PI2;
  11760. }
  11761. var w = 0;
  11762. for (var i = 0; i < 2; i++) {
  11763. var x_ = roots[i];
  11764. if (x_ + cx > x) {
  11765. var angle = Math.atan2(y, x_);
  11766. var dir = anticlockwise ? 1 : -1;
  11767. if (angle < 0) {
  11768. angle = PI2 + angle;
  11769. }
  11770. if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {
  11771. if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {
  11772. dir = -dir;
  11773. }
  11774. w += dir;
  11775. }
  11776. }
  11777. }
  11778. return w;
  11779. }
  11780. function isInsidePath(pathArray, lineWidth, brushType, x, y) {
  11781. var w = 0;
  11782. var xi = 0;
  11783. var yi = 0;
  11784. var x0 = 0;
  11785. var y0 = 0;
  11786. var beginSubpath = true;
  11787. var firstCmd = true;
  11788. brushType = brushType || 'fill';
  11789. var hasStroke = brushType === 'stroke' || brushType === 'both';
  11790. var hasFill = brushType === 'fill' || brushType === 'both';
  11791. for (var i = 0; i < pathArray.length; i++) {
  11792. var seg = pathArray[i];
  11793. var p = seg.points;
  11794. if (beginSubpath || seg.command === 'M') {
  11795. if (i > 0) {
  11796. if (hasFill) {
  11797. w += windingLine(xi, yi, x0, y0, x, y);
  11798. }
  11799. if (w !== 0) {
  11800. return true;
  11801. }
  11802. }
  11803. x0 = p[p.length - 2];
  11804. y0 = p[p.length - 1];
  11805. beginSubpath = false;
  11806. if (firstCmd && seg.command !== 'A') {
  11807. firstCmd = false;
  11808. xi = x0;
  11809. yi = y0;
  11810. }
  11811. }
  11812. switch (seg.command) {
  11813. case 'M':
  11814. xi = p[0];
  11815. yi = p[1];
  11816. break;
  11817. case 'L':
  11818. if (hasStroke) {
  11819. if (isInsideLine(xi, yi, p[0], p[1], lineWidth, x, y)) {
  11820. return true;
  11821. }
  11822. }
  11823. if (hasFill) {
  11824. w += windingLine(xi, yi, p[0], p[1], x, y);
  11825. }
  11826. xi = p[0];
  11827. yi = p[1];
  11828. break;
  11829. case 'C':
  11830. if (hasStroke) {
  11831. if (isInsideCubicStroke(xi, yi, p[0], p[1], p[2], p[3], p[4], p[5], lineWidth, x, y)) {
  11832. return true;
  11833. }
  11834. }
  11835. if (hasFill) {
  11836. w += windingCubic(xi, yi, p[0], p[1], p[2], p[3], p[4], p[5], x, y);
  11837. }
  11838. xi = p[4];
  11839. yi = p[5];
  11840. break;
  11841. case 'Q':
  11842. if (hasStroke) {
  11843. if (isInsideQuadraticStroke(xi, yi, p[0], p[1], p[2], p[3], lineWidth, x, y)) {
  11844. return true;
  11845. }
  11846. }
  11847. if (hasFill) {
  11848. w += windingQuadratic(xi, yi, p[0], p[1], p[2], p[3], x, y);
  11849. }
  11850. xi = p[2];
  11851. yi = p[3];
  11852. break;
  11853. case 'A':
  11854. var cx = p[0];
  11855. var cy = p[1];
  11856. var rx = p[2];
  11857. var ry = p[3];
  11858. var theta = p[4];
  11859. var dTheta = p[5];
  11860. var x1 = Math.cos(theta) * rx + cx;
  11861. var y1 = Math.sin(theta) * ry + cy;
  11862. if (!firstCmd) {
  11863. w += windingLine(xi, yi, x1, y1);
  11864. } else {
  11865. firstCmd = false;
  11866. x0 = x1;
  11867. y0 = y1;
  11868. }
  11869. var _x = (x - cx) * ry / rx + cx;
  11870. if (hasStroke) {
  11871. if (isInsideArcStroke(cx, cy, ry, theta, theta + dTheta, 1 - p[7], lineWidth, _x, y)) {
  11872. return true;
  11873. }
  11874. }
  11875. if (hasFill) {
  11876. w += windingArc(cx, cy, ry, theta, theta + dTheta, 1 - p[7], _x, y);
  11877. }
  11878. xi = Math.cos(theta + dTheta) * rx + cx;
  11879. yi = Math.sin(theta + dTheta) * ry + cy;
  11880. break;
  11881. case 'z':
  11882. if (hasStroke) {
  11883. if (isInsideLine(xi, yi, x0, y0, lineWidth, x, y)) {
  11884. return true;
  11885. }
  11886. }
  11887. beginSubpath = true;
  11888. break;
  11889. }
  11890. }
  11891. if (hasFill) {
  11892. w += windingLine(xi, yi, x0, y0, x, y);
  11893. }
  11894. return w !== 0;
  11895. }
  11896. function getTextWidth(text, textFont) {
  11897. var key = text + ':' + textFont;
  11898. if (_textWidthCache[key]) {
  11899. return _textWidthCache[key];
  11900. }
  11901. _ctx = _ctx || util.getContext();
  11902. _ctx.save();
  11903. if (textFont) {
  11904. _ctx.font = textFont;
  11905. }
  11906. text = (text + '').split('\n');
  11907. var width = 0;
  11908. for (var i = 0, l = text.length; i < l; i++) {
  11909. width = Math.max(_ctx.measureText(text[i]).width, width);
  11910. }
  11911. _ctx.restore();
  11912. _textWidthCache[key] = width;
  11913. if (++_textWidthCacheCounter > TEXT_CACHE_MAX) {
  11914. _textWidthCacheCounter = 0;
  11915. _textWidthCache = {};
  11916. }
  11917. return width;
  11918. }
  11919. function getTextHeight(text, textFont) {
  11920. var key = text + ':' + textFont;
  11921. if (_textHeightCache[key]) {
  11922. return _textHeightCache[key];
  11923. }
  11924. _ctx = _ctx || util.getContext();
  11925. _ctx.save();
  11926. if (textFont) {
  11927. _ctx.font = textFont;
  11928. }
  11929. text = (text + '').split('\n');
  11930. var height = (_ctx.measureText('国').width + 2) * text.length;
  11931. _ctx.restore();
  11932. _textHeightCache[key] = height;
  11933. if (++_textHeightCacheCounter > TEXT_CACHE_MAX) {
  11934. _textHeightCacheCounter = 0;
  11935. _textHeightCache = {};
  11936. }
  11937. return height;
  11938. }
  11939. return {
  11940. isInside: isInside,
  11941. isOutside: isOutside,
  11942. getTextWidth: getTextWidth,
  11943. getTextHeight: getTextHeight,
  11944. isInsidePath: isInsidePath,
  11945. isInsidePolygon: isInsidePolygon,
  11946. isInsideSector: isInsideSector,
  11947. isInsideCircle: isInsideCircle,
  11948. isInsideLine: isInsideLine,
  11949. isInsideRect: isInsideRect,
  11950. isInsidePolyline: isInsidePolyline,
  11951. isInsideCubicStroke: isInsideCubicStroke,
  11952. isInsideQuadraticStroke: isInsideQuadraticStroke
  11953. };
  11954. });define('zrender/shape/Base', [
  11955. 'require',
  11956. '../tool/matrix',
  11957. '../tool/guid',
  11958. '../tool/util',
  11959. '../tool/log',
  11960. '../mixin/Transformable',
  11961. '../mixin/Eventful',
  11962. '../tool/area',
  11963. '../tool/color'
  11964. ], function (require) {
  11965. var vmlCanvasManager = window['G_vmlCanvasManager'];
  11966. var matrix = require('../tool/matrix');
  11967. var guid = require('../tool/guid');
  11968. var util = require('../tool/util');
  11969. var log = require('../tool/log');
  11970. var Transformable = require('../mixin/Transformable');
  11971. var Eventful = require('../mixin/Eventful');
  11972. function _fillText(ctx, text, x, y, textFont, textAlign, textBaseline) {
  11973. if (textFont) {
  11974. ctx.font = textFont;
  11975. }
  11976. ctx.textAlign = textAlign;
  11977. ctx.textBaseline = textBaseline;
  11978. var rect = _getTextRect(text, x, y, textFont, textAlign, textBaseline);
  11979. text = (text + '').split('\n');
  11980. var lineHeight = require('../tool/area').getTextHeight('国', textFont);
  11981. switch (textBaseline) {
  11982. case 'top':
  11983. y = rect.y;
  11984. break;
  11985. case 'bottom':
  11986. y = rect.y + lineHeight;
  11987. break;
  11988. default:
  11989. y = rect.y + lineHeight / 2;
  11990. }
  11991. for (var i = 0, l = text.length; i < l; i++) {
  11992. ctx.fillText(text[i], x, y);
  11993. y += lineHeight;
  11994. }
  11995. }
  11996. function _getTextRect(text, x, y, textFont, textAlign, textBaseline) {
  11997. var area = require('../tool/area');
  11998. var width = area.getTextWidth(text, textFont);
  11999. var lineHeight = area.getTextHeight('国', textFont);
  12000. text = (text + '').split('\n');
  12001. switch (textAlign) {
  12002. case 'end':
  12003. case 'right':
  12004. x -= width;
  12005. break;
  12006. case 'center':
  12007. x -= width / 2;
  12008. break;
  12009. }
  12010. switch (textBaseline) {
  12011. case 'top':
  12012. break;
  12013. case 'bottom':
  12014. y -= lineHeight * text.length;
  12015. break;
  12016. default:
  12017. y -= lineHeight * text.length / 2;
  12018. }
  12019. return {
  12020. x: x,
  12021. y: y,
  12022. width: width,
  12023. height: lineHeight * text.length
  12024. };
  12025. }
  12026. var Base = function (options) {
  12027. options = options || {};
  12028. this.id = options.id || guid();
  12029. for (var key in options) {
  12030. this[key] = options[key];
  12031. }
  12032. this.style = this.style || {};
  12033. this.highlightStyle = this.highlightStyle || null;
  12034. this.parent = null;
  12035. this.__dirty = true;
  12036. this.__clipShapes = [];
  12037. Transformable.call(this);
  12038. Eventful.call(this);
  12039. };
  12040. Base.prototype.invisible = false;
  12041. Base.prototype.ignore = false;
  12042. Base.prototype.zlevel = 0;
  12043. Base.prototype.draggable = false;
  12044. Base.prototype.clickable = false;
  12045. Base.prototype.hoverable = true;
  12046. Base.prototype.z = 0;
  12047. Base.prototype.brush = function (ctx, isHighlight) {
  12048. var style = this.beforeBrush(ctx, isHighlight);
  12049. ctx.beginPath();
  12050. this.buildPath(ctx, style);
  12051. switch (style.brushType) {
  12052. case 'both':
  12053. ctx.fill();
  12054. case 'stroke':
  12055. style.lineWidth > 0 && ctx.stroke();
  12056. break;
  12057. default:
  12058. ctx.fill();
  12059. }
  12060. this.drawText(ctx, style, this.style);
  12061. this.afterBrush(ctx);
  12062. };
  12063. Base.prototype.beforeBrush = function (ctx, isHighlight) {
  12064. var style = this.style;
  12065. if (this.brushTypeOnly) {
  12066. style.brushType = this.brushTypeOnly;
  12067. }
  12068. if (isHighlight) {
  12069. style = this.getHighlightStyle(style, this.highlightStyle || {}, this.brushTypeOnly);
  12070. }
  12071. if (this.brushTypeOnly == 'stroke') {
  12072. style.strokeColor = style.strokeColor || style.color;
  12073. }
  12074. ctx.save();
  12075. this.doClip(ctx);
  12076. this.setContext(ctx, style);
  12077. this.setTransform(ctx);
  12078. return style;
  12079. };
  12080. Base.prototype.afterBrush = function (ctx) {
  12081. ctx.restore();
  12082. };
  12083. var STYLE_CTX_MAP = [
  12084. [
  12085. 'color',
  12086. 'fillStyle'
  12087. ],
  12088. [
  12089. 'strokeColor',
  12090. 'strokeStyle'
  12091. ],
  12092. [
  12093. 'opacity',
  12094. 'globalAlpha'
  12095. ],
  12096. [
  12097. 'lineCap',
  12098. 'lineCap'
  12099. ],
  12100. [
  12101. 'lineJoin',
  12102. 'lineJoin'
  12103. ],
  12104. [
  12105. 'miterLimit',
  12106. 'miterLimit'
  12107. ],
  12108. [
  12109. 'lineWidth',
  12110. 'lineWidth'
  12111. ],
  12112. [
  12113. 'shadowBlur',
  12114. 'shadowBlur'
  12115. ],
  12116. [
  12117. 'shadowColor',
  12118. 'shadowColor'
  12119. ],
  12120. [
  12121. 'shadowOffsetX',
  12122. 'shadowOffsetX'
  12123. ],
  12124. [
  12125. 'shadowOffsetY',
  12126. 'shadowOffsetY'
  12127. ]
  12128. ];
  12129. Base.prototype.setContext = function (ctx, style) {
  12130. for (var i = 0, len = STYLE_CTX_MAP.length; i < len; i++) {
  12131. var styleProp = STYLE_CTX_MAP[i][0];
  12132. var styleValue = style[styleProp];
  12133. var ctxProp = STYLE_CTX_MAP[i][1];
  12134. if (typeof styleValue != 'undefined') {
  12135. ctx[ctxProp] = styleValue;
  12136. }
  12137. }
  12138. };
  12139. var clipShapeInvTransform = matrix.create();
  12140. Base.prototype.doClip = function (ctx) {
  12141. if (this.__clipShapes && !vmlCanvasManager) {
  12142. for (var i = 0; i < this.__clipShapes.length; i++) {
  12143. var clipShape = this.__clipShapes[i];
  12144. if (clipShape.needTransform) {
  12145. var m = clipShape.transform;
  12146. matrix.invert(clipShapeInvTransform, m);
  12147. ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
  12148. }
  12149. ctx.beginPath();
  12150. clipShape.buildPath(ctx, clipShape.style);
  12151. ctx.clip();
  12152. if (clipShape.needTransform) {
  12153. var m = clipShapeInvTransform;
  12154. ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
  12155. }
  12156. }
  12157. }
  12158. };
  12159. Base.prototype.getHighlightStyle = function (style, highlightStyle, brushTypeOnly) {
  12160. var newStyle = {};
  12161. for (var k in style) {
  12162. newStyle[k] = style[k];
  12163. }
  12164. var color = require('../tool/color');
  12165. var highlightColor = color.getHighlightColor();
  12166. if (style.brushType != 'stroke') {
  12167. newStyle.strokeColor = highlightColor;
  12168. newStyle.lineWidth = (style.lineWidth || 1) + this.getHighlightZoom();
  12169. newStyle.brushType = 'both';
  12170. } else {
  12171. if (brushTypeOnly != 'stroke') {
  12172. newStyle.strokeColor = highlightColor;
  12173. newStyle.lineWidth = (style.lineWidth || 1) + this.getHighlightZoom();
  12174. } else {
  12175. newStyle.strokeColor = highlightStyle.strokeColor || color.mix(style.strokeColor, color.toRGB(highlightColor));
  12176. }
  12177. }
  12178. for (var k in highlightStyle) {
  12179. if (typeof highlightStyle[k] != 'undefined') {
  12180. newStyle[k] = highlightStyle[k];
  12181. }
  12182. }
  12183. return newStyle;
  12184. };
  12185. Base.prototype.getHighlightZoom = function () {
  12186. return this.type != 'text' ? 6 : 2;
  12187. };
  12188. Base.prototype.drift = function (dx, dy) {
  12189. this.position[0] += dx;
  12190. this.position[1] += dy;
  12191. };
  12192. Base.prototype.buildPath = function (ctx, style) {
  12193. log('buildPath not implemented in ' + this.type);
  12194. };
  12195. Base.prototype.getRect = function (style) {
  12196. log('getRect not implemented in ' + this.type);
  12197. };
  12198. Base.prototype.isCover = function (x, y) {
  12199. var originPos = this.transformCoordToLocal(x, y);
  12200. x = originPos[0];
  12201. y = originPos[1];
  12202. if (this.isCoverRect(x, y)) {
  12203. return require('../tool/area').isInside(this, this.style, x, y);
  12204. }
  12205. return false;
  12206. };
  12207. Base.prototype.isCoverRect = function (x, y) {
  12208. var rect = this.style.__rect;
  12209. if (!rect) {
  12210. rect = this.style.__rect = this.getRect(this.style);
  12211. }
  12212. return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;
  12213. };
  12214. Base.prototype.drawText = function (ctx, style, normalStyle) {
  12215. if (typeof style.text == 'undefined' || style.text === false) {
  12216. return;
  12217. }
  12218. var textColor = style.textColor || style.color || style.strokeColor;
  12219. ctx.fillStyle = textColor;
  12220. var dd = 10;
  12221. var al;
  12222. var bl;
  12223. var tx;
  12224. var ty;
  12225. var textPosition = style.textPosition || this.textPosition || 'top';
  12226. switch (textPosition) {
  12227. case 'inside':
  12228. case 'top':
  12229. case 'bottom':
  12230. case 'left':
  12231. case 'right':
  12232. if (this.getRect) {
  12233. var rect = (normalStyle || style).__rect || this.getRect(normalStyle || style);
  12234. switch (textPosition) {
  12235. case 'inside':
  12236. tx = rect.x + rect.width / 2;
  12237. ty = rect.y + rect.height / 2;
  12238. al = 'center';
  12239. bl = 'middle';
  12240. if (style.brushType != 'stroke' && textColor == style.color) {
  12241. ctx.fillStyle = '#fff';
  12242. }
  12243. break;
  12244. case 'left':
  12245. tx = rect.x - dd;
  12246. ty = rect.y + rect.height / 2;
  12247. al = 'end';
  12248. bl = 'middle';
  12249. break;
  12250. case 'right':
  12251. tx = rect.x + rect.width + dd;
  12252. ty = rect.y + rect.height / 2;
  12253. al = 'start';
  12254. bl = 'middle';
  12255. break;
  12256. case 'top':
  12257. tx = rect.x + rect.width / 2;
  12258. ty = rect.y - dd;
  12259. al = 'center';
  12260. bl = 'bottom';
  12261. break;
  12262. case 'bottom':
  12263. tx = rect.x + rect.width / 2;
  12264. ty = rect.y + rect.height + dd;
  12265. al = 'center';
  12266. bl = 'top';
  12267. break;
  12268. }
  12269. }
  12270. break;
  12271. case 'start':
  12272. case 'end':
  12273. var pointList = style.pointList || [
  12274. [
  12275. style.xStart || 0,
  12276. style.yStart || 0
  12277. ],
  12278. [
  12279. style.xEnd || 0,
  12280. style.yEnd || 0
  12281. ]
  12282. ];
  12283. var length = pointList.length;
  12284. if (length < 2) {
  12285. return;
  12286. }
  12287. var xStart;
  12288. var xEnd;
  12289. var yStart;
  12290. var yEnd;
  12291. switch (textPosition) {
  12292. case 'start':
  12293. xStart = pointList[1][0];
  12294. xEnd = pointList[0][0];
  12295. yStart = pointList[1][1];
  12296. yEnd = pointList[0][1];
  12297. break;
  12298. case 'end':
  12299. xStart = pointList[length - 2][0];
  12300. xEnd = pointList[length - 1][0];
  12301. yStart = pointList[length - 2][1];
  12302. yEnd = pointList[length - 1][1];
  12303. break;
  12304. }
  12305. tx = xEnd;
  12306. ty = yEnd;
  12307. var angle = Math.atan((yStart - yEnd) / (xEnd - xStart)) / Math.PI * 180;
  12308. if (xEnd - xStart < 0) {
  12309. angle += 180;
  12310. } else if (yStart - yEnd < 0) {
  12311. angle += 360;
  12312. }
  12313. dd = 5;
  12314. if (angle >= 30 && angle <= 150) {
  12315. al = 'center';
  12316. bl = 'bottom';
  12317. ty -= dd;
  12318. } else if (angle > 150 && angle < 210) {
  12319. al = 'right';
  12320. bl = 'middle';
  12321. tx -= dd;
  12322. } else if (angle >= 210 && angle <= 330) {
  12323. al = 'center';
  12324. bl = 'top';
  12325. ty += dd;
  12326. } else {
  12327. al = 'left';
  12328. bl = 'middle';
  12329. tx += dd;
  12330. }
  12331. break;
  12332. case 'specific':
  12333. tx = style.textX || 0;
  12334. ty = style.textY || 0;
  12335. al = 'start';
  12336. bl = 'middle';
  12337. break;
  12338. }
  12339. if (tx != null && ty != null) {
  12340. _fillText(ctx, style.text, tx, ty, style.textFont, style.textAlign || al, style.textBaseline || bl);
  12341. }
  12342. };
  12343. Base.prototype.modSelf = function () {
  12344. this.__dirty = true;
  12345. if (this.style) {
  12346. this.style.__rect = null;
  12347. }
  12348. if (this.highlightStyle) {
  12349. this.highlightStyle.__rect = null;
  12350. }
  12351. };
  12352. Base.prototype.isSilent = function () {
  12353. 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);
  12354. };
  12355. util.merge(Base.prototype, Transformable.prototype, true);
  12356. util.merge(Base.prototype, Eventful.prototype, true);
  12357. return Base;
  12358. });define('zrender/tool/curve', [
  12359. 'require',
  12360. './vector'
  12361. ], function (require) {
  12362. var vector = require('./vector');
  12363. 'use strict';
  12364. var EPSILON = 0.0001;
  12365. var THREE_SQRT = Math.sqrt(3);
  12366. var ONE_THIRD = 1 / 3;
  12367. var _v0 = vector.create();
  12368. var _v1 = vector.create();
  12369. var _v2 = vector.create();
  12370. function isAroundZero(val) {
  12371. return val > -EPSILON && val < EPSILON;
  12372. }
  12373. function isNotAroundZero(val) {
  12374. return val > EPSILON || val < -EPSILON;
  12375. }
  12376. function cubicAt(p0, p1, p2, p3, t) {
  12377. var onet = 1 - t;
  12378. return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);
  12379. }
  12380. function cubicDerivativeAt(p0, p1, p2, p3, t) {
  12381. var onet = 1 - t;
  12382. return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + (p3 - p2) * t * t);
  12383. }
  12384. function cubicRootAt(p0, p1, p2, p3, val, roots) {
  12385. var a = p3 + 3 * (p1 - p2) - p0;
  12386. var b = 3 * (p2 - p1 * 2 + p0);
  12387. var c = 3 * (p1 - p0);
  12388. var d = p0 - val;
  12389. var A = b * b - 3 * a * c;
  12390. var B = b * c - 9 * a * d;
  12391. var C = c * c - 3 * b * d;
  12392. var n = 0;
  12393. if (isAroundZero(A) && isAroundZero(B)) {
  12394. if (isAroundZero(b)) {
  12395. roots[0] = 0;
  12396. } else {
  12397. var t1 = -c / b;
  12398. if (t1 >= 0 && t1 <= 1) {
  12399. roots[n++] = t1;
  12400. }
  12401. }
  12402. } else {
  12403. var disc = B * B - 4 * A * C;
  12404. if (isAroundZero(disc)) {
  12405. var K = B / A;
  12406. var t1 = -b / a + K;
  12407. var t2 = -K / 2;
  12408. if (t1 >= 0 && t1 <= 1) {
  12409. roots[n++] = t1;
  12410. }
  12411. if (t2 >= 0 && t2 <= 1) {
  12412. roots[n++] = t2;
  12413. }
  12414. } else if (disc > 0) {
  12415. var discSqrt = Math.sqrt(disc);
  12416. var Y1 = A * b + 1.5 * a * (-B + discSqrt);
  12417. var Y2 = A * b + 1.5 * a * (-B - discSqrt);
  12418. if (Y1 < 0) {
  12419. Y1 = -Math.pow(-Y1, ONE_THIRD);
  12420. } else {
  12421. Y1 = Math.pow(Y1, ONE_THIRD);
  12422. }
  12423. if (Y2 < 0) {
  12424. Y2 = -Math.pow(-Y2, ONE_THIRD);
  12425. } else {
  12426. Y2 = Math.pow(Y2, ONE_THIRD);
  12427. }
  12428. var t1 = (-b - (Y1 + Y2)) / (3 * a);
  12429. if (t1 >= 0 && t1 <= 1) {
  12430. roots[n++] = t1;
  12431. }
  12432. } else {
  12433. var T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));
  12434. var theta = Math.acos(T) / 3;
  12435. var ASqrt = Math.sqrt(A);
  12436. var tmp = Math.cos(theta);
  12437. var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);
  12438. var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);
  12439. var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);
  12440. if (t1 >= 0 && t1 <= 1) {
  12441. roots[n++] = t1;
  12442. }
  12443. if (t2 >= 0 && t2 <= 1) {
  12444. roots[n++] = t2;
  12445. }
  12446. if (t3 >= 0 && t3 <= 1) {
  12447. roots[n++] = t3;
  12448. }
  12449. }
  12450. }
  12451. return n;
  12452. }
  12453. function cubicExtrema(p0, p1, p2, p3, extrema) {
  12454. var b = 6 * p2 - 12 * p1 + 6 * p0;
  12455. var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;
  12456. var c = 3 * p1 - 3 * p0;
  12457. var n = 0;
  12458. if (isAroundZero(a)) {
  12459. if (isNotAroundZero(b)) {
  12460. var t1 = -c / b;
  12461. if (t1 >= 0 && t1 <= 1) {
  12462. extrema[n++] = t1;
  12463. }
  12464. }
  12465. } else {
  12466. var disc = b * b - 4 * a * c;
  12467. if (isAroundZero(disc)) {
  12468. extrema[0] = -b / (2 * a);
  12469. } else if (disc > 0) {
  12470. var discSqrt = Math.sqrt(disc);
  12471. var t1 = (-b + discSqrt) / (2 * a);
  12472. var t2 = (-b - discSqrt) / (2 * a);
  12473. if (t1 >= 0 && t1 <= 1) {
  12474. extrema[n++] = t1;
  12475. }
  12476. if (t2 >= 0 && t2 <= 1) {
  12477. extrema[n++] = t2;
  12478. }
  12479. }
  12480. }
  12481. return n;
  12482. }
  12483. function cubicSubdivide(p0, p1, p2, p3, t, out) {
  12484. var p01 = (p1 - p0) * t + p0;
  12485. var p12 = (p2 - p1) * t + p1;
  12486. var p23 = (p3 - p2) * t + p2;
  12487. var p012 = (p12 - p01) * t + p01;
  12488. var p123 = (p23 - p12) * t + p12;
  12489. var p0123 = (p123 - p012) * t + p012;
  12490. out[0] = p0;
  12491. out[1] = p01;
  12492. out[2] = p012;
  12493. out[3] = p0123;
  12494. out[4] = p0123;
  12495. out[5] = p123;
  12496. out[6] = p23;
  12497. out[7] = p3;
  12498. }
  12499. function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) {
  12500. var t;
  12501. var interval = 0.005;
  12502. var d = Infinity;
  12503. _v0[0] = x;
  12504. _v0[1] = y;
  12505. for (var _t = 0; _t < 1; _t += 0.05) {
  12506. _v1[0] = cubicAt(x0, x1, x2, x3, _t);
  12507. _v1[1] = cubicAt(y0, y1, y2, y3, _t);
  12508. var d1 = vector.distSquare(_v0, _v1);
  12509. if (d1 < d) {
  12510. t = _t;
  12511. d = d1;
  12512. }
  12513. }
  12514. d = Infinity;
  12515. for (var i = 0; i < 32; i++) {
  12516. if (interval < EPSILON) {
  12517. break;
  12518. }
  12519. var prev = t - interval;
  12520. var next = t + interval;
  12521. _v1[0] = cubicAt(x0, x1, x2, x3, prev);
  12522. _v1[1] = cubicAt(y0, y1, y2, y3, prev);
  12523. var d1 = vector.distSquare(_v1, _v0);
  12524. if (prev >= 0 && d1 < d) {
  12525. t = prev;
  12526. d = d1;
  12527. } else {
  12528. _v2[0] = cubicAt(x0, x1, x2, x3, next);
  12529. _v2[1] = cubicAt(y0, y1, y2, y3, next);
  12530. var d2 = vector.distSquare(_v2, _v0);
  12531. if (next <= 1 && d2 < d) {
  12532. t = next;
  12533. d = d2;
  12534. } else {
  12535. interval *= 0.5;
  12536. }
  12537. }
  12538. }
  12539. if (out) {
  12540. out[0] = cubicAt(x0, x1, x2, x3, t);
  12541. out[1] = cubicAt(y0, y1, y2, y3, t);
  12542. }
  12543. return Math.sqrt(d);
  12544. }
  12545. function quadraticAt(p0, p1, p2, t) {
  12546. var onet = 1 - t;
  12547. return onet * (onet * p0 + 2 * t * p1) + t * t * p2;
  12548. }
  12549. function quadraticDerivativeAt(p0, p1, p2, t) {
  12550. return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));
  12551. }
  12552. function quadraticRootAt(p0, p1, p2, val, roots) {
  12553. var a = p0 - 2 * p1 + p2;
  12554. var b = 2 * (p1 - p0);
  12555. var c = p0 - val;
  12556. var n = 0;
  12557. if (isAroundZero(a)) {
  12558. if (isNotAroundZero(b)) {
  12559. var t1 = -c / b;
  12560. if (t1 >= 0 && t1 <= 1) {
  12561. roots[n++] = t1;
  12562. }
  12563. }
  12564. } else {
  12565. var disc = b * b - 4 * a * c;
  12566. if (isAroundZero(disc)) {
  12567. var t1 = -b / (2 * a);
  12568. if (t1 >= 0 && t1 <= 1) {
  12569. roots[n++] = t1;
  12570. }
  12571. } else if (disc > 0) {
  12572. var discSqrt = Math.sqrt(disc);
  12573. var t1 = (-b + discSqrt) / (2 * a);
  12574. var t2 = (-b - discSqrt) / (2 * a);
  12575. if (t1 >= 0 && t1 <= 1) {
  12576. roots[n++] = t1;
  12577. }
  12578. if (t2 >= 0 && t2 <= 1) {
  12579. roots[n++] = t2;
  12580. }
  12581. }
  12582. }
  12583. return n;
  12584. }
  12585. function quadraticExtremum(p0, p1, p2) {
  12586. var divider = p0 + p2 - 2 * p1;
  12587. if (divider === 0) {
  12588. return 0.5;
  12589. } else {
  12590. return (p0 - p1) / divider;
  12591. }
  12592. }
  12593. function quadraticSubdivide(p0, p1, p2, t, out) {
  12594. var p01 = (p1 - p0) * t + p0;
  12595. var p12 = (p2 - p1) * t + p1;
  12596. var p012 = (p12 - p01) * t + p01;
  12597. out[0] = p0;
  12598. out[1] = p01;
  12599. out[2] = p012;
  12600. out[3] = p012;
  12601. out[4] = p12;
  12602. out[5] = p2;
  12603. }
  12604. function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) {
  12605. var t;
  12606. var interval = 0.005;
  12607. var d = Infinity;
  12608. _v0[0] = x;
  12609. _v0[1] = y;
  12610. for (var _t = 0; _t < 1; _t += 0.05) {
  12611. _v1[0] = quadraticAt(x0, x1, x2, _t);
  12612. _v1[1] = quadraticAt(y0, y1, y2, _t);
  12613. var d1 = vector.distSquare(_v0, _v1);
  12614. if (d1 < d) {
  12615. t = _t;
  12616. d = d1;
  12617. }
  12618. }
  12619. d = Infinity;
  12620. for (var i = 0; i < 32; i++) {
  12621. if (interval < EPSILON) {
  12622. break;
  12623. }
  12624. var prev = t - interval;
  12625. var next = t + interval;
  12626. _v1[0] = quadraticAt(x0, x1, x2, prev);
  12627. _v1[1] = quadraticAt(y0, y1, y2, prev);
  12628. var d1 = vector.distSquare(_v1, _v0);
  12629. if (prev >= 0 && d1 < d) {
  12630. t = prev;
  12631. d = d1;
  12632. } else {
  12633. _v2[0] = quadraticAt(x0, x1, x2, next);
  12634. _v2[1] = quadraticAt(y0, y1, y2, next);
  12635. var d2 = vector.distSquare(_v2, _v0);
  12636. if (next <= 1 && d2 < d) {
  12637. t = next;
  12638. d = d2;
  12639. } else {
  12640. interval *= 0.5;
  12641. }
  12642. }
  12643. }
  12644. if (out) {
  12645. out[0] = quadraticAt(x0, x1, x2, t);
  12646. out[1] = quadraticAt(y0, y1, y2, t);
  12647. }
  12648. return Math.sqrt(d);
  12649. }
  12650. return {
  12651. cubicAt: cubicAt,
  12652. cubicDerivativeAt: cubicDerivativeAt,
  12653. cubicRootAt: cubicRootAt,
  12654. cubicExtrema: cubicExtrema,
  12655. cubicSubdivide: cubicSubdivide,
  12656. cubicProjectPoint: cubicProjectPoint,
  12657. quadraticAt: quadraticAt,
  12658. quadraticDerivativeAt: quadraticDerivativeAt,
  12659. quadraticRootAt: quadraticRootAt,
  12660. quadraticExtremum: quadraticExtremum,
  12661. quadraticSubdivide: quadraticSubdivide,
  12662. quadraticProjectPoint: quadraticProjectPoint
  12663. };
  12664. });define('zrender/mixin/Transformable', [
  12665. 'require',
  12666. '../tool/matrix',
  12667. '../tool/vector'
  12668. ], function (require) {
  12669. 'use strict';
  12670. var matrix = require('../tool/matrix');
  12671. var vector = require('../tool/vector');
  12672. var origin = [
  12673. 0,
  12674. 0
  12675. ];
  12676. var mTranslate = matrix.translate;
  12677. var EPSILON = 0.00005;
  12678. function isAroundZero(val) {
  12679. return val > -EPSILON && val < EPSILON;
  12680. }
  12681. function isNotAroundZero(val) {
  12682. return val > EPSILON || val < -EPSILON;
  12683. }
  12684. var Transformable = function () {
  12685. if (!this.position) {
  12686. this.position = [
  12687. 0,
  12688. 0
  12689. ];
  12690. }
  12691. if (typeof this.rotation == 'undefined') {
  12692. this.rotation = [
  12693. 0,
  12694. 0,
  12695. 0
  12696. ];
  12697. }
  12698. if (!this.scale) {
  12699. this.scale = [
  12700. 1,
  12701. 1,
  12702. 0,
  12703. 0
  12704. ];
  12705. }
  12706. this.needLocalTransform = false;
  12707. this.needTransform = false;
  12708. };
  12709. Transformable.prototype = {
  12710. constructor: Transformable,
  12711. updateNeedTransform: function () {
  12712. this.needLocalTransform = isNotAroundZero(this.rotation[0]) || isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1]) || isNotAroundZero(this.scale[0] - 1) || isNotAroundZero(this.scale[1] - 1);
  12713. },
  12714. updateTransform: function () {
  12715. this.updateNeedTransform();
  12716. var parentHasTransform = this.parent && this.parent.needTransform;
  12717. this.needTransform = this.needLocalTransform || parentHasTransform;
  12718. if (!this.needTransform) {
  12719. return;
  12720. }
  12721. var m = this.transform || matrix.create();
  12722. matrix.identity(m);
  12723. if (this.needLocalTransform) {
  12724. var scale = this.scale;
  12725. if (isNotAroundZero(scale[0]) || isNotAroundZero(scale[1])) {
  12726. origin[0] = -scale[2] || 0;
  12727. origin[1] = -scale[3] || 0;
  12728. var haveOrigin = isNotAroundZero(origin[0]) || isNotAroundZero(origin[1]);
  12729. if (haveOrigin) {
  12730. mTranslate(m, m, origin);
  12731. }
  12732. matrix.scale(m, m, scale);
  12733. if (haveOrigin) {
  12734. origin[0] = -origin[0];
  12735. origin[1] = -origin[1];
  12736. mTranslate(m, m, origin);
  12737. }
  12738. }
  12739. if (this.rotation instanceof Array) {
  12740. if (this.rotation[0] !== 0) {
  12741. origin[0] = -this.rotation[1] || 0;
  12742. origin[1] = -this.rotation[2] || 0;
  12743. var haveOrigin = isNotAroundZero(origin[0]) || isNotAroundZero(origin[1]);
  12744. if (haveOrigin) {
  12745. mTranslate(m, m, origin);
  12746. }
  12747. matrix.rotate(m, m, this.rotation[0]);
  12748. if (haveOrigin) {
  12749. origin[0] = -origin[0];
  12750. origin[1] = -origin[1];
  12751. mTranslate(m, m, origin);
  12752. }
  12753. }
  12754. } else {
  12755. if (this.rotation !== 0) {
  12756. matrix.rotate(m, m, this.rotation);
  12757. }
  12758. }
  12759. if (isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1])) {
  12760. mTranslate(m, m, this.position);
  12761. }
  12762. }
  12763. if (parentHasTransform) {
  12764. if (this.needLocalTransform) {
  12765. matrix.mul(m, this.parent.transform, m);
  12766. } else {
  12767. matrix.copy(m, this.parent.transform);
  12768. }
  12769. }
  12770. this.transform = m;
  12771. this.invTransform = this.invTransform || matrix.create();
  12772. matrix.invert(this.invTransform, m);
  12773. },
  12774. setTransform: function (ctx) {
  12775. if (this.needTransform) {
  12776. var m = this.transform;
  12777. ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
  12778. }
  12779. },
  12780. lookAt: function () {
  12781. var v = vector.create();
  12782. return function (target) {
  12783. if (!this.transform) {
  12784. this.transform = matrix.create();
  12785. }
  12786. var m = this.transform;
  12787. vector.sub(v, target, this.position);
  12788. if (isAroundZero(v[0]) && isAroundZero(v[1])) {
  12789. return;
  12790. }
  12791. vector.normalize(v, v);
  12792. var scale = this.scale;
  12793. m[2] = v[0] * scale[1];
  12794. m[3] = v[1] * scale[1];
  12795. m[0] = v[1] * scale[0];
  12796. m[1] = -v[0] * scale[0];
  12797. m[4] = this.position[0];
  12798. m[5] = this.position[1];
  12799. this.decomposeTransform();
  12800. };
  12801. }(),
  12802. decomposeTransform: function () {
  12803. if (!this.transform) {
  12804. return;
  12805. }
  12806. var m = this.transform;
  12807. var sx = m[0] * m[0] + m[1] * m[1];
  12808. var position = this.position;
  12809. var scale = this.scale;
  12810. var rotation = this.rotation;
  12811. if (isNotAroundZero(sx - 1)) {
  12812. sx = Math.sqrt(sx);
  12813. }
  12814. var sy = m[2] * m[2] + m[3] * m[3];
  12815. if (isNotAroundZero(sy - 1)) {
  12816. sy = Math.sqrt(sy);
  12817. }
  12818. position[0] = m[4];
  12819. position[1] = m[5];
  12820. scale[0] = sx;
  12821. scale[1] = sy;
  12822. scale[2] = scale[3] = 0;
  12823. rotation[0] = Math.atan2(-m[1] / sy, m[0] / sx);
  12824. rotation[1] = rotation[2] = 0;
  12825. },
  12826. transformCoordToLocal: function (x, y) {
  12827. var v2 = [
  12828. x,
  12829. y
  12830. ];
  12831. if (this.needTransform && this.invTransform) {
  12832. matrix.mulVector(v2, this.invTransform, v2);
  12833. }
  12834. return v2;
  12835. }
  12836. };
  12837. return Transformable;
  12838. });define('zrender/Group', [
  12839. 'require',
  12840. './tool/guid',
  12841. './tool/util',
  12842. './mixin/Transformable',
  12843. './mixin/Eventful'
  12844. ], function (require) {
  12845. var guid = require('./tool/guid');
  12846. var util = require('./tool/util');
  12847. var Transformable = require('./mixin/Transformable');
  12848. var Eventful = require('./mixin/Eventful');
  12849. var Group = function (options) {
  12850. options = options || {};
  12851. this.id = options.id || guid();
  12852. for (var key in options) {
  12853. this[key] = options[key];
  12854. }
  12855. this.type = 'group';
  12856. this.clipShape = null;
  12857. this._children = [];
  12858. this._storage = null;
  12859. this.__dirty = true;
  12860. Transformable.call(this);
  12861. Eventful.call(this);
  12862. };
  12863. Group.prototype.ignore = false;
  12864. Group.prototype.children = function () {
  12865. return this._children.slice();
  12866. };
  12867. Group.prototype.childAt = function (idx) {
  12868. return this._children[idx];
  12869. };
  12870. Group.prototype.addChild = function (child) {
  12871. if (child == this) {
  12872. return;
  12873. }
  12874. if (child.parent == this) {
  12875. return;
  12876. }
  12877. if (child.parent) {
  12878. child.parent.removeChild(child);
  12879. }
  12880. this._children.push(child);
  12881. child.parent = this;
  12882. if (this._storage && this._storage !== child._storage) {
  12883. this._storage.addToMap(child);
  12884. if (child instanceof Group) {
  12885. child.addChildrenToStorage(this._storage);
  12886. }
  12887. }
  12888. };
  12889. Group.prototype.removeChild = function (child) {
  12890. var idx = util.indexOf(this._children, child);
  12891. if (idx >= 0) {
  12892. this._children.splice(idx, 1);
  12893. }
  12894. child.parent = null;
  12895. if (this._storage) {
  12896. this._storage.delFromMap(child.id);
  12897. if (child instanceof Group) {
  12898. child.delChildrenFromStorage(this._storage);
  12899. }
  12900. }
  12901. };
  12902. Group.prototype.clearChildren = function () {
  12903. for (var i = 0; i < this._children.length; i++) {
  12904. var child = this._children[i];
  12905. if (this._storage) {
  12906. this._storage.delFromMap(child.id);
  12907. if (child instanceof Group) {
  12908. child.delChildrenFromStorage(this._storage);
  12909. }
  12910. }
  12911. }
  12912. this._children.length = 0;
  12913. };
  12914. Group.prototype.eachChild = function (cb, context) {
  12915. var haveContext = !!context;
  12916. for (var i = 0; i < this._children.length; i++) {
  12917. var child = this._children[i];
  12918. if (haveContext) {
  12919. cb.call(context, child);
  12920. } else {
  12921. cb(child);
  12922. }
  12923. }
  12924. };
  12925. Group.prototype.traverse = function (cb, context) {
  12926. var haveContext = !!context;
  12927. for (var i = 0; i < this._children.length; i++) {
  12928. var child = this._children[i];
  12929. if (haveContext) {
  12930. cb.call(context, child);
  12931. } else {
  12932. cb(child);
  12933. }
  12934. if (child.type === 'group') {
  12935. child.traverse(cb, context);
  12936. }
  12937. }
  12938. };
  12939. Group.prototype.addChildrenToStorage = function (storage) {
  12940. for (var i = 0; i < this._children.length; i++) {
  12941. var child = this._children[i];
  12942. storage.addToMap(child);
  12943. if (child instanceof Group) {
  12944. child.addChildrenToStorage(storage);
  12945. }
  12946. }
  12947. };
  12948. Group.prototype.delChildrenFromStorage = function (storage) {
  12949. for (var i = 0; i < this._children.length; i++) {
  12950. var child = this._children[i];
  12951. storage.delFromMap(child.id);
  12952. if (child instanceof Group) {
  12953. child.delChildrenFromStorage(storage);
  12954. }
  12955. }
  12956. };
  12957. Group.prototype.modSelf = function () {
  12958. this.__dirty = true;
  12959. };
  12960. util.merge(Group.prototype, Transformable.prototype, true);
  12961. util.merge(Group.prototype, Eventful.prototype, true);
  12962. return Group;
  12963. });define('zrender/animation/Clip', [
  12964. 'require',
  12965. './easing'
  12966. ], function (require) {
  12967. var Easing = require('./easing');
  12968. function Clip(options) {
  12969. this._targetPool = options.target || {};
  12970. if (!(this._targetPool instanceof Array)) {
  12971. this._targetPool = [this._targetPool];
  12972. }
  12973. this._life = options.life || 1000;
  12974. this._delay = options.delay || 0;
  12975. this._startTime = new Date().getTime() + this._delay;
  12976. this._endTime = this._startTime + this._life * 1000;
  12977. this.loop = typeof options.loop == 'undefined' ? false : options.loop;
  12978. this.gap = options.gap || 0;
  12979. this.easing = options.easing || 'Linear';
  12980. this.onframe = options.onframe;
  12981. this.ondestroy = options.ondestroy;
  12982. this.onrestart = options.onrestart;
  12983. }
  12984. Clip.prototype = {
  12985. step: function (time) {
  12986. var percent = (time - this._startTime) / this._life;
  12987. if (percent < 0) {
  12988. return;
  12989. }
  12990. percent = Math.min(percent, 1);
  12991. var easingFunc = typeof this.easing == 'string' ? Easing[this.easing] : this.easing;
  12992. var schedule = typeof easingFunc === 'function' ? easingFunc(percent) : percent;
  12993. this.fire('frame', schedule);
  12994. if (percent == 1) {
  12995. if (this.loop) {
  12996. this.restart();
  12997. return 'restart';
  12998. }
  12999. this._needsRemove = true;
  13000. return 'destroy';
  13001. }
  13002. return null;
  13003. },
  13004. restart: function () {
  13005. var time = new Date().getTime();
  13006. var remainder = (time - this._startTime) % this._life;
  13007. this._startTime = new Date().getTime() - remainder + this.gap;
  13008. this._needsRemove = false;
  13009. },
  13010. fire: function (eventType, arg) {
  13011. for (var i = 0, len = this._targetPool.length; i < len; i++) {
  13012. if (this['on' + eventType]) {
  13013. this['on' + eventType](this._targetPool[i], arg);
  13014. }
  13015. }
  13016. },
  13017. constructor: Clip
  13018. };
  13019. return Clip;
  13020. });define('zrender/animation/easing', [], function () {
  13021. var easing = {
  13022. Linear: function (k) {
  13023. return k;
  13024. },
  13025. QuadraticIn: function (k) {
  13026. return k * k;
  13027. },
  13028. QuadraticOut: function (k) {
  13029. return k * (2 - k);
  13030. },
  13031. QuadraticInOut: function (k) {
  13032. if ((k *= 2) < 1) {
  13033. return 0.5 * k * k;
  13034. }
  13035. return -0.5 * (--k * (k - 2) - 1);
  13036. },
  13037. CubicIn: function (k) {
  13038. return k * k * k;
  13039. },
  13040. CubicOut: function (k) {
  13041. return --k * k * k + 1;
  13042. },
  13043. CubicInOut: function (k) {
  13044. if ((k *= 2) < 1) {
  13045. return 0.5 * k * k * k;
  13046. }
  13047. return 0.5 * ((k -= 2) * k * k + 2);
  13048. },
  13049. QuarticIn: function (k) {
  13050. return k * k * k * k;
  13051. },
  13052. QuarticOut: function (k) {
  13053. return 1 - --k * k * k * k;
  13054. },
  13055. QuarticInOut: function (k) {
  13056. if ((k *= 2) < 1) {
  13057. return 0.5 * k * k * k * k;
  13058. }
  13059. return -0.5 * ((k -= 2) * k * k * k - 2);
  13060. },
  13061. QuinticIn: function (k) {
  13062. return k * k * k * k * k;
  13063. },
  13064. QuinticOut: function (k) {
  13065. return --k * k * k * k * k + 1;
  13066. },
  13067. QuinticInOut: function (k) {
  13068. if ((k *= 2) < 1) {
  13069. return 0.5 * k * k * k * k * k;
  13070. }
  13071. return 0.5 * ((k -= 2) * k * k * k * k + 2);
  13072. },
  13073. SinusoidalIn: function (k) {
  13074. return 1 - Math.cos(k * Math.PI / 2);
  13075. },
  13076. SinusoidalOut: function (k) {
  13077. return Math.sin(k * Math.PI / 2);
  13078. },
  13079. SinusoidalInOut: function (k) {
  13080. return 0.5 * (1 - Math.cos(Math.PI * k));
  13081. },
  13082. ExponentialIn: function (k) {
  13083. return k === 0 ? 0 : Math.pow(1024, k - 1);
  13084. },
  13085. ExponentialOut: function (k) {
  13086. return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
  13087. },
  13088. ExponentialInOut: function (k) {
  13089. if (k === 0) {
  13090. return 0;
  13091. }
  13092. if (k === 1) {
  13093. return 1;
  13094. }
  13095. if ((k *= 2) < 1) {
  13096. return 0.5 * Math.pow(1024, k - 1);
  13097. }
  13098. return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
  13099. },
  13100. CircularIn: function (k) {
  13101. return 1 - Math.sqrt(1 - k * k);
  13102. },
  13103. CircularOut: function (k) {
  13104. return Math.sqrt(1 - --k * k);
  13105. },
  13106. CircularInOut: function (k) {
  13107. if ((k *= 2) < 1) {
  13108. return -0.5 * (Math.sqrt(1 - k * k) - 1);
  13109. }
  13110. return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
  13111. },
  13112. ElasticIn: function (k) {
  13113. var s;
  13114. var a = 0.1;
  13115. var p = 0.4;
  13116. if (k === 0) {
  13117. return 0;
  13118. }
  13119. if (k === 1) {
  13120. return 1;
  13121. }
  13122. if (!a || a < 1) {
  13123. a = 1;
  13124. s = p / 4;
  13125. } else {
  13126. s = p * Math.asin(1 / a) / (2 * Math.PI);
  13127. }
  13128. return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
  13129. },
  13130. ElasticOut: function (k) {
  13131. var s;
  13132. var a = 0.1;
  13133. var p = 0.4;
  13134. if (k === 0) {
  13135. return 0;
  13136. }
  13137. if (k === 1) {
  13138. return 1;
  13139. }
  13140. if (!a || a < 1) {
  13141. a = 1;
  13142. s = p / 4;
  13143. } else {
  13144. s = p * Math.asin(1 / a) / (2 * Math.PI);
  13145. }
  13146. return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;
  13147. },
  13148. ElasticInOut: function (k) {
  13149. var s;
  13150. var a = 0.1;
  13151. var p = 0.4;
  13152. if (k === 0) {
  13153. return 0;
  13154. }
  13155. if (k === 1) {
  13156. return 1;
  13157. }
  13158. if (!a || a < 1) {
  13159. a = 1;
  13160. s = p / 4;
  13161. } else {
  13162. s = p * Math.asin(1 / a) / (2 * Math.PI);
  13163. }
  13164. if ((k *= 2) < 1) {
  13165. return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
  13166. }
  13167. return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
  13168. },
  13169. BackIn: function (k) {
  13170. var s = 1.70158;
  13171. return k * k * ((s + 1) * k - s);
  13172. },
  13173. BackOut: function (k) {
  13174. var s = 1.70158;
  13175. return --k * k * ((s + 1) * k + s) + 1;
  13176. },
  13177. BackInOut: function (k) {
  13178. var s = 1.70158 * 1.525;
  13179. if ((k *= 2) < 1) {
  13180. return 0.5 * (k * k * ((s + 1) * k - s));
  13181. }
  13182. return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
  13183. },
  13184. BounceIn: function (k) {
  13185. return 1 - easing.BounceOut(1 - k);
  13186. },
  13187. BounceOut: function (k) {
  13188. if (k < 1 / 2.75) {
  13189. return 7.5625 * k * k;
  13190. } else if (k < 2 / 2.75) {
  13191. return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;
  13192. } else if (k < 2.5 / 2.75) {
  13193. return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;
  13194. } else {
  13195. return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;
  13196. }
  13197. },
  13198. BounceInOut: function (k) {
  13199. if (k < 0.5) {
  13200. return easing.BounceIn(k * 2) * 0.5;
  13201. }
  13202. return easing.BounceOut(k * 2 - 1) * 0.5 + 0.5;
  13203. }
  13204. };
  13205. return easing;
  13206. });define('echarts/chart/base', [
  13207. 'require',
  13208. 'zrender/shape/Image',
  13209. '../util/shape/Icon',
  13210. '../util/shape/MarkLine',
  13211. '../util/shape/Symbol',
  13212. 'zrender/shape/Polyline',
  13213. 'zrender/shape/ShapeBundle',
  13214. '../config',
  13215. '../util/ecData',
  13216. '../util/ecAnimation',
  13217. '../util/ecEffect',
  13218. '../util/accMath',
  13219. '../component/base',
  13220. '../layout/EdgeBundling',
  13221. 'zrender/tool/util',
  13222. 'zrender/tool/area'
  13223. ], function (require) {
  13224. var ImageShape = require('zrender/shape/Image');
  13225. var IconShape = require('../util/shape/Icon');
  13226. var MarkLineShape = require('../util/shape/MarkLine');
  13227. var SymbolShape = require('../util/shape/Symbol');
  13228. var PolylineShape = require('zrender/shape/Polyline');
  13229. var ShapeBundle = require('zrender/shape/ShapeBundle');
  13230. var ecConfig = require('../config');
  13231. var ecData = require('../util/ecData');
  13232. var ecAnimation = require('../util/ecAnimation');
  13233. var ecEffect = require('../util/ecEffect');
  13234. var accMath = require('../util/accMath');
  13235. var ComponentBase = require('../component/base');
  13236. var EdgeBundling = require('../layout/EdgeBundling');
  13237. var zrUtil = require('zrender/tool/util');
  13238. var zrArea = require('zrender/tool/area');
  13239. function isCoordAvailable(coord) {
  13240. return coord.x != null && coord.y != null;
  13241. }
  13242. function Base(ecTheme, messageCenter, zr, option, myChart) {
  13243. ComponentBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  13244. var self = this;
  13245. this.selectedMap = {};
  13246. this.lastShapeList = [];
  13247. this.shapeHandler = {
  13248. onclick: function () {
  13249. self.isClick = true;
  13250. },
  13251. ondragover: function (param) {
  13252. var calculableShape = param.target;
  13253. calculableShape.highlightStyle = calculableShape.highlightStyle || {};
  13254. var highlightStyle = calculableShape.highlightStyle;
  13255. var brushType = highlightStyle.brushTyep;
  13256. var strokeColor = highlightStyle.strokeColor;
  13257. var lineWidth = highlightStyle.lineWidth;
  13258. highlightStyle.brushType = 'stroke';
  13259. highlightStyle.strokeColor = self.ecTheme.calculableColor || ecConfig.calculableColor;
  13260. highlightStyle.lineWidth = calculableShape.type === 'icon' ? 30 : 10;
  13261. self.zr.addHoverShape(calculableShape);
  13262. setTimeout(function () {
  13263. if (highlightStyle) {
  13264. highlightStyle.brushType = brushType;
  13265. highlightStyle.strokeColor = strokeColor;
  13266. highlightStyle.lineWidth = lineWidth;
  13267. }
  13268. }, 20);
  13269. },
  13270. ondrop: function (param) {
  13271. if (ecData.get(param.dragged, 'data') != null) {
  13272. self.isDrop = true;
  13273. }
  13274. },
  13275. ondragend: function () {
  13276. self.isDragend = true;
  13277. }
  13278. };
  13279. }
  13280. Base.prototype = {
  13281. setCalculable: function (shape) {
  13282. shape.dragEnableTime = this.ecTheme.DRAG_ENABLE_TIME || ecConfig.DRAG_ENABLE_TIME;
  13283. shape.ondragover = this.shapeHandler.ondragover;
  13284. shape.ondragend = this.shapeHandler.ondragend;
  13285. shape.ondrop = this.shapeHandler.ondrop;
  13286. return shape;
  13287. },
  13288. ondrop: function (param, status) {
  13289. if (!this.isDrop || !param.target || status.dragIn) {
  13290. return;
  13291. }
  13292. var target = param.target;
  13293. var dragged = param.dragged;
  13294. var seriesIndex = ecData.get(target, 'seriesIndex');
  13295. var dataIndex = ecData.get(target, 'dataIndex');
  13296. var series = this.series;
  13297. var data;
  13298. var legend = this.component.legend;
  13299. if (dataIndex === -1) {
  13300. if (ecData.get(dragged, 'seriesIndex') == seriesIndex) {
  13301. status.dragOut = status.dragIn = status.needRefresh = true;
  13302. this.isDrop = false;
  13303. return;
  13304. }
  13305. data = {
  13306. value: ecData.get(dragged, 'value'),
  13307. name: ecData.get(dragged, 'name')
  13308. };
  13309. if (this.type === ecConfig.CHART_TYPE_PIE && data.value < 0) {
  13310. data.value = 0;
  13311. }
  13312. var hasFind = false;
  13313. var sData = series[seriesIndex].data;
  13314. for (var i = 0, l = sData.length; i < l; i++) {
  13315. if (sData[i].name === data.name && sData[i].value === '-') {
  13316. series[seriesIndex].data[i].value = data.value;
  13317. hasFind = true;
  13318. }
  13319. }
  13320. !hasFind && series[seriesIndex].data.push(data);
  13321. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  13322. } else {
  13323. data = series[seriesIndex].data[dataIndex] || '-';
  13324. if (data.value != null) {
  13325. if (data.value != '-') {
  13326. series[seriesIndex].data[dataIndex].value = accMath.accAdd(series[seriesIndex].data[dataIndex].value, ecData.get(dragged, 'value'));
  13327. } else {
  13328. series[seriesIndex].data[dataIndex].value = ecData.get(dragged, 'value');
  13329. }
  13330. if (this.type === ecConfig.CHART_TYPE_FUNNEL || this.type === ecConfig.CHART_TYPE_PIE) {
  13331. legend && legend.getRelatedAmount(data.name) === 1 && this.component.legend.del(data.name);
  13332. data.name += this.option.nameConnector + ecData.get(dragged, 'name');
  13333. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  13334. }
  13335. } else {
  13336. if (data != '-') {
  13337. series[seriesIndex].data[dataIndex] = accMath.accAdd(series[seriesIndex].data[dataIndex], ecData.get(dragged, 'value'));
  13338. } else {
  13339. series[seriesIndex].data[dataIndex] = ecData.get(dragged, 'value');
  13340. }
  13341. }
  13342. }
  13343. status.dragIn = status.dragIn || true;
  13344. this.isDrop = false;
  13345. var self = this;
  13346. setTimeout(function () {
  13347. self.zr.trigger('mousemove', param.event);
  13348. }, 300);
  13349. return;
  13350. },
  13351. ondragend: function (param, status) {
  13352. if (!this.isDragend || !param.target || status.dragOut) {
  13353. return;
  13354. }
  13355. var target = param.target;
  13356. var seriesIndex = ecData.get(target, 'seriesIndex');
  13357. var dataIndex = ecData.get(target, 'dataIndex');
  13358. var series = this.series;
  13359. if (series[seriesIndex].data[dataIndex].value != null) {
  13360. series[seriesIndex].data[dataIndex].value = '-';
  13361. var name = series[seriesIndex].data[dataIndex].name;
  13362. var legend = this.component.legend;
  13363. if (legend && legend.getRelatedAmount(name) === 0) {
  13364. legend.del(name);
  13365. }
  13366. } else {
  13367. series[seriesIndex].data[dataIndex] = '-';
  13368. }
  13369. status.dragOut = true;
  13370. status.needRefresh = true;
  13371. this.isDragend = false;
  13372. return;
  13373. },
  13374. onlegendSelected: function (param, status) {
  13375. var legendSelected = param.selected;
  13376. for (var itemName in this.selectedMap) {
  13377. if (this.selectedMap[itemName] != legendSelected[itemName]) {
  13378. status.needRefresh = true;
  13379. }
  13380. this.selectedMap[itemName] = legendSelected[itemName];
  13381. }
  13382. return;
  13383. },
  13384. _buildPosition: function () {
  13385. this._symbol = this.option.symbolList;
  13386. this._sIndex2ShapeMap = {};
  13387. this._sIndex2ColorMap = {};
  13388. this.selectedMap = {};
  13389. this.xMarkMap = {};
  13390. var series = this.series;
  13391. var _position2sIndexMap = {
  13392. top: [],
  13393. bottom: [],
  13394. left: [],
  13395. right: [],
  13396. other: []
  13397. };
  13398. var xAxisIndex;
  13399. var yAxisIndex;
  13400. var xAxis;
  13401. var yAxis;
  13402. for (var i = 0, l = series.length; i < l; i++) {
  13403. if (series[i].type === this.type) {
  13404. series[i] = this.reformOption(series[i]);
  13405. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  13406. xAxisIndex = series[i].xAxisIndex;
  13407. yAxisIndex = series[i].yAxisIndex;
  13408. xAxis = this.component.xAxis.getAxis(xAxisIndex);
  13409. yAxis = this.component.yAxis.getAxis(yAxisIndex);
  13410. if (xAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  13411. _position2sIndexMap[xAxis.getPosition()].push(i);
  13412. } else if (yAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  13413. _position2sIndexMap[yAxis.getPosition()].push(i);
  13414. } else {
  13415. _position2sIndexMap.other.push(i);
  13416. }
  13417. }
  13418. }
  13419. for (var position in _position2sIndexMap) {
  13420. if (_position2sIndexMap[position].length > 0) {
  13421. this._buildSinglePosition(position, _position2sIndexMap[position]);
  13422. }
  13423. }
  13424. this.addShapeList();
  13425. },
  13426. _buildSinglePosition: function (position, seriesArray) {
  13427. var mapData = this._mapData(seriesArray);
  13428. var locationMap = mapData.locationMap;
  13429. var maxDataLength = mapData.maxDataLength;
  13430. if (maxDataLength === 0 || locationMap.length === 0) {
  13431. return;
  13432. }
  13433. switch (position) {
  13434. case 'bottom':
  13435. case 'top':
  13436. this._buildHorizontal(seriesArray, maxDataLength, locationMap, this.xMarkMap);
  13437. break;
  13438. case 'left':
  13439. case 'right':
  13440. this._buildVertical(seriesArray, maxDataLength, locationMap, this.xMarkMap);
  13441. break;
  13442. case 'other':
  13443. this._buildOther(seriesArray, maxDataLength, locationMap, this.xMarkMap);
  13444. break;
  13445. }
  13446. for (var i = 0, l = seriesArray.length; i < l; i++) {
  13447. this.buildMark(seriesArray[i]);
  13448. }
  13449. },
  13450. _mapData: function (seriesArray) {
  13451. var series = this.series;
  13452. var serie;
  13453. var dataIndex = 0;
  13454. var stackMap = {};
  13455. var magicStackKey = '__kener__stack__';
  13456. var stackKey;
  13457. var serieName;
  13458. var legend = this.component.legend;
  13459. var locationMap = [];
  13460. var maxDataLength = 0;
  13461. var iconShape;
  13462. for (var i = 0, l = seriesArray.length; i < l; i++) {
  13463. serie = series[seriesArray[i]];
  13464. serieName = serie.name;
  13465. this._sIndex2ShapeMap[seriesArray[i]] = this._sIndex2ShapeMap[seriesArray[i]] || this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
  13466. if (legend) {
  13467. this.selectedMap[serieName] = legend.isSelected(serieName);
  13468. this._sIndex2ColorMap[seriesArray[i]] = legend.getColor(serieName);
  13469. iconShape = legend.getItemShape(serieName);
  13470. if (iconShape) {
  13471. var style = iconShape.style;
  13472. if (this.type == ecConfig.CHART_TYPE_LINE) {
  13473. style.iconType = 'legendLineIcon';
  13474. style.symbol = this._sIndex2ShapeMap[seriesArray[i]];
  13475. } else if (serie.itemStyle.normal.barBorderWidth > 0) {
  13476. var highlightStyle = iconShape.highlightStyle;
  13477. style.brushType = 'both';
  13478. style.x += 1;
  13479. style.y += 1;
  13480. style.width -= 2;
  13481. style.height -= 2;
  13482. style.strokeColor = highlightStyle.strokeColor = serie.itemStyle.normal.barBorderColor;
  13483. highlightStyle.lineWidth = 3;
  13484. }
  13485. legend.setItemShape(serieName, iconShape);
  13486. }
  13487. } else {
  13488. this.selectedMap[serieName] = true;
  13489. this._sIndex2ColorMap[seriesArray[i]] = this.zr.getColor(seriesArray[i]);
  13490. }
  13491. if (this.selectedMap[serieName]) {
  13492. stackKey = serie.stack || magicStackKey + seriesArray[i];
  13493. if (stackMap[stackKey] == null) {
  13494. stackMap[stackKey] = dataIndex;
  13495. locationMap[dataIndex] = [seriesArray[i]];
  13496. dataIndex++;
  13497. } else {
  13498. locationMap[stackMap[stackKey]].push(seriesArray[i]);
  13499. }
  13500. }
  13501. maxDataLength = Math.max(maxDataLength, serie.data.length);
  13502. }
  13503. return {
  13504. locationMap: locationMap,
  13505. maxDataLength: maxDataLength
  13506. };
  13507. },
  13508. _calculMarkMapXY: function (xMarkMap, locationMap, xy) {
  13509. var series = this.series;
  13510. for (var j = 0, k = locationMap.length; j < k; j++) {
  13511. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  13512. var seriesIndex = locationMap[j][m];
  13513. var valueIndex = xy == 'xy' ? 0 : '';
  13514. var grid = this.component.grid;
  13515. var tarMark = xMarkMap[seriesIndex];
  13516. if (xy.indexOf('x') != '-1') {
  13517. if (tarMark['counter' + valueIndex] > 0) {
  13518. tarMark['average' + valueIndex] = tarMark['sum' + valueIndex] / tarMark['counter' + valueIndex];
  13519. }
  13520. var x = this.component.xAxis.getAxis(series[seriesIndex].xAxisIndex || 0).getCoord(tarMark['average' + valueIndex]);
  13521. tarMark['averageLine' + valueIndex] = [
  13522. [
  13523. x,
  13524. grid.getYend()
  13525. ],
  13526. [
  13527. x,
  13528. grid.getY()
  13529. ]
  13530. ];
  13531. tarMark['minLine' + valueIndex] = [
  13532. [
  13533. tarMark['minX' + valueIndex],
  13534. grid.getYend()
  13535. ],
  13536. [
  13537. tarMark['minX' + valueIndex],
  13538. grid.getY()
  13539. ]
  13540. ];
  13541. tarMark['maxLine' + valueIndex] = [
  13542. [
  13543. tarMark['maxX' + valueIndex],
  13544. grid.getYend()
  13545. ],
  13546. [
  13547. tarMark['maxX' + valueIndex],
  13548. grid.getY()
  13549. ]
  13550. ];
  13551. tarMark.isHorizontal = false;
  13552. }
  13553. valueIndex = xy == 'xy' ? 1 : '';
  13554. if (xy.indexOf('y') != '-1') {
  13555. if (tarMark['counter' + valueIndex] > 0) {
  13556. tarMark['average' + valueIndex] = tarMark['sum' + valueIndex] / tarMark['counter' + valueIndex];
  13557. }
  13558. var y = this.component.yAxis.getAxis(series[seriesIndex].yAxisIndex || 0).getCoord(tarMark['average' + valueIndex]);
  13559. tarMark['averageLine' + valueIndex] = [
  13560. [
  13561. grid.getX(),
  13562. y
  13563. ],
  13564. [
  13565. grid.getXend(),
  13566. y
  13567. ]
  13568. ];
  13569. tarMark['minLine' + valueIndex] = [
  13570. [
  13571. grid.getX(),
  13572. tarMark['minY' + valueIndex]
  13573. ],
  13574. [
  13575. grid.getXend(),
  13576. tarMark['minY' + valueIndex]
  13577. ]
  13578. ];
  13579. tarMark['maxLine' + valueIndex] = [
  13580. [
  13581. grid.getX(),
  13582. tarMark['maxY' + valueIndex]
  13583. ],
  13584. [
  13585. grid.getXend(),
  13586. tarMark['maxY' + valueIndex]
  13587. ]
  13588. ];
  13589. tarMark.isHorizontal = true;
  13590. }
  13591. }
  13592. }
  13593. },
  13594. addLabel: function (tarShape, serie, data, name, orient) {
  13595. var queryTarget = [
  13596. data,
  13597. serie
  13598. ];
  13599. var nLabel = this.deepMerge(queryTarget, 'itemStyle.normal.label');
  13600. var eLabel = this.deepMerge(queryTarget, 'itemStyle.emphasis.label');
  13601. var nTextStyle = nLabel.textStyle || {};
  13602. var eTextStyle = eLabel.textStyle || {};
  13603. if (nLabel.show) {
  13604. var style = tarShape.style;
  13605. style.text = this._getLabelText(serie, data, name, 'normal');
  13606. style.textPosition = nLabel.position == null ? orient === 'horizontal' ? 'right' : 'top' : nLabel.position;
  13607. style.textColor = nTextStyle.color;
  13608. style.textFont = this.getFont(nTextStyle);
  13609. style.textAlign = nTextStyle.align;
  13610. style.textBaseline = nTextStyle.baseline;
  13611. }
  13612. if (eLabel.show) {
  13613. var highlightStyle = tarShape.highlightStyle;
  13614. highlightStyle.text = this._getLabelText(serie, data, name, 'emphasis');
  13615. highlightStyle.textPosition = nLabel.show ? tarShape.style.textPosition : eLabel.position == null ? orient === 'horizontal' ? 'right' : 'top' : eLabel.position;
  13616. highlightStyle.textColor = eTextStyle.color;
  13617. highlightStyle.textFont = this.getFont(eTextStyle);
  13618. highlightStyle.textAlign = eTextStyle.align;
  13619. highlightStyle.textBaseline = eTextStyle.baseline;
  13620. }
  13621. return tarShape;
  13622. },
  13623. _getLabelText: function (serie, data, name, status) {
  13624. var formatter = this.deepQuery([
  13625. data,
  13626. serie
  13627. ], 'itemStyle.' + status + '.label.formatter');
  13628. if (!formatter && status === 'emphasis') {
  13629. formatter = this.deepQuery([
  13630. data,
  13631. serie
  13632. ], 'itemStyle.normal.label.formatter');
  13633. }
  13634. var value = this.getDataFromOption(data, '-');
  13635. if (formatter) {
  13636. if (typeof formatter === 'function') {
  13637. return formatter.call(this.myChart, {
  13638. seriesName: serie.name,
  13639. series: serie,
  13640. name: name,
  13641. value: value,
  13642. data: data,
  13643. status: status
  13644. });
  13645. } else if (typeof formatter === 'string') {
  13646. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', serie.name).replace('{b0}', name).replace('{c0}', this.numAddCommas(value));
  13647. return formatter;
  13648. }
  13649. } else {
  13650. if (value instanceof Array) {
  13651. return value[2] != null ? this.numAddCommas(value[2]) : value[0] + ' , ' + value[1];
  13652. } else {
  13653. return this.numAddCommas(value);
  13654. }
  13655. }
  13656. },
  13657. buildMark: function (seriesIndex) {
  13658. var serie = this.series[seriesIndex];
  13659. if (this.selectedMap[serie.name]) {
  13660. serie.markLine && this._buildMarkLine(seriesIndex);
  13661. serie.markPoint && this._buildMarkPoint(seriesIndex);
  13662. }
  13663. },
  13664. _buildMarkPoint: function (seriesIndex) {
  13665. var attachStyle = (this.markAttachStyle || {})[seriesIndex];
  13666. var serie = this.series[seriesIndex];
  13667. var mpData;
  13668. var pos;
  13669. var markPoint = zrUtil.clone(serie.markPoint);
  13670. for (var i = 0, l = markPoint.data.length; i < l; i++) {
  13671. mpData = markPoint.data[i];
  13672. pos = this.getMarkCoord(seriesIndex, mpData);
  13673. mpData.x = mpData.x != null ? mpData.x : pos[0];
  13674. mpData.y = mpData.y != null ? mpData.y : pos[1];
  13675. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min')) {
  13676. mpData.value = pos[3];
  13677. mpData.name = mpData.name || mpData.type;
  13678. mpData.symbolSize = mpData.symbolSize || zrArea.getTextWidth(pos[3], this.getFont()) / 2 + 5;
  13679. }
  13680. }
  13681. var shapeList = this._markPoint(seriesIndex, markPoint);
  13682. for (var i = 0, l = shapeList.length; i < l; i++) {
  13683. var tarShape = shapeList[i];
  13684. tarShape.zlevel = this.getZlevelBase();
  13685. tarShape.z = this.getZBase() + 1;
  13686. for (var key in attachStyle) {
  13687. tarShape[key] = zrUtil.clone(attachStyle[key]);
  13688. }
  13689. this.shapeList.push(tarShape);
  13690. }
  13691. if (this.type === ecConfig.CHART_TYPE_FORCE || this.type === ecConfig.CHART_TYPE_CHORD) {
  13692. for (var i = 0, l = shapeList.length; i < l; i++) {
  13693. this.zr.addShape(shapeList[i]);
  13694. }
  13695. }
  13696. },
  13697. _buildMarkLine: function (seriesIndex) {
  13698. var attachStyle = (this.markAttachStyle || {})[seriesIndex];
  13699. var serie = this.series[seriesIndex];
  13700. var pos;
  13701. var markLine = zrUtil.clone(serie.markLine);
  13702. for (var i = 0, l = markLine.data.length; i < l; i++) {
  13703. var mlData = markLine.data[i];
  13704. if (mlData.type && (mlData.type === 'max' || mlData.type === 'min' || mlData.type === 'average')) {
  13705. pos = this.getMarkCoord(seriesIndex, mlData);
  13706. markLine.data[i] = [
  13707. zrUtil.clone(mlData),
  13708. {}
  13709. ];
  13710. markLine.data[i][0].name = mlData.name || mlData.type;
  13711. markLine.data[i][0].value = mlData.type !== 'average' ? pos[3] : +pos[3].toFixed(markLine.precision != null ? markLine.precision : this.deepQuery([
  13712. this.ecTheme,
  13713. ecConfig
  13714. ], 'markLine.precision'));
  13715. pos = pos[2];
  13716. mlData = [
  13717. {},
  13718. {}
  13719. ];
  13720. } else {
  13721. pos = [
  13722. this.getMarkCoord(seriesIndex, mlData[0]),
  13723. this.getMarkCoord(seriesIndex, mlData[1])
  13724. ];
  13725. }
  13726. if (pos == null || pos[0] == null || pos[1] == null) {
  13727. continue;
  13728. }
  13729. markLine.data[i][0].x = mlData[0].x != null ? mlData[0].x : pos[0][0];
  13730. markLine.data[i][0].y = mlData[0].y != null ? mlData[0].y : pos[0][1];
  13731. markLine.data[i][1].x = mlData[1].x != null ? mlData[1].x : pos[1][0];
  13732. markLine.data[i][1].y = mlData[1].y != null ? mlData[1].y : pos[1][1];
  13733. }
  13734. var shapeList = this._markLine(seriesIndex, markLine);
  13735. var isLarge = markLine.large;
  13736. if (isLarge) {
  13737. var shapeBundle = new ShapeBundle({ style: { shapeList: shapeList } });
  13738. var firstShape = shapeList[0];
  13739. if (firstShape) {
  13740. zrUtil.merge(shapeBundle.style, firstShape.style);
  13741. zrUtil.merge(shapeBundle.highlightStyle = {}, firstShape.highlightStyle);
  13742. shapeBundle.style.brushType = 'stroke';
  13743. shapeBundle.zlevel = this.getZlevelBase();
  13744. shapeBundle.z = this.getZBase() + 1;
  13745. shapeBundle.hoverable = false;
  13746. for (var key in attachStyle) {
  13747. shapeBundle[key] = zrUtil.clone(attachStyle[key]);
  13748. }
  13749. }
  13750. this.shapeList.push(shapeBundle);
  13751. this.zr.addShape(shapeBundle);
  13752. shapeBundle._mark = 'largeLine';
  13753. var effect = markLine.effect;
  13754. if (effect.show) {
  13755. shapeBundle.effect = effect;
  13756. }
  13757. } else {
  13758. for (var i = 0, l = shapeList.length; i < l; i++) {
  13759. var tarShape = shapeList[i];
  13760. tarShape.zlevel = this.getZlevelBase();
  13761. tarShape.z = this.getZBase() + 1;
  13762. for (var key in attachStyle) {
  13763. tarShape[key] = zrUtil.clone(attachStyle[key]);
  13764. }
  13765. this.shapeList.push(tarShape);
  13766. }
  13767. if (this.type === ecConfig.CHART_TYPE_FORCE || this.type === ecConfig.CHART_TYPE_CHORD) {
  13768. for (var i = 0, l = shapeList.length; i < l; i++) {
  13769. this.zr.addShape(shapeList[i]);
  13770. }
  13771. }
  13772. }
  13773. },
  13774. _markPoint: function (seriesIndex, mpOption) {
  13775. var serie = this.series[seriesIndex];
  13776. var component = this.component;
  13777. zrUtil.merge(zrUtil.merge(mpOption, zrUtil.clone(this.ecTheme.markPoint || {})), zrUtil.clone(ecConfig.markPoint));
  13778. mpOption.name = serie.name;
  13779. var pList = [];
  13780. var data = mpOption.data;
  13781. var itemShape;
  13782. var dataRange = component.dataRange;
  13783. var legend = component.legend;
  13784. var color;
  13785. var value;
  13786. var queryTarget;
  13787. var nColor;
  13788. var eColor;
  13789. var effect;
  13790. var zrWidth = this.zr.getWidth();
  13791. var zrHeight = this.zr.getHeight();
  13792. if (!mpOption.large) {
  13793. for (var i = 0, l = data.length; i < l; i++) {
  13794. if (data[i].x == null || data[i].y == null) {
  13795. continue;
  13796. }
  13797. value = data[i].value != null ? data[i].value : '';
  13798. if (legend) {
  13799. color = legend.getColor(serie.name);
  13800. }
  13801. if (dataRange) {
  13802. color = isNaN(value) ? color : dataRange.getColor(value);
  13803. queryTarget = [
  13804. data[i],
  13805. mpOption
  13806. ];
  13807. nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
  13808. eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
  13809. if (nColor == null && eColor == null) {
  13810. continue;
  13811. }
  13812. }
  13813. color = color == null ? this.zr.getColor(seriesIndex) : color;
  13814. data[i].tooltip = data[i].tooltip || mpOption.tooltip || { trigger: 'item' };
  13815. data[i].name = data[i].name != null ? data[i].name : '';
  13816. data[i].value = value;
  13817. 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');
  13818. itemShape._mark = 'point';
  13819. effect = this.deepMerge([
  13820. data[i],
  13821. mpOption
  13822. ], 'effect');
  13823. if (effect.show) {
  13824. itemShape.effect = effect;
  13825. }
  13826. if (serie.type === ecConfig.CHART_TYPE_MAP) {
  13827. itemShape._geo = this.getMarkGeo(data[i]);
  13828. }
  13829. ecData.pack(itemShape, serie, seriesIndex, data[i], i, data[i].name, value);
  13830. pList.push(itemShape);
  13831. }
  13832. } else {
  13833. itemShape = this.getLargeMarkPointShape(seriesIndex, mpOption);
  13834. itemShape._mark = 'largePoint';
  13835. itemShape && pList.push(itemShape);
  13836. }
  13837. return pList;
  13838. },
  13839. _markLine: function () {
  13840. function normalizeOptionValue(mlOption, key) {
  13841. mlOption[key] = mlOption[key] instanceof Array ? mlOption[key].length > 1 ? mlOption[key] : [
  13842. mlOption[key][0],
  13843. mlOption[key][0]
  13844. ] : [
  13845. mlOption[key],
  13846. mlOption[key]
  13847. ];
  13848. }
  13849. return function (seriesIndex, mlOption) {
  13850. var serie = this.series[seriesIndex];
  13851. var component = this.component;
  13852. var dataRange = component.dataRange;
  13853. var legend = component.legend;
  13854. zrUtil.merge(zrUtil.merge(mlOption, zrUtil.clone(this.ecTheme.markLine || {})), zrUtil.clone(ecConfig.markLine));
  13855. var defaultColor = legend ? legend.getColor(serie.name) : this.zr.getColor(seriesIndex);
  13856. normalizeOptionValue(mlOption, 'symbol');
  13857. normalizeOptionValue(mlOption, 'symbolSize');
  13858. normalizeOptionValue(mlOption, 'symbolRotate');
  13859. var data = mlOption.data;
  13860. var edges = [];
  13861. var zrWidth = this.zr.getWidth();
  13862. var zrHeight = this.zr.getHeight();
  13863. for (var i = 0; i < data.length; i++) {
  13864. var mlData = data[i];
  13865. if (isCoordAvailable(mlData[0]) && isCoordAvailable(mlData[1])) {
  13866. var mergeData = this.deepMerge(mlData);
  13867. var queryTarget = [
  13868. mergeData,
  13869. mlOption
  13870. ];
  13871. var color = defaultColor;
  13872. var value = mergeData.value != null ? mergeData.value : '';
  13873. if (dataRange) {
  13874. color = isNaN(value) ? color : dataRange.getColor(value);
  13875. var nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
  13876. var eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
  13877. if (nColor == null && eColor == null) {
  13878. continue;
  13879. }
  13880. }
  13881. mlData[0].tooltip = mergeData.tooltip || mlOption.tooltip || { trigger: 'item' };
  13882. mlData[0].name = mlData[0].name || '';
  13883. mlData[1].name = mlData[1].name || '';
  13884. mlData[0].value = value;
  13885. edges.push({
  13886. points: [
  13887. [
  13888. this.parsePercent(mlData[0].x, zrWidth),
  13889. this.parsePercent(mlData[0].y, zrHeight)
  13890. ],
  13891. [
  13892. this.parsePercent(mlData[1].x, zrWidth),
  13893. this.parsePercent(mlData[1].y, zrHeight)
  13894. ]
  13895. ],
  13896. rawData: mlData,
  13897. color: color
  13898. });
  13899. }
  13900. }
  13901. var enableBundling = this.query(mlOption, 'bundling.enable');
  13902. if (enableBundling) {
  13903. var edgeBundling = new EdgeBundling();
  13904. edgeBundling.maxTurningAngle = this.query(mlOption, 'bundling.maxTurningAngle') / 180 * Math.PI;
  13905. edges = edgeBundling.run(edges);
  13906. }
  13907. mlOption.name = serie.name;
  13908. var shapeList = [];
  13909. for (var i = 0, l = edges.length; i < l; i++) {
  13910. var edge = edges[i];
  13911. var rawEdge = edge.rawEdge || edge;
  13912. var mlData = rawEdge.rawData;
  13913. var value = mlData.value != null ? mlData.value : '';
  13914. var itemShape = this.getMarkLineShape(mlOption, seriesIndex, mlData, i, edge.points, enableBundling, rawEdge.color);
  13915. itemShape._mark = 'line';
  13916. var effect = this.deepMerge([
  13917. mlData[0],
  13918. mlData[1],
  13919. mlOption
  13920. ], 'effect');
  13921. if (effect.show) {
  13922. itemShape.effect = effect;
  13923. itemShape.effect.large = mlOption.large;
  13924. }
  13925. if (serie.type === ecConfig.CHART_TYPE_MAP) {
  13926. itemShape._geo = [
  13927. this.getMarkGeo(mlData[0]),
  13928. this.getMarkGeo(mlData[1])
  13929. ];
  13930. }
  13931. ecData.pack(itemShape, serie, seriesIndex, mlData[0], i, mlData[0].name + (mlData[1].name !== '' ? ' > ' + mlData[1].name : ''), value);
  13932. shapeList.push(itemShape);
  13933. }
  13934. return shapeList;
  13935. };
  13936. }(),
  13937. getMarkCoord: function () {
  13938. return [
  13939. 0,
  13940. 0
  13941. ];
  13942. },
  13943. getSymbolShape: function (serie, seriesIndex, data, dataIndex, name, x, y, symbol, color, emptyColor, orient) {
  13944. var queryTarget = [
  13945. data,
  13946. serie
  13947. ];
  13948. var value = this.getDataFromOption(data, '-');
  13949. symbol = this.deepQuery(queryTarget, 'symbol') || symbol;
  13950. var symbolSize = this.deepQuery(queryTarget, 'symbolSize');
  13951. symbolSize = typeof symbolSize === 'function' ? symbolSize(value) : symbolSize;
  13952. var symbolRotate = this.deepQuery(queryTarget, 'symbolRotate');
  13953. var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
  13954. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
  13955. var nBorderWidth = normal.borderWidth != null ? normal.borderWidth : normal.lineStyle && normal.lineStyle.width;
  13956. if (nBorderWidth == null) {
  13957. nBorderWidth = symbol.match('empty') ? 2 : 0;
  13958. }
  13959. var eBorderWidth = emphasis.borderWidth != null ? emphasis.borderWidth : emphasis.lineStyle && emphasis.lineStyle.width;
  13960. if (eBorderWidth == null) {
  13961. eBorderWidth = nBorderWidth + 2;
  13962. }
  13963. var nColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data);
  13964. var eColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data);
  13965. var itemShape = new IconShape({
  13966. style: {
  13967. iconType: symbol.replace('empty', '').toLowerCase(),
  13968. x: x - symbolSize,
  13969. y: y - symbolSize,
  13970. width: symbolSize * 2,
  13971. height: symbolSize * 2,
  13972. brushType: 'both',
  13973. color: symbol.match('empty') ? emptyColor : nColor || color,
  13974. strokeColor: normal.borderColor || nColor || color,
  13975. lineWidth: nBorderWidth
  13976. },
  13977. highlightStyle: {
  13978. color: symbol.match('empty') ? emptyColor : eColor || nColor || color,
  13979. strokeColor: emphasis.borderColor || normal.borderColor || eColor || nColor || color,
  13980. lineWidth: eBorderWidth
  13981. },
  13982. clickable: this.deepQuery(queryTarget, 'clickable')
  13983. });
  13984. if (symbol.match('image')) {
  13985. itemShape.style.image = symbol.replace(new RegExp('^image:\\/\\/'), '');
  13986. itemShape = new ImageShape({
  13987. style: itemShape.style,
  13988. highlightStyle: itemShape.highlightStyle,
  13989. clickable: this.deepQuery(queryTarget, 'clickable')
  13990. });
  13991. }
  13992. if (symbolRotate != null) {
  13993. itemShape.rotation = [
  13994. symbolRotate * Math.PI / 180,
  13995. x,
  13996. y
  13997. ];
  13998. }
  13999. if (symbol.match('star')) {
  14000. itemShape.style.iconType = 'star';
  14001. itemShape.style.n = symbol.replace('empty', '').replace('star', '') - 0 || 5;
  14002. }
  14003. if (symbol === 'none') {
  14004. itemShape.invisible = true;
  14005. itemShape.hoverable = false;
  14006. }
  14007. itemShape = this.addLabel(itemShape, serie, data, name, orient);
  14008. if (symbol.match('empty')) {
  14009. if (itemShape.style.textColor == null) {
  14010. itemShape.style.textColor = itemShape.style.strokeColor;
  14011. }
  14012. if (itemShape.highlightStyle.textColor == null) {
  14013. itemShape.highlightStyle.textColor = itemShape.highlightStyle.strokeColor;
  14014. }
  14015. }
  14016. ecData.pack(itemShape, serie, seriesIndex, data, dataIndex, name);
  14017. itemShape._x = x;
  14018. itemShape._y = y;
  14019. itemShape._dataIndex = dataIndex;
  14020. itemShape._seriesIndex = seriesIndex;
  14021. return itemShape;
  14022. },
  14023. getMarkLineShape: function (mlOption, seriesIndex, data, dataIndex, points, bundling, color) {
  14024. var value0 = data[0].value != null ? data[0].value : '-';
  14025. var value1 = data[1].value != null ? data[1].value : '-';
  14026. var symbol = [
  14027. data[0].symbol || mlOption.symbol[0],
  14028. data[1].symbol || mlOption.symbol[1]
  14029. ];
  14030. var symbolSize = [
  14031. data[0].symbolSize || mlOption.symbolSize[0],
  14032. data[1].symbolSize || mlOption.symbolSize[1]
  14033. ];
  14034. symbolSize[0] = typeof symbolSize[0] === 'function' ? symbolSize[0](value0) : symbolSize[0];
  14035. symbolSize[1] = typeof symbolSize[1] === 'function' ? symbolSize[1](value1) : symbolSize[1];
  14036. var symbolRotate = [
  14037. this.query(data[0], 'symbolRotate') || mlOption.symbolRotate[0],
  14038. this.query(data[1], 'symbolRotate') || mlOption.symbolRotate[1]
  14039. ];
  14040. var queryTarget = [
  14041. data[0],
  14042. data[1],
  14043. mlOption
  14044. ];
  14045. var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
  14046. normal.color = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data);
  14047. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
  14048. emphasis.color = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data);
  14049. var nlineStyle = normal.lineStyle;
  14050. var elineStyle = emphasis.lineStyle;
  14051. var nBorderWidth = nlineStyle.width;
  14052. if (nBorderWidth == null) {
  14053. nBorderWidth = normal.borderWidth;
  14054. }
  14055. var eBorderWidth = elineStyle.width;
  14056. if (eBorderWidth == null) {
  14057. eBorderWidth = emphasis.borderWidth != null ? emphasis.borderWidth : nBorderWidth + 2;
  14058. }
  14059. var smoothness = this.deepQuery(queryTarget, 'smoothness');
  14060. if (!this.deepQuery(queryTarget, 'smooth')) {
  14061. smoothness = 0;
  14062. }
  14063. var ShapeCtor = bundling ? PolylineShape : MarkLineShape;
  14064. var itemShape = new ShapeCtor({
  14065. style: {
  14066. symbol: symbol,
  14067. symbolSize: symbolSize,
  14068. symbolRotate: symbolRotate,
  14069. brushType: 'both',
  14070. lineType: nlineStyle.type,
  14071. shadowColor: nlineStyle.shadowColor || nlineStyle.color || normal.borderColor || normal.color || color,
  14072. shadowBlur: nlineStyle.shadowBlur,
  14073. shadowOffsetX: nlineStyle.shadowOffsetX,
  14074. shadowOffsetY: nlineStyle.shadowOffsetY,
  14075. color: normal.color || color,
  14076. strokeColor: nlineStyle.color || normal.borderColor || normal.color || color,
  14077. lineWidth: nBorderWidth,
  14078. symbolBorderColor: normal.borderColor || normal.color || color,
  14079. symbolBorder: normal.borderWidth
  14080. },
  14081. highlightStyle: {
  14082. shadowColor: elineStyle.shadowColor,
  14083. shadowBlur: elineStyle.shadowBlur,
  14084. shadowOffsetX: elineStyle.shadowOffsetX,
  14085. shadowOffsetY: elineStyle.shadowOffsetY,
  14086. color: emphasis.color || normal.color || color,
  14087. strokeColor: elineStyle.color || nlineStyle.color || emphasis.borderColor || normal.borderColor || emphasis.color || normal.color || color,
  14088. lineWidth: eBorderWidth,
  14089. symbolBorderColor: emphasis.borderColor || normal.borderColor || emphasis.color || normal.color || color,
  14090. symbolBorder: emphasis.borderWidth == null ? normal.borderWidth + 2 : emphasis.borderWidth
  14091. },
  14092. clickable: this.deepQuery(queryTarget, 'clickable')
  14093. });
  14094. var shapeStyle = itemShape.style;
  14095. if (bundling) {
  14096. shapeStyle.pointList = points;
  14097. shapeStyle.smooth = smoothness;
  14098. } else {
  14099. shapeStyle.xStart = points[0][0];
  14100. shapeStyle.yStart = points[0][1];
  14101. shapeStyle.xEnd = points[1][0];
  14102. shapeStyle.yEnd = points[1][1];
  14103. shapeStyle.curveness = smoothness;
  14104. itemShape.updatePoints(itemShape.style);
  14105. }
  14106. itemShape = this.addLabel(itemShape, mlOption, data[0], data[0].name + ' : ' + data[1].name);
  14107. return itemShape;
  14108. },
  14109. getLargeMarkPointShape: function (seriesIndex, mpOption) {
  14110. var serie = this.series[seriesIndex];
  14111. var component = this.component;
  14112. var data = mpOption.data;
  14113. var itemShape;
  14114. var dataRange = component.dataRange;
  14115. var legend = component.legend;
  14116. var color;
  14117. var value;
  14118. var queryTarget = [
  14119. data[0],
  14120. mpOption
  14121. ];
  14122. var nColor;
  14123. var eColor;
  14124. var effect;
  14125. if (legend) {
  14126. color = legend.getColor(serie.name);
  14127. }
  14128. if (dataRange) {
  14129. value = data[0].value != null ? data[0].value : '';
  14130. color = isNaN(value) ? color : dataRange.getColor(value);
  14131. nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
  14132. eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
  14133. if (nColor == null && eColor == null) {
  14134. return;
  14135. }
  14136. }
  14137. color = this.deepMerge(queryTarget, 'itemStyle.normal').color || color;
  14138. var symbol = this.deepQuery(queryTarget, 'symbol') || 'circle';
  14139. symbol = symbol.replace('empty', '').replace(/\d/g, '');
  14140. effect = this.deepMerge([
  14141. data[0],
  14142. mpOption
  14143. ], 'effect');
  14144. var devicePixelRatio = window.devicePixelRatio || 1;
  14145. itemShape = new SymbolShape({
  14146. style: {
  14147. pointList: data,
  14148. color: color,
  14149. strokeColor: color,
  14150. shadowColor: effect.shadowColor || color,
  14151. shadowBlur: (effect.shadowBlur != null ? effect.shadowBlur : 8) * devicePixelRatio,
  14152. size: this.deepQuery(queryTarget, 'symbolSize'),
  14153. iconType: symbol,
  14154. brushType: 'fill',
  14155. lineWidth: 1
  14156. },
  14157. draggable: false,
  14158. hoverable: false
  14159. });
  14160. if (effect.show) {
  14161. itemShape.effect = effect;
  14162. }
  14163. return itemShape;
  14164. },
  14165. backupShapeList: function () {
  14166. if (this.shapeList && this.shapeList.length > 0) {
  14167. this.lastShapeList = this.shapeList;
  14168. this.shapeList = [];
  14169. } else {
  14170. this.lastShapeList = [];
  14171. }
  14172. },
  14173. addShapeList: function () {
  14174. var maxLenth = this.option.animationThreshold / (this.canvasSupported ? 2 : 4);
  14175. var lastShapeList = this.lastShapeList;
  14176. var shapeList = this.shapeList;
  14177. var isUpdate = lastShapeList.length > 0;
  14178. var duration = isUpdate ? this.query(this.option, 'animationDurationUpdate') : this.query(this.option, 'animationDuration');
  14179. var easing = this.query(this.option, 'animationEasing');
  14180. var delay;
  14181. var key;
  14182. var oldMap = {};
  14183. var newMap = {};
  14184. if (this.option.animation && !this.option.renderAsImage && shapeList.length < maxLenth && !this.motionlessOnce) {
  14185. for (var i = 0, l = lastShapeList.length; i < l; i++) {
  14186. key = this._getAnimationKey(lastShapeList[i]);
  14187. if (key.match('undefined')) {
  14188. this.zr.delShape(lastShapeList[i].id);
  14189. } else {
  14190. key += lastShapeList[i].type;
  14191. if (oldMap[key]) {
  14192. this.zr.delShape(lastShapeList[i].id);
  14193. } else {
  14194. oldMap[key] = lastShapeList[i];
  14195. }
  14196. }
  14197. }
  14198. for (var i = 0, l = shapeList.length; i < l; i++) {
  14199. key = this._getAnimationKey(shapeList[i]);
  14200. if (key.match('undefined')) {
  14201. this.zr.addShape(shapeList[i]);
  14202. } else {
  14203. key += shapeList[i].type;
  14204. newMap[key] = shapeList[i];
  14205. }
  14206. }
  14207. for (key in oldMap) {
  14208. if (!newMap[key]) {
  14209. this.zr.delShape(oldMap[key].id);
  14210. }
  14211. }
  14212. for (key in newMap) {
  14213. if (oldMap[key]) {
  14214. this.zr.delShape(oldMap[key].id);
  14215. this._animateMod(oldMap[key], newMap[key], duration, easing, 0, isUpdate);
  14216. } else {
  14217. delay = (this.type == ecConfig.CHART_TYPE_LINE || this.type == ecConfig.CHART_TYPE_RADAR) && key.indexOf('icon') !== 0 ? duration / 2 : 0;
  14218. this._animateMod(false, newMap[key], duration, easing, delay, isUpdate);
  14219. }
  14220. }
  14221. this.zr.refresh();
  14222. this.animationEffect();
  14223. } else {
  14224. this.motionlessOnce = false;
  14225. this.zr.delShape(lastShapeList);
  14226. for (var i = 0, l = shapeList.length; i < l; i++) {
  14227. this.zr.addShape(shapeList[i]);
  14228. }
  14229. }
  14230. },
  14231. _getAnimationKey: function (shape) {
  14232. if (this.type != ecConfig.CHART_TYPE_MAP) {
  14233. return ecData.get(shape, 'seriesIndex') + '_' + ecData.get(shape, 'dataIndex') + (shape._mark ? shape._mark : '') + (this.type === ecConfig.CHART_TYPE_RADAR ? ecData.get(shape, 'special') : '');
  14234. } else {
  14235. return ecData.get(shape, 'seriesIndex') + '_' + ecData.get(shape, 'dataIndex') + (shape._mark ? shape._mark : 'undefined');
  14236. }
  14237. },
  14238. _animateMod: function (oldShape, newShape, duration, easing, delay, isUpdate) {
  14239. switch (newShape.type) {
  14240. case 'polyline':
  14241. case 'half-smooth-polygon':
  14242. ecAnimation.pointList(this.zr, oldShape, newShape, duration, easing);
  14243. break;
  14244. case 'rectangle':
  14245. ecAnimation.rectangle(this.zr, oldShape, newShape, duration, easing);
  14246. break;
  14247. case 'image':
  14248. case 'icon':
  14249. ecAnimation.icon(this.zr, oldShape, newShape, duration, easing, delay);
  14250. break;
  14251. case 'candle':
  14252. if (!isUpdate) {
  14253. ecAnimation.candle(this.zr, oldShape, newShape, duration, easing);
  14254. } else {
  14255. this.zr.addShape(newShape);
  14256. }
  14257. break;
  14258. case 'ring':
  14259. case 'sector':
  14260. case 'circle':
  14261. if (!isUpdate) {
  14262. ecAnimation.ring(this.zr, oldShape, newShape, duration + (ecData.get(newShape, 'dataIndex') || 0) % 20 * 100, easing);
  14263. } else if (newShape.type === 'sector') {
  14264. ecAnimation.sector(this.zr, oldShape, newShape, duration, easing);
  14265. } else {
  14266. this.zr.addShape(newShape);
  14267. }
  14268. break;
  14269. case 'text':
  14270. ecAnimation.text(this.zr, oldShape, newShape, duration, easing);
  14271. break;
  14272. case 'polygon':
  14273. if (!isUpdate) {
  14274. ecAnimation.polygon(this.zr, oldShape, newShape, duration, easing);
  14275. } else {
  14276. ecAnimation.pointList(this.zr, oldShape, newShape, duration, easing);
  14277. }
  14278. break;
  14279. case 'ribbon':
  14280. ecAnimation.ribbon(this.zr, oldShape, newShape, duration, easing);
  14281. break;
  14282. case 'gauge-pointer':
  14283. ecAnimation.gaugePointer(this.zr, oldShape, newShape, duration, easing);
  14284. break;
  14285. case 'mark-line':
  14286. ecAnimation.markline(this.zr, oldShape, newShape, duration, easing);
  14287. break;
  14288. case 'bezier-curve':
  14289. case 'line':
  14290. ecAnimation.line(this.zr, oldShape, newShape, duration, easing);
  14291. break;
  14292. default:
  14293. this.zr.addShape(newShape);
  14294. break;
  14295. }
  14296. },
  14297. animationMark: function (duration, easing, shapeList) {
  14298. var shapeList = shapeList || this.shapeList;
  14299. for (var i = 0, l = shapeList.length; i < l; i++) {
  14300. if (!shapeList[i]._mark) {
  14301. continue;
  14302. }
  14303. this._animateMod(false, shapeList[i], duration, easing, 0, true);
  14304. }
  14305. this.animationEffect(shapeList);
  14306. },
  14307. animationEffect: function (shapeList) {
  14308. !shapeList && this.clearEffectShape();
  14309. shapeList = shapeList || this.shapeList;
  14310. if (shapeList == null) {
  14311. return;
  14312. }
  14313. var zlevel = ecConfig.EFFECT_ZLEVEL;
  14314. if (this.canvasSupported) {
  14315. this.zr.modLayer(zlevel, {
  14316. motionBlur: true,
  14317. lastFrameAlpha: 0.95
  14318. });
  14319. }
  14320. var shape;
  14321. for (var i = 0, l = shapeList.length; i < l; i++) {
  14322. shape = shapeList[i];
  14323. if (!(shape._mark && shape.effect && shape.effect.show && ecEffect[shape._mark])) {
  14324. continue;
  14325. }
  14326. ecEffect[shape._mark](this.zr, this.effectList, shape, zlevel);
  14327. this.effectList[this.effectList.length - 1]._mark = shape._mark;
  14328. }
  14329. },
  14330. clearEffectShape: function (clearMotionBlur) {
  14331. var effectList = this.effectList;
  14332. if (this.zr && effectList && effectList.length > 0) {
  14333. clearMotionBlur && this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, { motionBlur: false });
  14334. this.zr.delShape(effectList);
  14335. for (var i = 0; i < effectList.length; i++) {
  14336. if (effectList[i].effectAnimator) {
  14337. effectList[i].effectAnimator.stop();
  14338. }
  14339. }
  14340. }
  14341. this.effectList = [];
  14342. },
  14343. addMark: function (seriesIndex, markData, markType) {
  14344. var serie = this.series[seriesIndex];
  14345. if (this.selectedMap[serie.name]) {
  14346. var duration = this.query(this.option, 'animationDurationUpdate');
  14347. var easing = this.query(this.option, 'animationEasing');
  14348. var oriMarkData = serie[markType].data;
  14349. var lastLength = this.shapeList.length;
  14350. serie[markType].data = markData.data;
  14351. this['_build' + markType.replace('m', 'M')](seriesIndex);
  14352. if (this.option.animation && !this.option.renderAsImage) {
  14353. this.animationMark(duration, easing, this.shapeList.slice(lastLength));
  14354. } else {
  14355. for (var i = lastLength, l = this.shapeList.length; i < l; i++) {
  14356. this.zr.addShape(this.shapeList[i]);
  14357. }
  14358. this.zr.refreshNextFrame();
  14359. }
  14360. serie[markType].data = oriMarkData;
  14361. }
  14362. },
  14363. delMark: function (seriesIndex, markName, markType) {
  14364. markType = markType.replace('mark', '').replace('large', '').toLowerCase();
  14365. var serie = this.series[seriesIndex];
  14366. if (this.selectedMap[serie.name]) {
  14367. var needRefresh = false;
  14368. var shapeList = [
  14369. this.shapeList,
  14370. this.effectList
  14371. ];
  14372. var len = 2;
  14373. while (len--) {
  14374. for (var i = 0, l = shapeList[len].length; i < l; i++) {
  14375. if (shapeList[len][i]._mark == markType && ecData.get(shapeList[len][i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[len][i], 'name') == markName) {
  14376. this.zr.delShape(shapeList[len][i].id);
  14377. shapeList[len].splice(i, 1);
  14378. needRefresh = true;
  14379. break;
  14380. }
  14381. }
  14382. }
  14383. needRefresh && this.zr.refreshNextFrame();
  14384. }
  14385. }
  14386. };
  14387. zrUtil.inherits(Base, ComponentBase);
  14388. return Base;
  14389. });define('zrender/shape/Circle', [
  14390. 'require',
  14391. './Base',
  14392. '../tool/util'
  14393. ], function (require) {
  14394. 'use strict';
  14395. var Base = require('./Base');
  14396. var Circle = function (options) {
  14397. Base.call(this, options);
  14398. };
  14399. Circle.prototype = {
  14400. type: 'circle',
  14401. buildPath: function (ctx, style) {
  14402. ctx.moveTo(style.x + style.r, style.y);
  14403. ctx.arc(style.x, style.y, style.r, 0, Math.PI * 2, true);
  14404. return;
  14405. },
  14406. getRect: function (style) {
  14407. if (style.__rect) {
  14408. return style.__rect;
  14409. }
  14410. var lineWidth;
  14411. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  14412. lineWidth = style.lineWidth || 1;
  14413. } else {
  14414. lineWidth = 0;
  14415. }
  14416. style.__rect = {
  14417. x: Math.round(style.x - style.r - lineWidth / 2),
  14418. y: Math.round(style.y - style.r - lineWidth / 2),
  14419. width: style.r * 2 + lineWidth,
  14420. height: style.r * 2 + lineWidth
  14421. };
  14422. return style.__rect;
  14423. }
  14424. };
  14425. require('../tool/util').inherits(Circle, Base);
  14426. return Circle;
  14427. });define('echarts/util/accMath', [], function () {
  14428. function accDiv(arg1, arg2) {
  14429. var s1 = arg1.toString();
  14430. var s2 = arg2.toString();
  14431. var m = 0;
  14432. try {
  14433. m = s2.split('.')[1].length;
  14434. } catch (e) {
  14435. }
  14436. try {
  14437. m -= s1.split('.')[1].length;
  14438. } catch (e) {
  14439. }
  14440. return (s1.replace('.', '') - 0) / (s2.replace('.', '') - 0) * Math.pow(10, m);
  14441. }
  14442. function accMul(arg1, arg2) {
  14443. var s1 = arg1.toString();
  14444. var s2 = arg2.toString();
  14445. var m = 0;
  14446. try {
  14447. m += s1.split('.')[1].length;
  14448. } catch (e) {
  14449. }
  14450. try {
  14451. m += s2.split('.')[1].length;
  14452. } catch (e) {
  14453. }
  14454. return (s1.replace('.', '') - 0) * (s2.replace('.', '') - 0) / Math.pow(10, m);
  14455. }
  14456. function accAdd(arg1, arg2) {
  14457. var r1 = 0;
  14458. var r2 = 0;
  14459. try {
  14460. r1 = arg1.toString().split('.')[1].length;
  14461. } catch (e) {
  14462. }
  14463. try {
  14464. r2 = arg2.toString().split('.')[1].length;
  14465. } catch (e) {
  14466. }
  14467. var m = Math.pow(10, Math.max(r1, r2));
  14468. return (Math.round(arg1 * m) + Math.round(arg2 * m)) / m;
  14469. }
  14470. function accSub(arg1, arg2) {
  14471. return accAdd(arg1, -arg2);
  14472. }
  14473. return {
  14474. accDiv: accDiv,
  14475. accMul: accMul,
  14476. accAdd: accAdd,
  14477. accSub: accSub
  14478. };
  14479. });define('echarts/util/shape/Icon', [
  14480. 'require',
  14481. 'zrender/tool/util',
  14482. 'zrender/shape/Star',
  14483. 'zrender/shape/Heart',
  14484. 'zrender/shape/Droplet',
  14485. 'zrender/shape/Image',
  14486. 'zrender/shape/Base'
  14487. ], function (require) {
  14488. var zrUtil = require('zrender/tool/util');
  14489. function _iconMark(ctx, style) {
  14490. var x = style.x;
  14491. var y = style.y;
  14492. var dx = style.width / 16;
  14493. var dy = style.height / 16;
  14494. ctx.moveTo(x, y + style.height);
  14495. ctx.lineTo(x + 5 * dx, y + 14 * dy);
  14496. ctx.lineTo(x + style.width, y + 3 * dy);
  14497. ctx.lineTo(x + 13 * dx, y);
  14498. ctx.lineTo(x + 2 * dx, y + 11 * dy);
  14499. ctx.lineTo(x, y + style.height);
  14500. ctx.moveTo(x + 6 * dx, y + 10 * dy);
  14501. ctx.lineTo(x + 14 * dx, y + 2 * dy);
  14502. ctx.moveTo(x + 10 * dx, y + 13 * dy);
  14503. ctx.lineTo(x + style.width, y + 13 * dy);
  14504. ctx.moveTo(x + 13 * dx, y + 10 * dy);
  14505. ctx.lineTo(x + 13 * dx, y + style.height);
  14506. }
  14507. function _iconMarkUndo(ctx, style) {
  14508. var x = style.x;
  14509. var y = style.y;
  14510. var dx = style.width / 16;
  14511. var dy = style.height / 16;
  14512. ctx.moveTo(x, y + style.height);
  14513. ctx.lineTo(x + 5 * dx, y + 14 * dy);
  14514. ctx.lineTo(x + style.width, y + 3 * dy);
  14515. ctx.lineTo(x + 13 * dx, y);
  14516. ctx.lineTo(x + 2 * dx, y + 11 * dy);
  14517. ctx.lineTo(x, y + style.height);
  14518. ctx.moveTo(x + 6 * dx, y + 10 * dy);
  14519. ctx.lineTo(x + 14 * dx, y + 2 * dy);
  14520. ctx.moveTo(x + 10 * dx, y + 13 * dy);
  14521. ctx.lineTo(x + style.width, y + 13 * dy);
  14522. }
  14523. function _iconMarkClear(ctx, style) {
  14524. var x = style.x;
  14525. var y = style.y;
  14526. var dx = style.width / 16;
  14527. var dy = style.height / 16;
  14528. ctx.moveTo(x + 4 * dx, y + 15 * dy);
  14529. ctx.lineTo(x + 9 * dx, y + 13 * dy);
  14530. ctx.lineTo(x + 14 * dx, y + 8 * dy);
  14531. ctx.lineTo(x + 11 * dx, y + 5 * dy);
  14532. ctx.lineTo(x + 6 * dx, y + 10 * dy);
  14533. ctx.lineTo(x + 4 * dx, y + 15 * dy);
  14534. ctx.moveTo(x + 5 * dx, y);
  14535. ctx.lineTo(x + 11 * dx, y);
  14536. ctx.moveTo(x + 5 * dx, y + dy);
  14537. ctx.lineTo(x + 11 * dx, y + dy);
  14538. ctx.moveTo(x, y + 2 * dy);
  14539. ctx.lineTo(x + style.width, y + 2 * dy);
  14540. ctx.moveTo(x, y + 5 * dy);
  14541. ctx.lineTo(x + 3 * dx, y + style.height);
  14542. ctx.lineTo(x + 13 * dx, y + style.height);
  14543. ctx.lineTo(x + style.width, y + 5 * dy);
  14544. }
  14545. function _iconDataZoom(ctx, style) {
  14546. var x = style.x;
  14547. var y = style.y;
  14548. var dx = style.width / 16;
  14549. var dy = style.height / 16;
  14550. ctx.moveTo(x, y + 3 * dy);
  14551. ctx.lineTo(x + 6 * dx, y + 3 * dy);
  14552. ctx.moveTo(x + 3 * dx, y);
  14553. ctx.lineTo(x + 3 * dx, y + 6 * dy);
  14554. ctx.moveTo(x + 3 * dx, y + 8 * dy);
  14555. ctx.lineTo(x + 3 * dx, y + style.height);
  14556. ctx.lineTo(x + style.width, y + style.height);
  14557. ctx.lineTo(x + style.width, y + 3 * dy);
  14558. ctx.lineTo(x + 8 * dx, y + 3 * dy);
  14559. }
  14560. function _iconDataZoomReset(ctx, style) {
  14561. var x = style.x;
  14562. var y = style.y;
  14563. var dx = style.width / 16;
  14564. var dy = style.height / 16;
  14565. ctx.moveTo(x + 6 * dx, y);
  14566. ctx.lineTo(x + 2 * dx, y + 3 * dy);
  14567. ctx.lineTo(x + 6 * dx, y + 6 * dy);
  14568. ctx.moveTo(x + 2 * dx, y + 3 * dy);
  14569. ctx.lineTo(x + 14 * dx, y + 3 * dy);
  14570. ctx.lineTo(x + 14 * dx, y + 11 * dy);
  14571. ctx.moveTo(x + 2 * dx, y + 5 * dy);
  14572. ctx.lineTo(x + 2 * dx, y + 13 * dy);
  14573. ctx.lineTo(x + 14 * dx, y + 13 * dy);
  14574. ctx.moveTo(x + 10 * dx, y + 10 * dy);
  14575. ctx.lineTo(x + 14 * dx, y + 13 * dy);
  14576. ctx.lineTo(x + 10 * dx, y + style.height);
  14577. }
  14578. function _iconRestore(ctx, style) {
  14579. var x = style.x;
  14580. var y = style.y;
  14581. var dx = style.width / 16;
  14582. var dy = style.height / 16;
  14583. var r = style.width / 2;
  14584. ctx.lineWidth = 1.5;
  14585. ctx.arc(x + r, y + r, r - dx, 0, Math.PI * 2 / 3);
  14586. ctx.moveTo(x + 3 * dx, y + style.height);
  14587. ctx.lineTo(x + 0 * dx, y + 12 * dy);
  14588. ctx.lineTo(x + 5 * dx, y + 11 * dy);
  14589. ctx.moveTo(x, y + 8 * dy);
  14590. ctx.arc(x + r, y + r, r - dx, Math.PI, Math.PI * 5 / 3);
  14591. ctx.moveTo(x + 13 * dx, y);
  14592. ctx.lineTo(x + style.width, y + 4 * dy);
  14593. ctx.lineTo(x + 11 * dx, y + 5 * dy);
  14594. }
  14595. function _iconLineChart(ctx, style) {
  14596. var x = style.x;
  14597. var y = style.y;
  14598. var dx = style.width / 16;
  14599. var dy = style.height / 16;
  14600. ctx.moveTo(x, y);
  14601. ctx.lineTo(x, y + style.height);
  14602. ctx.lineTo(x + style.width, y + style.height);
  14603. ctx.moveTo(x + 2 * dx, y + 14 * dy);
  14604. ctx.lineTo(x + 7 * dx, y + 6 * dy);
  14605. ctx.lineTo(x + 11 * dx, y + 11 * dy);
  14606. ctx.lineTo(x + 15 * dx, y + 2 * dy);
  14607. }
  14608. function _iconBarChart(ctx, style) {
  14609. var x = style.x;
  14610. var y = style.y;
  14611. var dx = style.width / 16;
  14612. var dy = style.height / 16;
  14613. ctx.moveTo(x, y);
  14614. ctx.lineTo(x, y + style.height);
  14615. ctx.lineTo(x + style.width, y + style.height);
  14616. ctx.moveTo(x + 3 * dx, y + 14 * dy);
  14617. ctx.lineTo(x + 3 * dx, y + 6 * dy);
  14618. ctx.lineTo(x + 4 * dx, y + 6 * dy);
  14619. ctx.lineTo(x + 4 * dx, y + 14 * dy);
  14620. ctx.moveTo(x + 7 * dx, y + 14 * dy);
  14621. ctx.lineTo(x + 7 * dx, y + 2 * dy);
  14622. ctx.lineTo(x + 8 * dx, y + 2 * dy);
  14623. ctx.lineTo(x + 8 * dx, y + 14 * dy);
  14624. ctx.moveTo(x + 11 * dx, y + 14 * dy);
  14625. ctx.lineTo(x + 11 * dx, y + 9 * dy);
  14626. ctx.lineTo(x + 12 * dx, y + 9 * dy);
  14627. ctx.lineTo(x + 12 * dx, y + 14 * dy);
  14628. }
  14629. function _iconPieChart(ctx, style) {
  14630. var x = style.x;
  14631. var y = style.y;
  14632. var width = style.width - 2;
  14633. var height = style.height - 2;
  14634. var r = Math.min(width, height) / 2;
  14635. y += 2;
  14636. ctx.moveTo(x + r + 3, y + r - 3);
  14637. ctx.arc(x + r + 3, y + r - 3, r - 1, 0, -Math.PI / 2, true);
  14638. ctx.lineTo(x + r + 3, y + r - 3);
  14639. ctx.moveTo(x + r, y);
  14640. ctx.lineTo(x + r, y + r);
  14641. ctx.arc(x + r, y + r, r, -Math.PI / 2, Math.PI * 2, true);
  14642. ctx.lineTo(x + r, y + r);
  14643. ctx.lineWidth = 1.5;
  14644. }
  14645. function _iconFunnelChart(ctx, style) {
  14646. var x = style.x;
  14647. var y = style.y;
  14648. var dx = style.width / 16;
  14649. var dy = style.height / 16;
  14650. y -= dy;
  14651. ctx.moveTo(x + 1 * dx, y + 2 * dy);
  14652. ctx.lineTo(x + 15 * dx, y + 2 * dy);
  14653. ctx.lineTo(x + 14 * dx, y + 3 * dy);
  14654. ctx.lineTo(x + 2 * dx, y + 3 * dy);
  14655. ctx.moveTo(x + 3 * dx, y + 6 * dy);
  14656. ctx.lineTo(x + 13 * dx, y + 6 * dy);
  14657. ctx.lineTo(x + 12 * dx, y + 7 * dy);
  14658. ctx.lineTo(x + 4 * dx, y + 7 * dy);
  14659. ctx.moveTo(x + 5 * dx, y + 10 * dy);
  14660. ctx.lineTo(x + 11 * dx, y + 10 * dy);
  14661. ctx.lineTo(x + 10 * dx, y + 11 * dy);
  14662. ctx.lineTo(x + 6 * dx, y + 11 * dy);
  14663. ctx.moveTo(x + 7 * dx, y + 14 * dy);
  14664. ctx.lineTo(x + 9 * dx, y + 14 * dy);
  14665. ctx.lineTo(x + 8 * dx, y + 15 * dy);
  14666. ctx.lineTo(x + 7 * dx, y + 15 * dy);
  14667. }
  14668. function _iconForceChart(ctx, style) {
  14669. var x = style.x;
  14670. var y = style.y;
  14671. var width = style.width;
  14672. var height = style.height;
  14673. var dx = width / 16;
  14674. var dy = height / 16;
  14675. var r = Math.min(dx, dy) * 2;
  14676. ctx.moveTo(x + dx + r, y + dy + r);
  14677. ctx.arc(x + dx, y + dy, r, Math.PI / 4, Math.PI * 3);
  14678. ctx.lineTo(x + 7 * dx - r, y + 6 * dy - r);
  14679. ctx.arc(x + 7 * dx, y + 6 * dy, r, Math.PI / 4 * 5, Math.PI * 4);
  14680. ctx.arc(x + 7 * dx, y + 6 * dy, r / 2, Math.PI / 4 * 5, Math.PI * 4);
  14681. ctx.moveTo(x + 7 * dx - r / 2, y + 6 * dy + r);
  14682. ctx.lineTo(x + dx + r, y + 14 * dy - r);
  14683. ctx.arc(x + dx, y + 14 * dy, r, -Math.PI / 4, Math.PI * 2);
  14684. ctx.moveTo(x + 7 * dx + r / 2, y + 6 * dy);
  14685. ctx.lineTo(x + 14 * dx - r, y + 10 * dy - r / 2);
  14686. ctx.moveTo(x + 16 * dx, y + 10 * dy);
  14687. ctx.arc(x + 14 * dx, y + 10 * dy, r, 0, Math.PI * 3);
  14688. ctx.lineWidth = 1.5;
  14689. }
  14690. function _iconChordChart(ctx, style) {
  14691. var x = style.x;
  14692. var y = style.y;
  14693. var width = style.width;
  14694. var height = style.height;
  14695. var r = Math.min(width, height) / 2;
  14696. ctx.moveTo(x + width, y + height / 2);
  14697. ctx.arc(x + r, y + r, r, 0, Math.PI * 2);
  14698. ctx.arc(x + r, y, r, Math.PI / 4, Math.PI / 5 * 4);
  14699. ctx.arc(x, y + r, r, -Math.PI / 3, Math.PI / 3);
  14700. ctx.arc(x + width, y + height, r, Math.PI, Math.PI / 2 * 3);
  14701. ctx.lineWidth = 1.5;
  14702. }
  14703. function _iconStackChart(ctx, style) {
  14704. var x = style.x;
  14705. var y = style.y;
  14706. var width = style.width;
  14707. var height = style.height;
  14708. var dy = Math.round(height / 3);
  14709. var delta = Math.round((dy - 2) / 2);
  14710. var len = 3;
  14711. while (len--) {
  14712. ctx.rect(x, y + dy * len + delta, width, 2);
  14713. }
  14714. }
  14715. function _iconTiledChart(ctx, style) {
  14716. var x = style.x;
  14717. var y = style.y;
  14718. var width = style.width;
  14719. var height = style.height;
  14720. var dx = Math.round(width / 3);
  14721. var delta = Math.round((dx - 2) / 2);
  14722. var len = 3;
  14723. while (len--) {
  14724. ctx.rect(x + dx * len + delta, y, 2, height);
  14725. }
  14726. }
  14727. function _iconDataView(ctx, style) {
  14728. var x = style.x;
  14729. var y = style.y;
  14730. var dx = style.width / 16;
  14731. ctx.moveTo(x + dx, y);
  14732. ctx.lineTo(x + dx, y + style.height);
  14733. ctx.lineTo(x + 15 * dx, y + style.height);
  14734. ctx.lineTo(x + 15 * dx, y);
  14735. ctx.lineTo(x + dx, y);
  14736. ctx.moveTo(x + 3 * dx, y + 3 * dx);
  14737. ctx.lineTo(x + 13 * dx, y + 3 * dx);
  14738. ctx.moveTo(x + 3 * dx, y + 6 * dx);
  14739. ctx.lineTo(x + 13 * dx, y + 6 * dx);
  14740. ctx.moveTo(x + 3 * dx, y + 9 * dx);
  14741. ctx.lineTo(x + 13 * dx, y + 9 * dx);
  14742. ctx.moveTo(x + 3 * dx, y + 12 * dx);
  14743. ctx.lineTo(x + 9 * dx, y + 12 * dx);
  14744. }
  14745. function _iconSave(ctx, style) {
  14746. var x = style.x;
  14747. var y = style.y;
  14748. var dx = style.width / 16;
  14749. var dy = style.height / 16;
  14750. ctx.moveTo(x, y);
  14751. ctx.lineTo(x, y + style.height);
  14752. ctx.lineTo(x + style.width, y + style.height);
  14753. ctx.lineTo(x + style.width, y);
  14754. ctx.lineTo(x, y);
  14755. ctx.moveTo(x + 4 * dx, y);
  14756. ctx.lineTo(x + 4 * dx, y + 8 * dy);
  14757. ctx.lineTo(x + 12 * dx, y + 8 * dy);
  14758. ctx.lineTo(x + 12 * dx, y);
  14759. ctx.moveTo(x + 6 * dx, y + 11 * dy);
  14760. ctx.lineTo(x + 6 * dx, y + 13 * dy);
  14761. ctx.lineTo(x + 10 * dx, y + 13 * dy);
  14762. ctx.lineTo(x + 10 * dx, y + 11 * dy);
  14763. ctx.lineTo(x + 6 * dx, y + 11 * dy);
  14764. }
  14765. function _iconCross(ctx, style) {
  14766. var x = style.x;
  14767. var y = style.y;
  14768. var width = style.width;
  14769. var height = style.height;
  14770. ctx.moveTo(x, y + height / 2);
  14771. ctx.lineTo(x + width, y + height / 2);
  14772. ctx.moveTo(x + width / 2, y);
  14773. ctx.lineTo(x + width / 2, y + height);
  14774. }
  14775. function _iconCircle(ctx, style) {
  14776. var width = style.width / 2;
  14777. var height = style.height / 2;
  14778. var r = Math.min(width, height);
  14779. ctx.moveTo(style.x + width + r, style.y + height);
  14780. ctx.arc(style.x + width, style.y + height, r, 0, Math.PI * 2);
  14781. ctx.closePath();
  14782. }
  14783. function _iconRectangle(ctx, style) {
  14784. ctx.rect(style.x, style.y, style.width, style.height);
  14785. ctx.closePath();
  14786. }
  14787. function _iconTriangle(ctx, style) {
  14788. var width = style.width / 2;
  14789. var height = style.height / 2;
  14790. var x = style.x + width;
  14791. var y = style.y + height;
  14792. var symbolSize = Math.min(width, height);
  14793. ctx.moveTo(x, y - symbolSize);
  14794. ctx.lineTo(x + symbolSize, y + symbolSize);
  14795. ctx.lineTo(x - symbolSize, y + symbolSize);
  14796. ctx.lineTo(x, y - symbolSize);
  14797. ctx.closePath();
  14798. }
  14799. function _iconDiamond(ctx, style) {
  14800. var width = style.width / 2;
  14801. var height = style.height / 2;
  14802. var x = style.x + width;
  14803. var y = style.y + height;
  14804. var symbolSize = Math.min(width, height);
  14805. ctx.moveTo(x, y - symbolSize);
  14806. ctx.lineTo(x + symbolSize, y);
  14807. ctx.lineTo(x, y + symbolSize);
  14808. ctx.lineTo(x - symbolSize, y);
  14809. ctx.lineTo(x, y - symbolSize);
  14810. ctx.closePath();
  14811. }
  14812. function _iconArrow(ctx, style) {
  14813. var x = style.x;
  14814. var y = style.y;
  14815. var dx = style.width / 16;
  14816. ctx.moveTo(x + 8 * dx, y);
  14817. ctx.lineTo(x + dx, y + style.height);
  14818. ctx.lineTo(x + 8 * dx, y + style.height / 4 * 3);
  14819. ctx.lineTo(x + 15 * dx, y + style.height);
  14820. ctx.lineTo(x + 8 * dx, y);
  14821. ctx.closePath();
  14822. }
  14823. function _iconStar(ctx, style) {
  14824. var StarShape = require('zrender/shape/Star');
  14825. var width = style.width / 2;
  14826. var height = style.height / 2;
  14827. StarShape.prototype.buildPath(ctx, {
  14828. x: style.x + width,
  14829. y: style.y + height,
  14830. r: Math.min(width, height),
  14831. n: style.n || 5
  14832. });
  14833. }
  14834. function _iconHeart(ctx, style) {
  14835. var HeartShape = require('zrender/shape/Heart');
  14836. HeartShape.prototype.buildPath(ctx, {
  14837. x: style.x + style.width / 2,
  14838. y: style.y + style.height * 0.2,
  14839. a: style.width / 2,
  14840. b: style.height * 0.8
  14841. });
  14842. }
  14843. function _iconDroplet(ctx, style) {
  14844. var DropletShape = require('zrender/shape/Droplet');
  14845. DropletShape.prototype.buildPath(ctx, {
  14846. x: style.x + style.width * 0.5,
  14847. y: style.y + style.height * 0.5,
  14848. a: style.width * 0.5,
  14849. b: style.height * 0.8
  14850. });
  14851. }
  14852. function _iconPin(ctx, style) {
  14853. var x = style.x;
  14854. var y = style.y - style.height / 2 * 1.5;
  14855. var width = style.width / 2;
  14856. var height = style.height / 2;
  14857. var r = Math.min(width, height);
  14858. ctx.arc(x + width, y + height, r, Math.PI / 5 * 4, Math.PI / 5);
  14859. ctx.lineTo(x + width, y + height + r * 1.5);
  14860. ctx.closePath();
  14861. }
  14862. function _iconImage(ctx, style, refreshNextFrame) {
  14863. var ImageShape = require('zrender/shape/Image');
  14864. this._imageShape = this._imageShape || new ImageShape({ style: {} });
  14865. for (var name in style) {
  14866. this._imageShape.style[name] = style[name];
  14867. }
  14868. this._imageShape.brush(ctx, false, refreshNextFrame);
  14869. }
  14870. var Base = require('zrender/shape/Base');
  14871. function Icon(options) {
  14872. Base.call(this, options);
  14873. }
  14874. Icon.prototype = {
  14875. type: 'icon',
  14876. iconLibrary: {
  14877. mark: _iconMark,
  14878. markUndo: _iconMarkUndo,
  14879. markClear: _iconMarkClear,
  14880. dataZoom: _iconDataZoom,
  14881. dataZoomReset: _iconDataZoomReset,
  14882. restore: _iconRestore,
  14883. lineChart: _iconLineChart,
  14884. barChart: _iconBarChart,
  14885. pieChart: _iconPieChart,
  14886. funnelChart: _iconFunnelChart,
  14887. forceChart: _iconForceChart,
  14888. chordChart: _iconChordChart,
  14889. stackChart: _iconStackChart,
  14890. tiledChart: _iconTiledChart,
  14891. dataView: _iconDataView,
  14892. saveAsImage: _iconSave,
  14893. cross: _iconCross,
  14894. circle: _iconCircle,
  14895. rectangle: _iconRectangle,
  14896. triangle: _iconTriangle,
  14897. diamond: _iconDiamond,
  14898. arrow: _iconArrow,
  14899. star: _iconStar,
  14900. heart: _iconHeart,
  14901. droplet: _iconDroplet,
  14902. pin: _iconPin,
  14903. image: _iconImage
  14904. },
  14905. brush: function (ctx, isHighlight, refreshNextFrame) {
  14906. var style = isHighlight ? this.highlightStyle : this.style;
  14907. style = style || {};
  14908. var iconType = style.iconType || this.style.iconType;
  14909. if (iconType === 'image') {
  14910. var ImageShape = require('zrender/shape/Image');
  14911. ImageShape.prototype.brush.call(this, ctx, isHighlight, refreshNextFrame);
  14912. } else {
  14913. var style = this.beforeBrush(ctx, isHighlight);
  14914. ctx.beginPath();
  14915. this.buildPath(ctx, style, refreshNextFrame);
  14916. switch (style.brushType) {
  14917. case 'both':
  14918. ctx.fill();
  14919. case 'stroke':
  14920. style.lineWidth > 0 && ctx.stroke();
  14921. break;
  14922. default:
  14923. ctx.fill();
  14924. }
  14925. this.drawText(ctx, style, this.style);
  14926. this.afterBrush(ctx);
  14927. }
  14928. },
  14929. buildPath: function (ctx, style, refreshNextFrame) {
  14930. if (this.iconLibrary[style.iconType]) {
  14931. this.iconLibrary[style.iconType].call(this, ctx, style, refreshNextFrame);
  14932. } else {
  14933. ctx.moveTo(style.x, style.y);
  14934. ctx.lineTo(style.x + style.width, style.y);
  14935. ctx.lineTo(style.x + style.width, style.y + style.height);
  14936. ctx.lineTo(style.x, style.y + style.height);
  14937. ctx.lineTo(style.x, style.y);
  14938. ctx.closePath();
  14939. }
  14940. return;
  14941. },
  14942. getRect: function (style) {
  14943. if (style.__rect) {
  14944. return style.__rect;
  14945. }
  14946. style.__rect = {
  14947. x: Math.round(style.x),
  14948. y: Math.round(style.y - (style.iconType == 'pin' ? style.height / 2 * 1.5 : 0)),
  14949. width: style.width,
  14950. height: style.height * (style.iconType === 'pin' ? 1.25 : 1)
  14951. };
  14952. return style.__rect;
  14953. },
  14954. isCover: function (x, y) {
  14955. var originPos = this.transformCoordToLocal(x, y);
  14956. x = originPos[0];
  14957. y = originPos[1];
  14958. var rect = this.style.__rect;
  14959. if (!rect) {
  14960. rect = this.style.__rect = this.getRect(this.style);
  14961. }
  14962. var delta = rect.height < 8 || rect.width < 8 ? 4 : 0;
  14963. return x >= rect.x - delta && x <= rect.x + rect.width + delta && y >= rect.y - delta && y <= rect.y + rect.height + delta;
  14964. }
  14965. };
  14966. zrUtil.inherits(Icon, Base);
  14967. return Icon;
  14968. });define('echarts/util/shape/MarkLine', [
  14969. 'require',
  14970. 'zrender/shape/Base',
  14971. './Icon',
  14972. 'zrender/shape/Line',
  14973. 'zrender/shape/BezierCurve',
  14974. 'zrender/tool/area',
  14975. 'zrender/shape/util/dashedLineTo',
  14976. 'zrender/tool/util',
  14977. 'zrender/tool/curve'
  14978. ], function (require) {
  14979. var Base = require('zrender/shape/Base');
  14980. var IconShape = require('./Icon');
  14981. var LineShape = require('zrender/shape/Line');
  14982. var lineInstance = new LineShape({});
  14983. var CurveShape = require('zrender/shape/BezierCurve');
  14984. var curveInstance = new CurveShape({});
  14985. var area = require('zrender/tool/area');
  14986. var dashedLineTo = require('zrender/shape/util/dashedLineTo');
  14987. var zrUtil = require('zrender/tool/util');
  14988. var curveTool = require('zrender/tool/curve');
  14989. function MarkLine(options) {
  14990. Base.call(this, options);
  14991. if (this.style.curveness > 0) {
  14992. this.updatePoints(this.style);
  14993. }
  14994. if (this.highlightStyle.curveness > 0) {
  14995. this.updatePoints(this.highlightStyle);
  14996. }
  14997. }
  14998. MarkLine.prototype = {
  14999. type: 'mark-line',
  15000. brush: function (ctx, isHighlight) {
  15001. var style = this.style;
  15002. if (isHighlight) {
  15003. style = this.getHighlightStyle(style, this.highlightStyle || {});
  15004. }
  15005. ctx.save();
  15006. this.setContext(ctx, style);
  15007. this.setTransform(ctx);
  15008. ctx.save();
  15009. ctx.beginPath();
  15010. this.buildPath(ctx, style);
  15011. ctx.stroke();
  15012. ctx.restore();
  15013. this.brushSymbol(ctx, style, 0);
  15014. this.brushSymbol(ctx, style, 1);
  15015. this.drawText(ctx, style, this.style);
  15016. ctx.restore();
  15017. },
  15018. buildPath: function (ctx, style) {
  15019. var lineType = style.lineType || 'solid';
  15020. ctx.moveTo(style.xStart, style.yStart);
  15021. if (style.curveness > 0) {
  15022. var lineDash = null;
  15023. switch (lineType) {
  15024. case 'dashed':
  15025. lineDash = [
  15026. 5,
  15027. 5
  15028. ];
  15029. break;
  15030. case 'dotted':
  15031. lineDash = [
  15032. 1,
  15033. 1
  15034. ];
  15035. break;
  15036. }
  15037. if (lineDash && ctx.setLineDash) {
  15038. ctx.setLineDash(lineDash);
  15039. }
  15040. ctx.quadraticCurveTo(style.cpX1, style.cpY1, style.xEnd, style.yEnd);
  15041. } else {
  15042. if (lineType == 'solid') {
  15043. ctx.lineTo(style.xEnd, style.yEnd);
  15044. } else {
  15045. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  15046. dashedLineTo(ctx, style.xStart, style.yStart, style.xEnd, style.yEnd, dashLength);
  15047. }
  15048. }
  15049. },
  15050. updatePoints: function (style) {
  15051. var curveness = style.curveness || 0;
  15052. var inv = 1;
  15053. var x0 = style.xStart;
  15054. var y0 = style.yStart;
  15055. var x2 = style.xEnd;
  15056. var y2 = style.yEnd;
  15057. var x1 = (x0 + x2) / 2 - inv * (y0 - y2) * curveness;
  15058. var y1 = (y0 + y2) / 2 - inv * (x2 - x0) * curveness;
  15059. style.cpX1 = x1;
  15060. style.cpY1 = y1;
  15061. },
  15062. brushSymbol: function (ctx, style, idx) {
  15063. if (style.symbol[idx] == 'none') {
  15064. return;
  15065. }
  15066. ctx.save();
  15067. ctx.beginPath();
  15068. ctx.lineWidth = style.symbolBorder;
  15069. ctx.strokeStyle = style.symbolBorderColor;
  15070. var symbol = style.symbol[idx].replace('empty', '').toLowerCase();
  15071. if (style.symbol[idx].match('empty')) {
  15072. ctx.fillStyle = '#fff';
  15073. }
  15074. var x0 = style.xStart;
  15075. var y0 = style.yStart;
  15076. var x2 = style.xEnd;
  15077. var y2 = style.yEnd;
  15078. var x = idx === 0 ? x0 : x2;
  15079. var y = idx === 0 ? y0 : y2;
  15080. var curveness = style.curveness || 0;
  15081. var rotate = style.symbolRotate[idx] != null ? style.symbolRotate[idx] - 0 : 0;
  15082. rotate = rotate / 180 * Math.PI;
  15083. if (symbol == 'arrow' && rotate === 0) {
  15084. if (curveness === 0) {
  15085. var sign = idx === 0 ? -1 : 1;
  15086. rotate = Math.PI / 2 + Math.atan2(sign * (y2 - y0), sign * (x2 - x0));
  15087. } else {
  15088. var x1 = style.cpX1;
  15089. var y1 = style.cpY1;
  15090. var quadraticDerivativeAt = curveTool.quadraticDerivativeAt;
  15091. var dx = quadraticDerivativeAt(x0, x1, x2, idx);
  15092. var dy = quadraticDerivativeAt(y0, y1, y2, idx);
  15093. rotate = Math.PI / 2 + Math.atan2(dy, dx);
  15094. }
  15095. }
  15096. ctx.translate(x, y);
  15097. if (rotate !== 0) {
  15098. ctx.rotate(rotate);
  15099. }
  15100. var symbolSize = style.symbolSize[idx];
  15101. IconShape.prototype.buildPath(ctx, {
  15102. x: -symbolSize,
  15103. y: -symbolSize,
  15104. width: symbolSize * 2,
  15105. height: symbolSize * 2,
  15106. iconType: symbol
  15107. });
  15108. ctx.closePath();
  15109. ctx.fill();
  15110. ctx.stroke();
  15111. ctx.restore();
  15112. },
  15113. getRect: function (style) {
  15114. style.curveness > 0 ? curveInstance.getRect(style) : lineInstance.getRect(style);
  15115. return style.__rect;
  15116. },
  15117. isCover: function (x, y) {
  15118. var originPos = this.transformCoordToLocal(x, y);
  15119. x = originPos[0];
  15120. y = originPos[1];
  15121. if (this.isCoverRect(x, y)) {
  15122. return this.style.curveness > 0 ? area.isInside(curveInstance, this.style, x, y) : area.isInside(lineInstance, this.style, x, y);
  15123. }
  15124. return false;
  15125. }
  15126. };
  15127. zrUtil.inherits(MarkLine, Base);
  15128. return MarkLine;
  15129. });define('echarts/util/shape/Symbol', [
  15130. 'require',
  15131. 'zrender/shape/Base',
  15132. 'zrender/shape/Polygon',
  15133. 'zrender/tool/util',
  15134. './normalIsCover'
  15135. ], function (require) {
  15136. var Base = require('zrender/shape/Base');
  15137. var PolygonShape = require('zrender/shape/Polygon');
  15138. var polygonInstance = new PolygonShape({});
  15139. var zrUtil = require('zrender/tool/util');
  15140. function Symbol(options) {
  15141. Base.call(this, options);
  15142. }
  15143. Symbol.prototype = {
  15144. type: 'symbol',
  15145. buildPath: function (ctx, style) {
  15146. var pointList = style.pointList;
  15147. var len = pointList.length;
  15148. if (len === 0) {
  15149. return;
  15150. }
  15151. var subSize = 10000;
  15152. var subSetLength = Math.ceil(len / subSize);
  15153. var sub;
  15154. var subLen;
  15155. var isArray = pointList[0] instanceof Array;
  15156. var size = style.size ? style.size : 2;
  15157. var curSize = size;
  15158. var halfSize = size / 2;
  15159. var PI2 = Math.PI * 2;
  15160. var percent;
  15161. var x;
  15162. var y;
  15163. for (var j = 0; j < subSetLength; j++) {
  15164. ctx.beginPath();
  15165. sub = j * subSize;
  15166. subLen = sub + subSize;
  15167. subLen = subLen > len ? len : subLen;
  15168. for (var i = sub; i < subLen; i++) {
  15169. if (style.random) {
  15170. percent = style['randomMap' + i % 20] / 100;
  15171. curSize = size * percent * percent;
  15172. halfSize = curSize / 2;
  15173. }
  15174. if (isArray) {
  15175. x = pointList[i][0];
  15176. y = pointList[i][1];
  15177. } else {
  15178. x = pointList[i].x;
  15179. y = pointList[i].y;
  15180. }
  15181. if (curSize < 3) {
  15182. ctx.rect(x - halfSize, y - halfSize, curSize, curSize);
  15183. } else {
  15184. switch (style.iconType) {
  15185. case 'circle':
  15186. ctx.moveTo(x, y);
  15187. ctx.arc(x, y, halfSize, 0, PI2, true);
  15188. break;
  15189. case 'diamond':
  15190. ctx.moveTo(x, y - halfSize);
  15191. ctx.lineTo(x + halfSize / 3, y - halfSize / 3);
  15192. ctx.lineTo(x + halfSize, y);
  15193. ctx.lineTo(x + halfSize / 3, y + halfSize / 3);
  15194. ctx.lineTo(x, y + halfSize);
  15195. ctx.lineTo(x - halfSize / 3, y + halfSize / 3);
  15196. ctx.lineTo(x - halfSize, y);
  15197. ctx.lineTo(x - halfSize / 3, y - halfSize / 3);
  15198. ctx.lineTo(x, y - halfSize);
  15199. break;
  15200. default:
  15201. ctx.rect(x - halfSize, y - halfSize, curSize, curSize);
  15202. }
  15203. }
  15204. }
  15205. ctx.closePath();
  15206. if (j < subSetLength - 1) {
  15207. switch (style.brushType) {
  15208. case 'both':
  15209. ctx.fill();
  15210. style.lineWidth > 0 && ctx.stroke();
  15211. break;
  15212. case 'stroke':
  15213. style.lineWidth > 0 && ctx.stroke();
  15214. break;
  15215. default:
  15216. ctx.fill();
  15217. }
  15218. }
  15219. }
  15220. },
  15221. getRect: function (style) {
  15222. return style.__rect || polygonInstance.getRect(style);
  15223. },
  15224. isCover: require('./normalIsCover')
  15225. };
  15226. zrUtil.inherits(Symbol, Base);
  15227. return Symbol;
  15228. });define('zrender/shape/Polyline', [
  15229. 'require',
  15230. './Base',
  15231. './util/smoothSpline',
  15232. './util/smoothBezier',
  15233. './util/dashedLineTo',
  15234. './Polygon',
  15235. '../tool/util'
  15236. ], function (require) {
  15237. var Base = require('./Base');
  15238. var smoothSpline = require('./util/smoothSpline');
  15239. var smoothBezier = require('./util/smoothBezier');
  15240. var dashedLineTo = require('./util/dashedLineTo');
  15241. var Polyline = function (options) {
  15242. this.brushTypeOnly = 'stroke';
  15243. this.textPosition = 'end';
  15244. Base.call(this, options);
  15245. };
  15246. Polyline.prototype = {
  15247. type: 'polyline',
  15248. buildPath: function (ctx, style) {
  15249. var pointList = style.pointList;
  15250. if (pointList.length < 2) {
  15251. return;
  15252. }
  15253. var len = Math.min(style.pointList.length, Math.round(style.pointListLength || style.pointList.length));
  15254. if (style.smooth && style.smooth !== 'spline') {
  15255. if (!style.controlPointList) {
  15256. this.updateControlPoints(style);
  15257. }
  15258. var controlPointList = style.controlPointList;
  15259. ctx.moveTo(pointList[0][0], pointList[0][1]);
  15260. var cp1;
  15261. var cp2;
  15262. var p;
  15263. for (var i = 0; i < len - 1; i++) {
  15264. cp1 = controlPointList[i * 2];
  15265. cp2 = controlPointList[i * 2 + 1];
  15266. p = pointList[i + 1];
  15267. ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
  15268. }
  15269. } else {
  15270. if (style.smooth === 'spline') {
  15271. pointList = smoothSpline(pointList);
  15272. len = pointList.length;
  15273. }
  15274. if (!style.lineType || style.lineType == 'solid') {
  15275. ctx.moveTo(pointList[0][0], pointList[0][1]);
  15276. for (var i = 1; i < len; i++) {
  15277. ctx.lineTo(pointList[i][0], pointList[i][1]);
  15278. }
  15279. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  15280. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  15281. ctx.moveTo(pointList[0][0], pointList[0][1]);
  15282. for (var i = 1; i < len; i++) {
  15283. dashedLineTo(ctx, pointList[i - 1][0], pointList[i - 1][1], pointList[i][0], pointList[i][1], dashLength);
  15284. }
  15285. }
  15286. }
  15287. return;
  15288. },
  15289. updateControlPoints: function (style) {
  15290. style.controlPointList = smoothBezier(style.pointList, style.smooth, false, style.smoothConstraint);
  15291. },
  15292. getRect: function (style) {
  15293. return require('./Polygon').prototype.getRect(style);
  15294. }
  15295. };
  15296. require('../tool/util').inherits(Polyline, Base);
  15297. return Polyline;
  15298. });define('zrender/shape/ShapeBundle', [
  15299. 'require',
  15300. './Base',
  15301. '../tool/util'
  15302. ], function (require) {
  15303. var Base = require('./Base');
  15304. var ShapeBundle = function (options) {
  15305. Base.call(this, options);
  15306. };
  15307. ShapeBundle.prototype = {
  15308. constructor: ShapeBundle,
  15309. type: 'shape-bundle',
  15310. brush: function (ctx, isHighlight) {
  15311. var style = this.beforeBrush(ctx, isHighlight);
  15312. ctx.beginPath();
  15313. for (var i = 0; i < style.shapeList.length; i++) {
  15314. var subShape = style.shapeList[i];
  15315. var subShapeStyle = subShape.style;
  15316. if (isHighlight) {
  15317. subShapeStyle = subShape.getHighlightStyle(subShapeStyle, subShape.highlightStyle || {}, subShape.brushTypeOnly);
  15318. }
  15319. subShape.buildPath(ctx, subShapeStyle);
  15320. }
  15321. switch (style.brushType) {
  15322. case 'both':
  15323. ctx.fill();
  15324. case 'stroke':
  15325. style.lineWidth > 0 && ctx.stroke();
  15326. break;
  15327. default:
  15328. ctx.fill();
  15329. }
  15330. this.drawText(ctx, style, this.style);
  15331. this.afterBrush(ctx);
  15332. },
  15333. getRect: function (style) {
  15334. if (style.__rect) {
  15335. return style.__rect;
  15336. }
  15337. var minX = Infinity;
  15338. var maxX = -Infinity;
  15339. var minY = Infinity;
  15340. var maxY = -Infinity;
  15341. for (var i = 0; i < style.shapeList.length; i++) {
  15342. var subShape = style.shapeList[i];
  15343. var subRect = subShape.getRect(subShape.style);
  15344. var minX = Math.min(subRect.x, minX);
  15345. var minY = Math.min(subRect.y, minY);
  15346. var maxX = Math.max(subRect.x + subRect.width, maxX);
  15347. var maxY = Math.max(subRect.y + subRect.height, maxY);
  15348. }
  15349. style.__rect = {
  15350. x: minX,
  15351. y: minY,
  15352. width: maxX - minX,
  15353. height: maxY - minY
  15354. };
  15355. return style.__rect;
  15356. },
  15357. isCover: function (x, y) {
  15358. var originPos = this.transformCoordToLocal(x, y);
  15359. x = originPos[0];
  15360. y = originPos[1];
  15361. if (this.isCoverRect(x, y)) {
  15362. for (var i = 0; i < this.style.shapeList.length; i++) {
  15363. var subShape = this.style.shapeList[i];
  15364. if (subShape.isCover(x, y)) {
  15365. return true;
  15366. }
  15367. }
  15368. }
  15369. return false;
  15370. }
  15371. };
  15372. require('../tool/util').inherits(ShapeBundle, Base);
  15373. return ShapeBundle;
  15374. });define('echarts/util/ecAnimation', [
  15375. 'require',
  15376. 'zrender/tool/util',
  15377. 'zrender/tool/curve',
  15378. 'zrender/shape/Polygon'
  15379. ], function (require) {
  15380. var zrUtil = require('zrender/tool/util');
  15381. var curveTool = require('zrender/tool/curve');
  15382. function pointList(zr, oldShape, newShape, duration, easing) {
  15383. var newPointList = newShape.style.pointList;
  15384. var newPointListLen = newPointList.length;
  15385. var oldPointList;
  15386. if (!oldShape) {
  15387. oldPointList = [];
  15388. if (newShape._orient != 'vertical') {
  15389. var y = newPointList[0][1];
  15390. for (var i = 0; i < newPointListLen; i++) {
  15391. oldPointList[i] = [
  15392. newPointList[i][0],
  15393. y
  15394. ];
  15395. }
  15396. } else {
  15397. var x = newPointList[0][0];
  15398. for (var i = 0; i < newPointListLen; i++) {
  15399. oldPointList[i] = [
  15400. x,
  15401. newPointList[i][1]
  15402. ];
  15403. }
  15404. }
  15405. if (newShape.type == 'half-smooth-polygon') {
  15406. oldPointList[newPointListLen - 1] = zrUtil.clone(newPointList[newPointListLen - 1]);
  15407. oldPointList[newPointListLen - 2] = zrUtil.clone(newPointList[newPointListLen - 2]);
  15408. }
  15409. oldShape = { style: { pointList: oldPointList } };
  15410. }
  15411. oldPointList = oldShape.style.pointList;
  15412. var oldPointListLen = oldPointList.length;
  15413. if (oldPointListLen == newPointListLen) {
  15414. newShape.style.pointList = oldPointList;
  15415. } else if (oldPointListLen < newPointListLen) {
  15416. newShape.style.pointList = oldPointList.concat(newPointList.slice(oldPointListLen));
  15417. } else {
  15418. newShape.style.pointList = oldPointList.slice(0, newPointListLen);
  15419. }
  15420. zr.addShape(newShape);
  15421. newShape.__animating = true;
  15422. zr.animate(newShape.id, 'style').when(duration, { pointList: newPointList }).during(function () {
  15423. if (newShape.updateControlPoints) {
  15424. newShape.updateControlPoints(newShape.style);
  15425. }
  15426. }).done(function () {
  15427. newShape.__animating = false;
  15428. }).start(easing);
  15429. }
  15430. function cloneStyle(target, source) {
  15431. var len = arguments.length;
  15432. for (var i = 2; i < len; i++) {
  15433. var prop = arguments[i];
  15434. target.style[prop] = source.style[prop];
  15435. }
  15436. }
  15437. function rectangle(zr, oldShape, newShape, duration, easing) {
  15438. var newShapeStyle = newShape.style;
  15439. if (!oldShape) {
  15440. oldShape = {
  15441. position: newShape.position,
  15442. style: {
  15443. x: newShapeStyle.x,
  15444. y: newShape._orient == 'vertical' ? newShapeStyle.y + newShapeStyle.height : newShapeStyle.y,
  15445. width: newShape._orient == 'vertical' ? newShapeStyle.width : 0,
  15446. height: newShape._orient != 'vertical' ? newShapeStyle.height : 0
  15447. }
  15448. };
  15449. }
  15450. var newX = newShapeStyle.x;
  15451. var newY = newShapeStyle.y;
  15452. var newWidth = newShapeStyle.width;
  15453. var newHeight = newShapeStyle.height;
  15454. var newPosition = [
  15455. newShape.position[0],
  15456. newShape.position[1]
  15457. ];
  15458. cloneStyle(newShape, oldShape, 'x', 'y', 'width', 'height');
  15459. newShape.position = oldShape.position;
  15460. zr.addShape(newShape);
  15461. if (newPosition[0] != oldShape.position[0] || newPosition[1] != oldShape.position[1]) {
  15462. zr.animate(newShape.id, '').when(duration, { position: newPosition }).start(easing);
  15463. }
  15464. newShape.__animating = true;
  15465. zr.animate(newShape.id, 'style').when(duration, {
  15466. x: newX,
  15467. y: newY,
  15468. width: newWidth,
  15469. height: newHeight
  15470. }).done(function () {
  15471. newShape.__animating = false;
  15472. }).start(easing);
  15473. }
  15474. function candle(zr, oldShape, newShape, duration, easing) {
  15475. if (!oldShape) {
  15476. var y = newShape.style.y;
  15477. oldShape = {
  15478. style: {
  15479. y: [
  15480. y[0],
  15481. y[0],
  15482. y[0],
  15483. y[0]
  15484. ]
  15485. }
  15486. };
  15487. }
  15488. var newY = newShape.style.y;
  15489. newShape.style.y = oldShape.style.y;
  15490. zr.addShape(newShape);
  15491. newShape.__animating = true;
  15492. zr.animate(newShape.id, 'style').when(duration, { y: newY }).done(function () {
  15493. newShape.__animating = false;
  15494. }).start(easing);
  15495. }
  15496. function ring(zr, oldShape, newShape, duration, easing) {
  15497. var x = newShape.style.x;
  15498. var y = newShape.style.y;
  15499. var r0 = newShape.style.r0;
  15500. var r = newShape.style.r;
  15501. newShape.__animating = true;
  15502. if (newShape._animationAdd != 'r') {
  15503. newShape.style.r0 = 0;
  15504. newShape.style.r = 0;
  15505. newShape.rotation = [
  15506. Math.PI * 2,
  15507. x,
  15508. y
  15509. ];
  15510. zr.addShape(newShape);
  15511. zr.animate(newShape.id, 'style').when(duration, {
  15512. r0: r0,
  15513. r: r
  15514. }).done(function () {
  15515. newShape.__animating = false;
  15516. }).start(easing);
  15517. zr.animate(newShape.id, '').when(Math.round(duration / 3 * 2), {
  15518. rotation: [
  15519. 0,
  15520. x,
  15521. y
  15522. ]
  15523. }).start(easing);
  15524. } else {
  15525. newShape.style.r0 = newShape.style.r;
  15526. zr.addShape(newShape);
  15527. zr.animate(newShape.id, 'style').when(duration, { r0: r0 }).done(function () {
  15528. newShape.__animating = false;
  15529. }).start(easing);
  15530. }
  15531. }
  15532. function sector(zr, oldShape, newShape, duration, easing) {
  15533. if (!oldShape) {
  15534. if (newShape._animationAdd != 'r') {
  15535. oldShape = {
  15536. style: {
  15537. startAngle: newShape.style.startAngle,
  15538. endAngle: newShape.style.startAngle
  15539. }
  15540. };
  15541. } else {
  15542. oldShape = { style: { r0: newShape.style.r } };
  15543. }
  15544. }
  15545. var startAngle = newShape.style.startAngle;
  15546. var endAngle = newShape.style.endAngle;
  15547. cloneStyle(newShape, oldShape, 'startAngle', 'endAngle');
  15548. zr.addShape(newShape);
  15549. newShape.__animating = true;
  15550. zr.animate(newShape.id, 'style').when(duration, {
  15551. startAngle: startAngle,
  15552. endAngle: endAngle
  15553. }).done(function () {
  15554. newShape.__animating = false;
  15555. }).start(easing);
  15556. }
  15557. function text(zr, oldShape, newShape, duration, easing) {
  15558. if (!oldShape) {
  15559. oldShape = {
  15560. style: {
  15561. x: newShape.style.textAlign == 'left' ? newShape.style.x + 100 : newShape.style.x - 100,
  15562. y: newShape.style.y
  15563. }
  15564. };
  15565. }
  15566. var x = newShape.style.x;
  15567. var y = newShape.style.y;
  15568. cloneStyle(newShape, oldShape, 'x', 'y');
  15569. zr.addShape(newShape);
  15570. newShape.__animating = true;
  15571. zr.animate(newShape.id, 'style').when(duration, {
  15572. x: x,
  15573. y: y
  15574. }).done(function () {
  15575. newShape.__animating = false;
  15576. }).start(easing);
  15577. }
  15578. function polygon(zr, oldShape, newShape, duration, easing) {
  15579. var rect = require('zrender/shape/Polygon').prototype.getRect(newShape.style);
  15580. var x = rect.x + rect.width / 2;
  15581. var y = rect.y + rect.height / 2;
  15582. newShape.scale = [
  15583. 0.1,
  15584. 0.1,
  15585. x,
  15586. y
  15587. ];
  15588. zr.addShape(newShape);
  15589. newShape.__animating = true;
  15590. zr.animate(newShape.id, '').when(duration, {
  15591. scale: [
  15592. 1,
  15593. 1,
  15594. x,
  15595. y
  15596. ]
  15597. }).done(function () {
  15598. newShape.__animating = false;
  15599. }).start(easing);
  15600. }
  15601. function ribbon(zr, oldShape, newShape, duration, easing) {
  15602. if (!oldShape) {
  15603. oldShape = {
  15604. style: {
  15605. source0: 0,
  15606. source1: newShape.style.source1 > 0 ? 360 : -360,
  15607. target0: 0,
  15608. target1: newShape.style.target1 > 0 ? 360 : -360
  15609. }
  15610. };
  15611. }
  15612. var source0 = newShape.style.source0;
  15613. var source1 = newShape.style.source1;
  15614. var target0 = newShape.style.target0;
  15615. var target1 = newShape.style.target1;
  15616. if (oldShape.style) {
  15617. cloneStyle(newShape, oldShape, 'source0', 'source1', 'target0', 'target1');
  15618. }
  15619. zr.addShape(newShape);
  15620. newShape.__animating = true;
  15621. zr.animate(newShape.id, 'style').when(duration, {
  15622. source0: source0,
  15623. source1: source1,
  15624. target0: target0,
  15625. target1: target1
  15626. }).done(function () {
  15627. newShape.__animating = false;
  15628. }).start(easing);
  15629. }
  15630. function gaugePointer(zr, oldShape, newShape, duration, easing) {
  15631. if (!oldShape) {
  15632. oldShape = { style: { angle: newShape.style.startAngle } };
  15633. }
  15634. var angle = newShape.style.angle;
  15635. newShape.style.angle = oldShape.style.angle;
  15636. zr.addShape(newShape);
  15637. newShape.__animating = true;
  15638. zr.animate(newShape.id, 'style').when(duration, { angle: angle }).done(function () {
  15639. newShape.__animating = false;
  15640. }).start(easing);
  15641. }
  15642. function icon(zr, oldShape, newShape, duration, easing, delay) {
  15643. newShape.style._x = newShape.style.x;
  15644. newShape.style._y = newShape.style.y;
  15645. newShape.style._width = newShape.style.width;
  15646. newShape.style._height = newShape.style.height;
  15647. if (!oldShape) {
  15648. var x = newShape._x || 0;
  15649. var y = newShape._y || 0;
  15650. newShape.scale = [
  15651. 0.01,
  15652. 0.01,
  15653. x,
  15654. y
  15655. ];
  15656. zr.addShape(newShape);
  15657. newShape.__animating = true;
  15658. zr.animate(newShape.id, '').delay(delay).when(duration, {
  15659. scale: [
  15660. 1,
  15661. 1,
  15662. x,
  15663. y
  15664. ]
  15665. }).done(function () {
  15666. newShape.__animating = false;
  15667. }).start(easing || 'QuinticOut');
  15668. } else {
  15669. rectangle(zr, oldShape, newShape, duration, easing);
  15670. }
  15671. }
  15672. function line(zr, oldShape, newShape, duration, easing) {
  15673. if (!oldShape) {
  15674. oldShape = {
  15675. style: {
  15676. xStart: newShape.style.xStart,
  15677. yStart: newShape.style.yStart,
  15678. xEnd: newShape.style.xStart,
  15679. yEnd: newShape.style.yStart
  15680. }
  15681. };
  15682. }
  15683. var xStart = newShape.style.xStart;
  15684. var xEnd = newShape.style.xEnd;
  15685. var yStart = newShape.style.yStart;
  15686. var yEnd = newShape.style.yEnd;
  15687. cloneStyle(newShape, oldShape, 'xStart', 'xEnd', 'yStart', 'yEnd');
  15688. zr.addShape(newShape);
  15689. newShape.__animating = true;
  15690. zr.animate(newShape.id, 'style').when(duration, {
  15691. xStart: xStart,
  15692. xEnd: xEnd,
  15693. yStart: yStart,
  15694. yEnd: yEnd
  15695. }).done(function () {
  15696. newShape.__animating = false;
  15697. }).start(easing);
  15698. }
  15699. function markline(zr, oldShape, newShape, duration, easing) {
  15700. easing = easing || 'QuinticOut';
  15701. newShape.__animating = true;
  15702. zr.addShape(newShape);
  15703. var newShapeStyle = newShape.style;
  15704. var animationDone = function () {
  15705. newShape.__animating = false;
  15706. };
  15707. var x0 = newShapeStyle.xStart;
  15708. var y0 = newShapeStyle.yStart;
  15709. var x2 = newShapeStyle.xEnd;
  15710. var y2 = newShapeStyle.yEnd;
  15711. if (newShapeStyle.curveness > 0) {
  15712. newShape.updatePoints(newShapeStyle);
  15713. var obj = { p: 0 };
  15714. var x1 = newShapeStyle.cpX1;
  15715. var y1 = newShapeStyle.cpY1;
  15716. var newXArr = [];
  15717. var newYArr = [];
  15718. var subdivide = curveTool.quadraticSubdivide;
  15719. zr.animation.animate(obj).when(duration, { p: 1 }).during(function () {
  15720. subdivide(x0, x1, x2, obj.p, newXArr);
  15721. subdivide(y0, y1, y2, obj.p, newYArr);
  15722. newShapeStyle.cpX1 = newXArr[1];
  15723. newShapeStyle.cpY1 = newYArr[1];
  15724. newShapeStyle.xEnd = newXArr[2];
  15725. newShapeStyle.yEnd = newYArr[2];
  15726. zr.modShape(newShape);
  15727. }).done(animationDone).start(easing);
  15728. } else {
  15729. zr.animate(newShape.id, 'style').when(0, {
  15730. xEnd: x0,
  15731. yEnd: y0
  15732. }).when(duration, {
  15733. xEnd: x2,
  15734. yEnd: y2
  15735. }).done(animationDone).start(easing);
  15736. }
  15737. }
  15738. return {
  15739. pointList: pointList,
  15740. rectangle: rectangle,
  15741. candle: candle,
  15742. ring: ring,
  15743. sector: sector,
  15744. text: text,
  15745. polygon: polygon,
  15746. ribbon: ribbon,
  15747. gaugePointer: gaugePointer,
  15748. icon: icon,
  15749. line: line,
  15750. markline: markline
  15751. };
  15752. });define('echarts/util/ecEffect', [
  15753. 'require',
  15754. '../util/ecData',
  15755. 'zrender/shape/Circle',
  15756. 'zrender/shape/Image',
  15757. 'zrender/tool/curve',
  15758. '../util/shape/Icon',
  15759. '../util/shape/Symbol',
  15760. 'zrender/shape/ShapeBundle',
  15761. 'zrender/shape/Polyline',
  15762. 'zrender/tool/vector',
  15763. 'zrender/tool/env'
  15764. ], function (require) {
  15765. var ecData = require('../util/ecData');
  15766. var CircleShape = require('zrender/shape/Circle');
  15767. var ImageShape = require('zrender/shape/Image');
  15768. var curveTool = require('zrender/tool/curve');
  15769. var IconShape = require('../util/shape/Icon');
  15770. var SymbolShape = require('../util/shape/Symbol');
  15771. var ShapeBundle = require('zrender/shape/ShapeBundle');
  15772. var Polyline = require('zrender/shape/Polyline');
  15773. var vec2 = require('zrender/tool/vector');
  15774. var canvasSupported = require('zrender/tool/env').canvasSupported;
  15775. function point(zr, effectList, shape, zlevel) {
  15776. var effect = shape.effect;
  15777. var color = effect.color || shape.style.strokeColor || shape.style.color;
  15778. var shadowColor = effect.shadowColor || color;
  15779. var size = effect.scaleSize;
  15780. var distance = effect.bounceDistance;
  15781. var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size;
  15782. var effectShape;
  15783. if (shape.type !== 'image') {
  15784. effectShape = new IconShape({
  15785. zlevel: zlevel,
  15786. style: {
  15787. brushType: 'stroke',
  15788. iconType: shape.style.iconType != 'droplet' ? shape.style.iconType : 'circle',
  15789. x: shadowBlur + 1,
  15790. y: shadowBlur + 1,
  15791. n: shape.style.n,
  15792. width: shape.style._width * size,
  15793. height: shape.style._height * size,
  15794. lineWidth: 1,
  15795. strokeColor: color,
  15796. shadowColor: shadowColor,
  15797. shadowBlur: shadowBlur
  15798. },
  15799. draggable: false,
  15800. hoverable: false
  15801. });
  15802. if (shape.style.iconType == 'pin') {
  15803. effectShape.style.y += effectShape.style.height / 2 * 1.5;
  15804. }
  15805. if (canvasSupported) {
  15806. effectShape.style.image = zr.shapeToImage(effectShape, effectShape.style.width + shadowBlur * 2 + 2, effectShape.style.height + shadowBlur * 2 + 2).style.image;
  15807. effectShape = new ImageShape({
  15808. zlevel: effectShape.zlevel,
  15809. style: effectShape.style,
  15810. draggable: false,
  15811. hoverable: false
  15812. });
  15813. }
  15814. } else {
  15815. effectShape = new ImageShape({
  15816. zlevel: zlevel,
  15817. style: shape.style,
  15818. draggable: false,
  15819. hoverable: false
  15820. });
  15821. }
  15822. ecData.clone(shape, effectShape);
  15823. effectShape.position = shape.position;
  15824. effectList.push(effectShape);
  15825. zr.addShape(effectShape);
  15826. var devicePixelRatio = shape.type !== 'image' ? window.devicePixelRatio || 1 : 1;
  15827. var offset = (effectShape.style.width / devicePixelRatio - shape.style._width) / 2;
  15828. effectShape.style.x = shape.style._x - offset;
  15829. effectShape.style.y = shape.style._y - offset;
  15830. if (shape.style.iconType == 'pin') {
  15831. effectShape.style.y -= shape.style.height / 2 * 1.5;
  15832. }
  15833. var duration = (effect.period + Math.random() * 10) * 100;
  15834. zr.modShape(shape.id, { invisible: true });
  15835. var centerX = effectShape.style.x + effectShape.style.width / 2 / devicePixelRatio;
  15836. var centerY = effectShape.style.y + effectShape.style.height / 2 / devicePixelRatio;
  15837. if (effect.type === 'scale') {
  15838. zr.modShape(effectShape.id, {
  15839. scale: [
  15840. 0.1,
  15841. 0.1,
  15842. centerX,
  15843. centerY
  15844. ]
  15845. });
  15846. zr.animate(effectShape.id, '', effect.loop).when(duration, {
  15847. scale: [
  15848. 1,
  15849. 1,
  15850. centerX,
  15851. centerY
  15852. ]
  15853. }).done(function () {
  15854. shape.effect.show = false;
  15855. zr.delShape(effectShape.id);
  15856. }).start();
  15857. } else {
  15858. zr.animate(effectShape.id, 'style', effect.loop).when(duration, { y: effectShape.style.y - distance }).when(duration * 2, { y: effectShape.style.y }).done(function () {
  15859. shape.effect.show = false;
  15860. zr.delShape(effectShape.id);
  15861. }).start();
  15862. }
  15863. }
  15864. function largePoint(zr, effectList, shape, zlevel) {
  15865. var effect = shape.effect;
  15866. var color = effect.color || shape.style.strokeColor || shape.style.color;
  15867. var size = effect.scaleSize;
  15868. var shadowColor = effect.shadowColor || color;
  15869. var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size * 2;
  15870. var devicePixelRatio = window.devicePixelRatio || 1;
  15871. var effectShape = new SymbolShape({
  15872. zlevel: zlevel,
  15873. position: shape.position,
  15874. scale: shape.scale,
  15875. style: {
  15876. pointList: shape.style.pointList,
  15877. iconType: shape.style.iconType,
  15878. color: color,
  15879. strokeColor: color,
  15880. shadowColor: shadowColor,
  15881. shadowBlur: shadowBlur * devicePixelRatio,
  15882. random: true,
  15883. brushType: 'fill',
  15884. lineWidth: 1,
  15885. size: shape.style.size
  15886. },
  15887. draggable: false,
  15888. hoverable: false
  15889. });
  15890. effectList.push(effectShape);
  15891. zr.addShape(effectShape);
  15892. zr.modShape(shape.id, { invisible: true });
  15893. var duration = Math.round(effect.period * 100);
  15894. var clip1 = {};
  15895. var clip2 = {};
  15896. for (var i = 0; i < 20; i++) {
  15897. effectShape.style['randomMap' + i] = 0;
  15898. clip1 = {};
  15899. clip1['randomMap' + i] = 100;
  15900. clip2 = {};
  15901. clip2['randomMap' + i] = 0;
  15902. effectShape.style['randomMap' + i] = Math.random() * 100;
  15903. 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();
  15904. }
  15905. }
  15906. function line(zr, effectList, shape, zlevel, isLarge) {
  15907. var effect = shape.effect;
  15908. var shapeStyle = shape.style;
  15909. var color = effect.color || shapeStyle.strokeColor || shapeStyle.color;
  15910. var shadowColor = effect.shadowColor || shapeStyle.strokeColor || color;
  15911. var size = shapeStyle.lineWidth * effect.scaleSize;
  15912. var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size;
  15913. var effectShape = new CircleShape({
  15914. zlevel: zlevel,
  15915. style: {
  15916. x: shadowBlur,
  15917. y: shadowBlur,
  15918. r: size,
  15919. color: color,
  15920. shadowColor: shadowColor,
  15921. shadowBlur: shadowBlur
  15922. },
  15923. hoverable: false
  15924. });
  15925. var offset = 0;
  15926. if (canvasSupported && !isLarge) {
  15927. var zlevel = effectShape.zlevel;
  15928. effectShape = zr.shapeToImage(effectShape, (size + shadowBlur) * 2, (size + shadowBlur) * 2);
  15929. effectShape.zlevel = zlevel;
  15930. effectShape.hoverable = false;
  15931. offset = shadowBlur;
  15932. }
  15933. if (!isLarge) {
  15934. ecData.clone(shape, effectShape);
  15935. effectShape.position = shape.position;
  15936. effectList.push(effectShape);
  15937. zr.addShape(effectShape);
  15938. }
  15939. var effectDone = function () {
  15940. if (!isLarge) {
  15941. shape.effect.show = false;
  15942. zr.delShape(effectShape.id);
  15943. }
  15944. effectShape.effectAnimator = null;
  15945. };
  15946. if (shape instanceof Polyline) {
  15947. var distanceList = [0];
  15948. var totalDist = 0;
  15949. var pointList = shapeStyle.pointList;
  15950. var controlPointList = shapeStyle.controlPointList;
  15951. for (var i = 1; i < pointList.length; i++) {
  15952. if (controlPointList) {
  15953. var cp1 = controlPointList[(i - 1) * 2];
  15954. var cp2 = controlPointList[(i - 1) * 2 + 1];
  15955. totalDist += vec2.dist(pointList[i - 1], cp1) + vec2.dist(cp1, cp2) + vec2.dist(cp2, pointList[i]);
  15956. } else {
  15957. totalDist += vec2.dist(pointList[i - 1], pointList[i]);
  15958. }
  15959. distanceList.push(totalDist);
  15960. }
  15961. var obj = { p: 0 };
  15962. var animator = zr.animation.animate(obj, { loop: effect.loop });
  15963. for (var i = 0; i < distanceList.length; i++) {
  15964. animator.when(distanceList[i] * effect.period, { p: i });
  15965. }
  15966. animator.during(function () {
  15967. var i = Math.floor(obj.p);
  15968. var x, y;
  15969. if (i == pointList.length - 1) {
  15970. x = pointList[i][0];
  15971. y = pointList[i][1];
  15972. } else {
  15973. var t = obj.p - i;
  15974. var p0 = pointList[i];
  15975. var p1 = pointList[i + 1];
  15976. if (controlPointList) {
  15977. var cp1 = controlPointList[i * 2];
  15978. var cp2 = controlPointList[i * 2 + 1];
  15979. x = curveTool.cubicAt(p0[0], cp1[0], cp2[0], p1[0], t);
  15980. y = curveTool.cubicAt(p0[1], cp1[1], cp2[1], p1[1], t);
  15981. } else {
  15982. x = (p1[0] - p0[0]) * t + p0[0];
  15983. y = (p1[1] - p0[1]) * t + p0[1];
  15984. }
  15985. }
  15986. effectShape.style.x = x;
  15987. effectShape.style.y = y;
  15988. if (!isLarge) {
  15989. zr.modShape(effectShape);
  15990. }
  15991. }).done(effectDone).start();
  15992. animator.duration = totalDist * effect.period;
  15993. effectShape.effectAnimator = animator;
  15994. } else {
  15995. var x0 = shapeStyle.xStart - offset;
  15996. var y0 = shapeStyle.yStart - offset;
  15997. var x2 = shapeStyle.xEnd - offset;
  15998. var y2 = shapeStyle.yEnd - offset;
  15999. effectShape.style.x = x0;
  16000. effectShape.style.y = y0;
  16001. var distance = (x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0);
  16002. var duration = Math.round(Math.sqrt(Math.round(distance * effect.period * effect.period)));
  16003. if (shape.style.curveness > 0) {
  16004. var x1 = shapeStyle.cpX1 - offset;
  16005. var y1 = shapeStyle.cpY1 - offset;
  16006. effectShape.effectAnimator = zr.animation.animate(effectShape, { loop: effect.loop }).when(duration, { p: 1 }).during(function (target, t) {
  16007. effectShape.style.x = curveTool.quadraticAt(x0, x1, x2, t);
  16008. effectShape.style.y = curveTool.quadraticAt(y0, y1, y2, t);
  16009. if (!isLarge) {
  16010. zr.modShape(effectShape);
  16011. }
  16012. }).done(effectDone).start();
  16013. } else {
  16014. effectShape.effectAnimator = zr.animation.animate(effectShape.style, { loop: effect.loop }).when(duration, {
  16015. x: x2,
  16016. y: y2
  16017. }).during(function () {
  16018. if (!isLarge) {
  16019. zr.modShape(effectShape);
  16020. }
  16021. }).done(effectDone).start();
  16022. }
  16023. effectShape.effectAnimator.duration = duration;
  16024. }
  16025. return effectShape;
  16026. }
  16027. function largeLine(zr, effectList, shape, zlevel) {
  16028. var effectShape = new ShapeBundle({
  16029. style: { shapeList: [] },
  16030. zlevel: zlevel,
  16031. hoverable: false
  16032. });
  16033. var shapeList = shape.style.shapeList;
  16034. var effect = shape.effect;
  16035. effectShape.position = shape.position;
  16036. var maxDuration = 0;
  16037. var subEffectAnimators = [];
  16038. for (var i = 0; i < shapeList.length; i++) {
  16039. shapeList[i].effect = effect;
  16040. var subEffectShape = line(zr, null, shapeList[i], zlevel, true);
  16041. var subEffectAnimator = subEffectShape.effectAnimator;
  16042. effectShape.style.shapeList.push(subEffectShape);
  16043. if (subEffectAnimator.duration > maxDuration) {
  16044. maxDuration = subEffectAnimator.duration;
  16045. }
  16046. if (i === 0) {
  16047. effectShape.style.color = subEffectShape.style.color;
  16048. effectShape.style.shadowBlur = subEffectShape.style.shadowBlur;
  16049. effectShape.style.shadowColor = subEffectShape.style.shadowColor;
  16050. }
  16051. subEffectAnimators.push(subEffectAnimator);
  16052. }
  16053. effectList.push(effectShape);
  16054. zr.addShape(effectShape);
  16055. var clearAllAnimators = function () {
  16056. for (var i = 0; i < subEffectAnimators.length; i++) {
  16057. subEffectAnimators[i].stop();
  16058. }
  16059. };
  16060. if (maxDuration) {
  16061. effectShape.__dummy = 0;
  16062. var animator = zr.animate(effectShape.id, '', effect.loop).when(maxDuration, { __dummy: 1 }).during(function () {
  16063. zr.modShape(effectShape);
  16064. }).done(function () {
  16065. shape.effect.show = false;
  16066. zr.delShape(effectShape.id);
  16067. }).start();
  16068. var oldStop = animator.stop;
  16069. animator.stop = function () {
  16070. clearAllAnimators();
  16071. oldStop.call(this);
  16072. };
  16073. }
  16074. }
  16075. return {
  16076. point: point,
  16077. largePoint: largePoint,
  16078. line: line,
  16079. largeLine: largeLine
  16080. };
  16081. });define('echarts/component/base', [
  16082. 'require',
  16083. '../config',
  16084. '../util/ecData',
  16085. '../util/ecQuery',
  16086. '../util/number',
  16087. 'zrender/tool/util',
  16088. 'zrender/tool/env'
  16089. ], function (require) {
  16090. var ecConfig = require('../config');
  16091. var ecData = require('../util/ecData');
  16092. var ecQuery = require('../util/ecQuery');
  16093. var number = require('../util/number');
  16094. var zrUtil = require('zrender/tool/util');
  16095. function Base(ecTheme, messageCenter, zr, option, myChart) {
  16096. this.ecTheme = ecTheme;
  16097. this.messageCenter = messageCenter;
  16098. this.zr = zr;
  16099. this.option = option;
  16100. this.series = option.series;
  16101. this.myChart = myChart;
  16102. this.component = myChart.component;
  16103. this.shapeList = [];
  16104. this.effectList = [];
  16105. var self = this;
  16106. self._onlegendhoverlink = function (param) {
  16107. if (self.legendHoverLink) {
  16108. var targetName = param.target;
  16109. var name;
  16110. for (var i = self.shapeList.length - 1; i >= 0; i--) {
  16111. 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;
  16112. if (name == targetName && !self.shapeList[i].invisible && !self.shapeList[i].__animating) {
  16113. self.zr.addHoverShape(self.shapeList[i]);
  16114. }
  16115. }
  16116. }
  16117. };
  16118. messageCenter && messageCenter.bind(ecConfig.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink);
  16119. }
  16120. Base.prototype = {
  16121. canvasSupported: require('zrender/tool/env').canvasSupported,
  16122. _getZ: function (zWhat) {
  16123. if (this[zWhat] != null) {
  16124. return this[zWhat];
  16125. }
  16126. var opt = this.ecTheme[this.type];
  16127. if (opt && opt[zWhat] != null) {
  16128. return opt[zWhat];
  16129. }
  16130. opt = ecConfig[this.type];
  16131. if (opt && opt[zWhat] != null) {
  16132. return opt[zWhat];
  16133. }
  16134. return 0;
  16135. },
  16136. getZlevelBase: function () {
  16137. return this._getZ('zlevel');
  16138. },
  16139. getZBase: function () {
  16140. return this._getZ('z');
  16141. },
  16142. reformOption: function (opt) {
  16143. opt = zrUtil.merge(zrUtil.merge(opt || {}, zrUtil.clone(this.ecTheme[this.type] || {})), zrUtil.clone(ecConfig[this.type] || {}));
  16144. this.z = opt.z;
  16145. this.zlevel = opt.zlevel;
  16146. return opt;
  16147. },
  16148. reformCssArray: function (p) {
  16149. if (p instanceof Array) {
  16150. switch (p.length + '') {
  16151. case '4':
  16152. return p;
  16153. case '3':
  16154. return [
  16155. p[0],
  16156. p[1],
  16157. p[2],
  16158. p[1]
  16159. ];
  16160. case '2':
  16161. return [
  16162. p[0],
  16163. p[1],
  16164. p[0],
  16165. p[1]
  16166. ];
  16167. case '1':
  16168. return [
  16169. p[0],
  16170. p[0],
  16171. p[0],
  16172. p[0]
  16173. ];
  16174. case '0':
  16175. return [
  16176. 0,
  16177. 0,
  16178. 0,
  16179. 0
  16180. ];
  16181. }
  16182. } else {
  16183. return [
  16184. p,
  16185. p,
  16186. p,
  16187. p
  16188. ];
  16189. }
  16190. },
  16191. getShapeById: function (id) {
  16192. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  16193. if (this.shapeList[i].id === id) {
  16194. return this.shapeList[i];
  16195. }
  16196. }
  16197. return null;
  16198. },
  16199. getFont: function (textStyle) {
  16200. var finalTextStyle = this.getTextStyle(zrUtil.clone(textStyle));
  16201. return finalTextStyle.fontStyle + ' ' + finalTextStyle.fontWeight + ' ' + finalTextStyle.fontSize + 'px ' + finalTextStyle.fontFamily;
  16202. },
  16203. getTextStyle: function (targetStyle) {
  16204. return zrUtil.merge(zrUtil.merge(targetStyle || {}, this.ecTheme.textStyle), ecConfig.textStyle);
  16205. },
  16206. getItemStyleColor: function (itemColor, seriesIndex, dataIndex, data) {
  16207. return typeof itemColor === 'function' ? itemColor.call(this.myChart, {
  16208. seriesIndex: seriesIndex,
  16209. series: this.series[seriesIndex],
  16210. dataIndex: dataIndex,
  16211. data: data
  16212. }) : itemColor;
  16213. },
  16214. getDataFromOption: function (data, defaultData) {
  16215. return data != null ? data.value != null ? data.value : data : defaultData;
  16216. },
  16217. subPixelOptimize: function (position, lineWidth) {
  16218. if (lineWidth % 2 === 1) {
  16219. position = Math.floor(position) + 0.5;
  16220. } else {
  16221. position = Math.round(position);
  16222. }
  16223. return position;
  16224. },
  16225. resize: function () {
  16226. this.refresh && this.refresh();
  16227. this.clearEffectShape && this.clearEffectShape(true);
  16228. var self = this;
  16229. setTimeout(function () {
  16230. self.animationEffect && self.animationEffect();
  16231. }, 200);
  16232. },
  16233. clear: function () {
  16234. this.clearEffectShape && this.clearEffectShape();
  16235. this.zr && this.zr.delShape(this.shapeList);
  16236. this.shapeList = [];
  16237. },
  16238. dispose: function () {
  16239. this.onbeforDispose && this.onbeforDispose();
  16240. this.clear();
  16241. this.shapeList = null;
  16242. this.effectList = null;
  16243. this.messageCenter && this.messageCenter.unbind(ecConfig.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink);
  16244. this.onafterDispose && this.onafterDispose();
  16245. },
  16246. query: ecQuery.query,
  16247. deepQuery: ecQuery.deepQuery,
  16248. deepMerge: ecQuery.deepMerge,
  16249. parsePercent: number.parsePercent,
  16250. parseCenter: number.parseCenter,
  16251. parseRadius: number.parseRadius,
  16252. numAddCommas: number.addCommas
  16253. };
  16254. return Base;
  16255. });define('echarts/layout/EdgeBundling', [
  16256. 'require',
  16257. '../data/KDTree',
  16258. 'zrender/tool/vector'
  16259. ], function (require) {
  16260. var KDTree = require('../data/KDTree');
  16261. var vec2 = require('zrender/tool/vector');
  16262. var v2Create = vec2.create;
  16263. var v2DistSquare = vec2.distSquare;
  16264. var v2Dist = vec2.dist;
  16265. var v2Copy = vec2.copy;
  16266. var v2Clone = vec2.clone;
  16267. function squaredDistance(a, b) {
  16268. a = a.array;
  16269. b = b.array;
  16270. var x = b[0] - a[0];
  16271. var y = b[1] - a[1];
  16272. var z = b[2] - a[2];
  16273. var w = b[3] - a[3];
  16274. return x * x + y * y + z * z + w * w;
  16275. }
  16276. function CoarsenedEdge(group) {
  16277. this.points = [
  16278. group.mp0,
  16279. group.mp1
  16280. ];
  16281. this.group = group;
  16282. }
  16283. function Edge(edge) {
  16284. var points = edge.points;
  16285. if (points[0][1] < points[1][1] || edge instanceof CoarsenedEdge) {
  16286. this.array = [
  16287. points[0][0],
  16288. points[0][1],
  16289. points[1][0],
  16290. points[1][1]
  16291. ];
  16292. this._startPoint = points[0];
  16293. this._endPoint = points[1];
  16294. } else {
  16295. this.array = [
  16296. points[1][0],
  16297. points[1][1],
  16298. points[0][0],
  16299. points[0][1]
  16300. ];
  16301. this._startPoint = points[1];
  16302. this._endPoint = points[0];
  16303. }
  16304. this.ink = v2Dist(points[0], points[1]);
  16305. this.edge = edge;
  16306. this.group = null;
  16307. }
  16308. Edge.prototype.getStartPoint = function () {
  16309. return this._startPoint;
  16310. };
  16311. Edge.prototype.getEndPoint = function () {
  16312. return this._endPoint;
  16313. };
  16314. function BundledEdgeGroup() {
  16315. this.edgeList = [];
  16316. this.mp0 = v2Create();
  16317. this.mp1 = v2Create();
  16318. this.ink = 0;
  16319. }
  16320. BundledEdgeGroup.prototype.addEdge = function (edge) {
  16321. edge.group = this;
  16322. this.edgeList.push(edge);
  16323. };
  16324. BundledEdgeGroup.prototype.removeEdge = function (edge) {
  16325. edge.group = null;
  16326. this.edgeList.splice(this.edgeList.indexOf(edge), 1);
  16327. };
  16328. function EdgeBundling() {
  16329. this.maxNearestEdge = 6;
  16330. this.maxTurningAngle = Math.PI / 4;
  16331. this.maxIteration = 20;
  16332. }
  16333. EdgeBundling.prototype = {
  16334. constructor: EdgeBundling,
  16335. run: function (rawEdges) {
  16336. var res = this._iterate(rawEdges);
  16337. var nIterate = 0;
  16338. while (nIterate++ < this.maxIteration) {
  16339. var coarsenedEdges = [];
  16340. for (var i = 0; i < res.groups.length; i++) {
  16341. coarsenedEdges.push(new CoarsenedEdge(res.groups[i]));
  16342. }
  16343. var newRes = this._iterate(coarsenedEdges);
  16344. if (newRes.savedInk <= 0) {
  16345. break;
  16346. } else {
  16347. res = newRes;
  16348. }
  16349. }
  16350. var newEdges = [];
  16351. function pointApproxEqual(p0, p1) {
  16352. return v2DistSquare(p0, p1) < 1e-10;
  16353. }
  16354. function cleanEdgePoints(edgePoints, rawEdgePoints) {
  16355. var res = [];
  16356. var off = 0;
  16357. for (var i = 0; i < edgePoints.length; i++) {
  16358. if (!(off > 0 && pointApproxEqual(edgePoints[i], res[off - 1]))) {
  16359. res[off++] = v2Clone(edgePoints[i]);
  16360. }
  16361. }
  16362. if (rawEdgePoints[0] && !pointApproxEqual(res[0], rawEdgePoints[0])) {
  16363. res = res.reverse();
  16364. }
  16365. return res;
  16366. }
  16367. var buildNewEdges = function (groups, fromEdgePoints) {
  16368. var newEdgePoints;
  16369. for (var i = 0; i < groups.length; i++) {
  16370. var group = groups[i];
  16371. if (group.edgeList[0] && group.edgeList[0].edge instanceof CoarsenedEdge) {
  16372. var newGroups = [];
  16373. for (var j = 0; j < group.edgeList.length; j++) {
  16374. newGroups.push(group.edgeList[j].edge.group);
  16375. }
  16376. if (!fromEdgePoints) {
  16377. newEdgePoints = [];
  16378. } else {
  16379. newEdgePoints = fromEdgePoints.slice();
  16380. }
  16381. newEdgePoints.unshift(group.mp0);
  16382. newEdgePoints.push(group.mp1);
  16383. buildNewEdges(newGroups, newEdgePoints);
  16384. } else {
  16385. for (var j = 0; j < group.edgeList.length; j++) {
  16386. var edge = group.edgeList[j];
  16387. if (!fromEdgePoints) {
  16388. newEdgePoints = [];
  16389. } else {
  16390. newEdgePoints = fromEdgePoints.slice();
  16391. }
  16392. newEdgePoints.unshift(group.mp0);
  16393. newEdgePoints.push(group.mp1);
  16394. newEdgePoints.unshift(edge.getStartPoint());
  16395. newEdgePoints.push(edge.getEndPoint());
  16396. newEdges.push({
  16397. points: cleanEdgePoints(newEdgePoints, edge.edge.points),
  16398. rawEdge: edge.edge
  16399. });
  16400. }
  16401. }
  16402. }
  16403. };
  16404. buildNewEdges(res.groups);
  16405. return newEdges;
  16406. },
  16407. _iterate: function (rawEdges) {
  16408. var edges = [];
  16409. var groups = [];
  16410. var totalSavedInk = 0;
  16411. for (var i = 0; i < rawEdges.length; i++) {
  16412. var edge = new Edge(rawEdges[i]);
  16413. edges.push(edge);
  16414. }
  16415. var tree = new KDTree(edges, 4);
  16416. var nearests = [];
  16417. var _mp0 = v2Create();
  16418. var _mp1 = v2Create();
  16419. var _newGroupInk = 0;
  16420. var mp0 = v2Create();
  16421. var mp1 = v2Create();
  16422. var newGroupInk = 0;
  16423. for (var i = 0; i < edges.length; i++) {
  16424. var edge = edges[i];
  16425. if (edge.group) {
  16426. continue;
  16427. }
  16428. tree.nearestN(edge, this.maxNearestEdge, squaredDistance, nearests);
  16429. var maxSavedInk = 0;
  16430. var mostSavingInkEdge = null;
  16431. var lastCheckedGroup = null;
  16432. for (var j = 0; j < nearests.length; j++) {
  16433. var nearest = nearests[j];
  16434. var savedInk = 0;
  16435. if (nearest.group) {
  16436. if (nearest.group !== lastCheckedGroup) {
  16437. lastCheckedGroup = nearest.group;
  16438. _newGroupInk = this._calculateGroupEdgeInk(nearest.group, edge, _mp0, _mp1);
  16439. savedInk = nearest.group.ink + edge.ink - _newGroupInk;
  16440. }
  16441. } else {
  16442. _newGroupInk = this._calculateEdgeEdgeInk(edge, nearest, _mp0, _mp1);
  16443. savedInk = nearest.ink + edge.ink - _newGroupInk;
  16444. }
  16445. if (savedInk > maxSavedInk) {
  16446. maxSavedInk = savedInk;
  16447. mostSavingInkEdge = nearest;
  16448. v2Copy(mp1, _mp1);
  16449. v2Copy(mp0, _mp0);
  16450. newGroupInk = _newGroupInk;
  16451. }
  16452. }
  16453. if (mostSavingInkEdge) {
  16454. totalSavedInk += maxSavedInk;
  16455. var group;
  16456. if (!mostSavingInkEdge.group) {
  16457. group = new BundledEdgeGroup();
  16458. groups.push(group);
  16459. group.addEdge(mostSavingInkEdge);
  16460. }
  16461. group = mostSavingInkEdge.group;
  16462. v2Copy(group.mp0, mp0);
  16463. v2Copy(group.mp1, mp1);
  16464. group.ink = newGroupInk;
  16465. mostSavingInkEdge.group.addEdge(edge);
  16466. } else {
  16467. var group = new BundledEdgeGroup();
  16468. groups.push(group);
  16469. v2Copy(group.mp0, edge.getStartPoint());
  16470. v2Copy(group.mp1, edge.getEndPoint());
  16471. group.ink = edge.ink;
  16472. group.addEdge(edge);
  16473. }
  16474. }
  16475. return {
  16476. groups: groups,
  16477. edges: edges,
  16478. savedInk: totalSavedInk
  16479. };
  16480. },
  16481. _calculateEdgeEdgeInk: function () {
  16482. var startPointSet = [];
  16483. var endPointSet = [];
  16484. return function (e0, e1, mp0, mp1) {
  16485. startPointSet[0] = e0.getStartPoint();
  16486. startPointSet[1] = e1.getStartPoint();
  16487. endPointSet[0] = e0.getEndPoint();
  16488. endPointSet[1] = e1.getEndPoint();
  16489. this._calculateMeetPoints(startPointSet, endPointSet, mp0, mp1);
  16490. var ink = v2Dist(startPointSet[0], mp0) + v2Dist(mp0, mp1) + v2Dist(mp1, endPointSet[0]) + v2Dist(startPointSet[1], mp0) + v2Dist(mp1, endPointSet[1]);
  16491. return ink;
  16492. };
  16493. }(),
  16494. _calculateGroupEdgeInk: function (group, edgeTryAdd, mp0, mp1) {
  16495. var startPointSet = [];
  16496. var endPointSet = [];
  16497. for (var i = 0; i < group.edgeList.length; i++) {
  16498. var edge = group.edgeList[i];
  16499. startPointSet.push(edge.getStartPoint());
  16500. endPointSet.push(edge.getEndPoint());
  16501. }
  16502. startPointSet.push(edgeTryAdd.getStartPoint());
  16503. endPointSet.push(edgeTryAdd.getEndPoint());
  16504. this._calculateMeetPoints(startPointSet, endPointSet, mp0, mp1);
  16505. var ink = v2Dist(mp0, mp1);
  16506. for (var i = 0; i < startPointSet.length; i++) {
  16507. ink += v2Dist(startPointSet[i], mp0) + v2Dist(endPointSet[i], mp1);
  16508. }
  16509. return ink;
  16510. },
  16511. _calculateMeetPoints: function () {
  16512. var cp0 = v2Create();
  16513. var cp1 = v2Create();
  16514. return function (startPointSet, endPointSet, mp0, mp1) {
  16515. vec2.set(cp0, 0, 0);
  16516. vec2.set(cp1, 0, 0);
  16517. var len = startPointSet.length;
  16518. for (var i = 0; i < len; i++) {
  16519. vec2.add(cp0, cp0, startPointSet[i]);
  16520. }
  16521. vec2.scale(cp0, cp0, 1 / len);
  16522. len = endPointSet.length;
  16523. for (var i = 0; i < len; i++) {
  16524. vec2.add(cp1, cp1, endPointSet[i]);
  16525. }
  16526. vec2.scale(cp1, cp1, 1 / len);
  16527. this._limitTurningAngle(startPointSet, cp0, cp1, mp0);
  16528. this._limitTurningAngle(endPointSet, cp1, cp0, mp1);
  16529. };
  16530. }(),
  16531. _limitTurningAngle: function () {
  16532. var v10 = v2Create();
  16533. var vTmp = v2Create();
  16534. var project = v2Create();
  16535. var tmpOut = v2Create();
  16536. return function (pointSet, p0, p1, out) {
  16537. var maxTurningAngleCos = Math.cos(this.maxTurningAngle);
  16538. var maxTurningAngleTan = Math.tan(this.maxTurningAngle);
  16539. vec2.sub(v10, p0, p1);
  16540. vec2.normalize(v10, v10);
  16541. vec2.copy(out, p0);
  16542. var maxMovement = 0;
  16543. for (var i = 0; i < pointSet.length; i++) {
  16544. var p = pointSet[i];
  16545. vec2.sub(vTmp, p, p0);
  16546. var len = vec2.len(vTmp);
  16547. vec2.scale(vTmp, vTmp, 1 / len);
  16548. var turningAngleCos = vec2.dot(vTmp, v10);
  16549. if (turningAngleCos < maxTurningAngleCos) {
  16550. vec2.scaleAndAdd(project, p0, v10, len * turningAngleCos);
  16551. var distance = v2Dist(project, p);
  16552. var d = distance / maxTurningAngleTan;
  16553. vec2.scaleAndAdd(tmpOut, project, v10, -d);
  16554. var movement = v2DistSquare(tmpOut, p0);
  16555. if (movement > maxMovement) {
  16556. maxMovement = movement;
  16557. vec2.copy(out, tmpOut);
  16558. }
  16559. }
  16560. }
  16561. };
  16562. }()
  16563. };
  16564. return EdgeBundling;
  16565. });define('zrender/shape/Star', [
  16566. 'require',
  16567. '../tool/math',
  16568. './Base',
  16569. '../tool/util'
  16570. ], function (require) {
  16571. var math = require('../tool/math');
  16572. var sin = math.sin;
  16573. var cos = math.cos;
  16574. var PI = Math.PI;
  16575. var Base = require('./Base');
  16576. var Star = function (options) {
  16577. Base.call(this, options);
  16578. };
  16579. Star.prototype = {
  16580. type: 'star',
  16581. buildPath: function (ctx, style) {
  16582. var n = style.n;
  16583. if (!n || n < 2) {
  16584. return;
  16585. }
  16586. var x = style.x;
  16587. var y = style.y;
  16588. var r = style.r;
  16589. var r0 = style.r0;
  16590. if (r0 == null) {
  16591. r0 = n > 4 ? r * cos(2 * PI / n) / cos(PI / n) : r / 3;
  16592. }
  16593. var dStep = PI / n;
  16594. var deg = -PI / 2;
  16595. var xStart = x + r * cos(deg);
  16596. var yStart = y + r * sin(deg);
  16597. deg += dStep;
  16598. var pointList = style.pointList = [];
  16599. pointList.push([
  16600. xStart,
  16601. yStart
  16602. ]);
  16603. for (var i = 0, end = n * 2 - 1, ri; i < end; i++) {
  16604. ri = i % 2 === 0 ? r0 : r;
  16605. pointList.push([
  16606. x + ri * cos(deg),
  16607. y + ri * sin(deg)
  16608. ]);
  16609. deg += dStep;
  16610. }
  16611. pointList.push([
  16612. xStart,
  16613. yStart
  16614. ]);
  16615. ctx.moveTo(pointList[0][0], pointList[0][1]);
  16616. for (var i = 0; i < pointList.length; i++) {
  16617. ctx.lineTo(pointList[i][0], pointList[i][1]);
  16618. }
  16619. ctx.closePath();
  16620. return;
  16621. },
  16622. getRect: function (style) {
  16623. if (style.__rect) {
  16624. return style.__rect;
  16625. }
  16626. var lineWidth;
  16627. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  16628. lineWidth = style.lineWidth || 1;
  16629. } else {
  16630. lineWidth = 0;
  16631. }
  16632. style.__rect = {
  16633. x: Math.round(style.x - style.r - lineWidth / 2),
  16634. y: Math.round(style.y - style.r - lineWidth / 2),
  16635. width: style.r * 2 + lineWidth,
  16636. height: style.r * 2 + lineWidth
  16637. };
  16638. return style.__rect;
  16639. }
  16640. };
  16641. require('../tool/util').inherits(Star, Base);
  16642. return Star;
  16643. });define('zrender/shape/Heart', [
  16644. 'require',
  16645. './Base',
  16646. './util/PathProxy',
  16647. '../tool/area',
  16648. '../tool/util'
  16649. ], function (require) {
  16650. 'use strict';
  16651. var Base = require('./Base');
  16652. var PathProxy = require('./util/PathProxy');
  16653. var area = require('../tool/area');
  16654. var Heart = function (options) {
  16655. Base.call(this, options);
  16656. this._pathProxy = new PathProxy();
  16657. };
  16658. Heart.prototype = {
  16659. type: 'heart',
  16660. buildPath: function (ctx, style) {
  16661. var path = this._pathProxy || new PathProxy();
  16662. path.begin(ctx);
  16663. path.moveTo(style.x, style.y);
  16664. 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);
  16665. 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);
  16666. path.closePath();
  16667. return;
  16668. },
  16669. getRect: function (style) {
  16670. if (style.__rect) {
  16671. return style.__rect;
  16672. }
  16673. if (!this._pathProxy.isEmpty()) {
  16674. this.buildPath(null, style);
  16675. }
  16676. return this._pathProxy.fastBoundingRect();
  16677. },
  16678. isCover: function (x, y) {
  16679. var originPos = this.transformCoordToLocal(x, y);
  16680. x = originPos[0];
  16681. y = originPos[1];
  16682. if (this.isCoverRect(x, y)) {
  16683. return area.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, x, y);
  16684. }
  16685. }
  16686. };
  16687. require('../tool/util').inherits(Heart, Base);
  16688. return Heart;
  16689. });define('zrender/shape/Droplet', [
  16690. 'require',
  16691. './Base',
  16692. './util/PathProxy',
  16693. '../tool/area',
  16694. '../tool/util'
  16695. ], function (require) {
  16696. 'use strict';
  16697. var Base = require('./Base');
  16698. var PathProxy = require('./util/PathProxy');
  16699. var area = require('../tool/area');
  16700. var Droplet = function (options) {
  16701. Base.call(this, options);
  16702. this._pathProxy = new PathProxy();
  16703. };
  16704. Droplet.prototype = {
  16705. type: 'droplet',
  16706. buildPath: function (ctx, style) {
  16707. var path = this._pathProxy || new PathProxy();
  16708. path.begin(ctx);
  16709. path.moveTo(style.x, style.y + style.a);
  16710. 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);
  16711. 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);
  16712. path.closePath();
  16713. },
  16714. getRect: function (style) {
  16715. if (style.__rect) {
  16716. return style.__rect;
  16717. }
  16718. if (!this._pathProxy.isEmpty()) {
  16719. this.buildPath(null, style);
  16720. }
  16721. return this._pathProxy.fastBoundingRect();
  16722. },
  16723. isCover: function (x, y) {
  16724. var originPos = this.transformCoordToLocal(x, y);
  16725. x = originPos[0];
  16726. y = originPos[1];
  16727. if (this.isCoverRect(x, y)) {
  16728. return area.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, x, y);
  16729. }
  16730. }
  16731. };
  16732. require('../tool/util').inherits(Droplet, Base);
  16733. return Droplet;
  16734. });define('zrender/tool/math', [], function () {
  16735. var _radians = Math.PI / 180;
  16736. function sin(angle, isDegrees) {
  16737. return Math.sin(isDegrees ? angle * _radians : angle);
  16738. }
  16739. function cos(angle, isDegrees) {
  16740. return Math.cos(isDegrees ? angle * _radians : angle);
  16741. }
  16742. function degreeToRadian(angle) {
  16743. return angle * _radians;
  16744. }
  16745. function radianToDegree(angle) {
  16746. return angle / _radians;
  16747. }
  16748. return {
  16749. sin: sin,
  16750. cos: cos,
  16751. degreeToRadian: degreeToRadian,
  16752. radianToDegree: radianToDegree
  16753. };
  16754. });define('zrender/shape/util/PathProxy', [
  16755. 'require',
  16756. '../../tool/vector'
  16757. ], function (require) {
  16758. var vector = require('../../tool/vector');
  16759. var PathSegment = function (command, points) {
  16760. this.command = command;
  16761. this.points = points || null;
  16762. };
  16763. var PathProxy = function () {
  16764. this.pathCommands = [];
  16765. this._ctx = null;
  16766. this._min = [];
  16767. this._max = [];
  16768. };
  16769. PathProxy.prototype.fastBoundingRect = function () {
  16770. var min = this._min;
  16771. var max = this._max;
  16772. min[0] = min[1] = Infinity;
  16773. max[0] = max[1] = -Infinity;
  16774. for (var i = 0; i < this.pathCommands.length; i++) {
  16775. var seg = this.pathCommands[i];
  16776. var p = seg.points;
  16777. switch (seg.command) {
  16778. case 'M':
  16779. vector.min(min, min, p);
  16780. vector.max(max, max, p);
  16781. break;
  16782. case 'L':
  16783. vector.min(min, min, p);
  16784. vector.max(max, max, p);
  16785. break;
  16786. case 'C':
  16787. for (var j = 0; j < 6; j += 2) {
  16788. min[0] = Math.min(min[0], min[0], p[j]);
  16789. min[1] = Math.min(min[1], min[1], p[j + 1]);
  16790. max[0] = Math.max(max[0], max[0], p[j]);
  16791. max[1] = Math.max(max[1], max[1], p[j + 1]);
  16792. }
  16793. break;
  16794. case 'Q':
  16795. for (var j = 0; j < 4; j += 2) {
  16796. min[0] = Math.min(min[0], min[0], p[j]);
  16797. min[1] = Math.min(min[1], min[1], p[j + 1]);
  16798. max[0] = Math.max(max[0], max[0], p[j]);
  16799. max[1] = Math.max(max[1], max[1], p[j + 1]);
  16800. }
  16801. break;
  16802. case 'A':
  16803. var cx = p[0];
  16804. var cy = p[1];
  16805. var rx = p[2];
  16806. var ry = p[3];
  16807. min[0] = Math.min(min[0], min[0], cx - rx);
  16808. min[1] = Math.min(min[1], min[1], cy - ry);
  16809. max[0] = Math.max(max[0], max[0], cx + rx);
  16810. max[1] = Math.max(max[1], max[1], cy + ry);
  16811. break;
  16812. }
  16813. }
  16814. return {
  16815. x: min[0],
  16816. y: min[1],
  16817. width: max[0] - min[0],
  16818. height: max[1] - min[1]
  16819. };
  16820. };
  16821. PathProxy.prototype.begin = function (ctx) {
  16822. this._ctx = ctx || null;
  16823. this.pathCommands.length = 0;
  16824. return this;
  16825. };
  16826. PathProxy.prototype.moveTo = function (x, y) {
  16827. this.pathCommands.push(new PathSegment('M', [
  16828. x,
  16829. y
  16830. ]));
  16831. if (this._ctx) {
  16832. this._ctx.moveTo(x, y);
  16833. }
  16834. return this;
  16835. };
  16836. PathProxy.prototype.lineTo = function (x, y) {
  16837. this.pathCommands.push(new PathSegment('L', [
  16838. x,
  16839. y
  16840. ]));
  16841. if (this._ctx) {
  16842. this._ctx.lineTo(x, y);
  16843. }
  16844. return this;
  16845. };
  16846. PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) {
  16847. this.pathCommands.push(new PathSegment('C', [
  16848. x1,
  16849. y1,
  16850. x2,
  16851. y2,
  16852. x3,
  16853. y3
  16854. ]));
  16855. if (this._ctx) {
  16856. this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);
  16857. }
  16858. return this;
  16859. };
  16860. PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) {
  16861. this.pathCommands.push(new PathSegment('Q', [
  16862. x1,
  16863. y1,
  16864. x2,
  16865. y2
  16866. ]));
  16867. if (this._ctx) {
  16868. this._ctx.quadraticCurveTo(x1, y1, x2, y2);
  16869. }
  16870. return this;
  16871. };
  16872. PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {
  16873. this.pathCommands.push(new PathSegment('A', [
  16874. cx,
  16875. cy,
  16876. r,
  16877. r,
  16878. startAngle,
  16879. endAngle - startAngle,
  16880. 0,
  16881. anticlockwise ? 0 : 1
  16882. ]));
  16883. if (this._ctx) {
  16884. this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);
  16885. }
  16886. return this;
  16887. };
  16888. PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) {
  16889. if (this._ctx) {
  16890. this._ctx.arcTo(x1, y1, x2, y2, radius);
  16891. }
  16892. return this;
  16893. };
  16894. PathProxy.prototype.rect = function (x, y, w, h) {
  16895. if (this._ctx) {
  16896. this._ctx.rect(x, y, w, h);
  16897. }
  16898. return this;
  16899. };
  16900. PathProxy.prototype.closePath = function () {
  16901. this.pathCommands.push(new PathSegment('z'));
  16902. if (this._ctx) {
  16903. this._ctx.closePath();
  16904. }
  16905. return this;
  16906. };
  16907. PathProxy.prototype.isEmpty = function () {
  16908. return this.pathCommands.length === 0;
  16909. };
  16910. PathProxy.PathSegment = PathSegment;
  16911. return PathProxy;
  16912. });define('zrender/shape/Line', [
  16913. 'require',
  16914. './Base',
  16915. './util/dashedLineTo',
  16916. '../tool/util'
  16917. ], function (require) {
  16918. var Base = require('./Base');
  16919. var dashedLineTo = require('./util/dashedLineTo');
  16920. var Line = function (options) {
  16921. this.brushTypeOnly = 'stroke';
  16922. this.textPosition = 'end';
  16923. Base.call(this, options);
  16924. };
  16925. Line.prototype = {
  16926. type: 'line',
  16927. buildPath: function (ctx, style) {
  16928. if (!style.lineType || style.lineType == 'solid') {
  16929. ctx.moveTo(style.xStart, style.yStart);
  16930. ctx.lineTo(style.xEnd, style.yEnd);
  16931. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  16932. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  16933. dashedLineTo(ctx, style.xStart, style.yStart, style.xEnd, style.yEnd, dashLength);
  16934. }
  16935. },
  16936. getRect: function (style) {
  16937. if (style.__rect) {
  16938. return style.__rect;
  16939. }
  16940. var lineWidth = style.lineWidth || 1;
  16941. style.__rect = {
  16942. x: Math.min(style.xStart, style.xEnd) - lineWidth,
  16943. y: Math.min(style.yStart, style.yEnd) - lineWidth,
  16944. width: Math.abs(style.xStart - style.xEnd) + lineWidth,
  16945. height: Math.abs(style.yStart - style.yEnd) + lineWidth
  16946. };
  16947. return style.__rect;
  16948. }
  16949. };
  16950. require('../tool/util').inherits(Line, Base);
  16951. return Line;
  16952. });define('zrender/shape/BezierCurve', [
  16953. 'require',
  16954. './Base',
  16955. '../tool/util'
  16956. ], function (require) {
  16957. 'use strict';
  16958. var Base = require('./Base');
  16959. var BezierCurve = function (options) {
  16960. this.brushTypeOnly = 'stroke';
  16961. this.textPosition = 'end';
  16962. Base.call(this, options);
  16963. };
  16964. BezierCurve.prototype = {
  16965. type: 'bezier-curve',
  16966. buildPath: function (ctx, style) {
  16967. ctx.moveTo(style.xStart, style.yStart);
  16968. if (typeof style.cpX2 != 'undefined' && typeof style.cpY2 != 'undefined') {
  16969. ctx.bezierCurveTo(style.cpX1, style.cpY1, style.cpX2, style.cpY2, style.xEnd, style.yEnd);
  16970. } else {
  16971. ctx.quadraticCurveTo(style.cpX1, style.cpY1, style.xEnd, style.yEnd);
  16972. }
  16973. },
  16974. getRect: function (style) {
  16975. if (style.__rect) {
  16976. return style.__rect;
  16977. }
  16978. var _minX = Math.min(style.xStart, style.xEnd, style.cpX1);
  16979. var _minY = Math.min(style.yStart, style.yEnd, style.cpY1);
  16980. var _maxX = Math.max(style.xStart, style.xEnd, style.cpX1);
  16981. var _maxY = Math.max(style.yStart, style.yEnd, style.cpY1);
  16982. var _x2 = style.cpX2;
  16983. var _y2 = style.cpY2;
  16984. if (typeof _x2 != 'undefined' && typeof _y2 != 'undefined') {
  16985. _minX = Math.min(_minX, _x2);
  16986. _minY = Math.min(_minY, _y2);
  16987. _maxX = Math.max(_maxX, _x2);
  16988. _maxY = Math.max(_maxY, _y2);
  16989. }
  16990. var lineWidth = style.lineWidth || 1;
  16991. style.__rect = {
  16992. x: _minX - lineWidth,
  16993. y: _minY - lineWidth,
  16994. width: _maxX - _minX + lineWidth,
  16995. height: _maxY - _minY + lineWidth
  16996. };
  16997. return style.__rect;
  16998. }
  16999. };
  17000. require('../tool/util').inherits(BezierCurve, Base);
  17001. return BezierCurve;
  17002. });define('zrender/shape/util/dashedLineTo', [], function () {
  17003. var dashPattern = [
  17004. 5,
  17005. 5
  17006. ];
  17007. return function (ctx, x1, y1, x2, y2, dashLength) {
  17008. if (ctx.setLineDash) {
  17009. dashPattern[0] = dashPattern[1] = dashLength;
  17010. ctx.setLineDash(dashPattern);
  17011. ctx.moveTo(x1, y1);
  17012. ctx.lineTo(x2, y2);
  17013. return;
  17014. }
  17015. dashLength = typeof dashLength != 'number' ? 5 : dashLength;
  17016. var dx = x2 - x1;
  17017. var dy = y2 - y1;
  17018. var numDashes = Math.floor(Math.sqrt(dx * dx + dy * dy) / dashLength);
  17019. dx = dx / numDashes;
  17020. dy = dy / numDashes;
  17021. var flag = true;
  17022. for (var i = 0; i < numDashes; ++i) {
  17023. if (flag) {
  17024. ctx.moveTo(x1, y1);
  17025. } else {
  17026. ctx.lineTo(x1, y1);
  17027. }
  17028. flag = !flag;
  17029. x1 += dx;
  17030. y1 += dy;
  17031. }
  17032. ctx.lineTo(x2, y2);
  17033. };
  17034. });define('zrender/shape/Polygon', [
  17035. 'require',
  17036. './Base',
  17037. './util/smoothSpline',
  17038. './util/smoothBezier',
  17039. './util/dashedLineTo',
  17040. '../tool/util'
  17041. ], function (require) {
  17042. var Base = require('./Base');
  17043. var smoothSpline = require('./util/smoothSpline');
  17044. var smoothBezier = require('./util/smoothBezier');
  17045. var dashedLineTo = require('./util/dashedLineTo');
  17046. var Polygon = function (options) {
  17047. Base.call(this, options);
  17048. };
  17049. Polygon.prototype = {
  17050. type: 'polygon',
  17051. buildPath: function (ctx, style) {
  17052. var pointList = style.pointList;
  17053. if (pointList.length < 2) {
  17054. return;
  17055. }
  17056. if (style.smooth && style.smooth !== 'spline') {
  17057. var controlPoints = smoothBezier(pointList, style.smooth, true, style.smoothConstraint);
  17058. ctx.moveTo(pointList[0][0], pointList[0][1]);
  17059. var cp1;
  17060. var cp2;
  17061. var p;
  17062. var len = pointList.length;
  17063. for (var i = 0; i < len; i++) {
  17064. cp1 = controlPoints[i * 2];
  17065. cp2 = controlPoints[i * 2 + 1];
  17066. p = pointList[(i + 1) % len];
  17067. ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
  17068. }
  17069. } else {
  17070. if (style.smooth === 'spline') {
  17071. pointList = smoothSpline(pointList, true);
  17072. }
  17073. if (!style.lineType || style.lineType == 'solid') {
  17074. ctx.moveTo(pointList[0][0], pointList[0][1]);
  17075. for (var i = 1, l = pointList.length; i < l; i++) {
  17076. ctx.lineTo(pointList[i][0], pointList[i][1]);
  17077. }
  17078. ctx.lineTo(pointList[0][0], pointList[0][1]);
  17079. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  17080. var dashLength = style._dashLength || (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  17081. style._dashLength = dashLength;
  17082. ctx.moveTo(pointList[0][0], pointList[0][1]);
  17083. for (var i = 1, l = pointList.length; i < l; i++) {
  17084. dashedLineTo(ctx, pointList[i - 1][0], pointList[i - 1][1], pointList[i][0], pointList[i][1], dashLength);
  17085. }
  17086. dashedLineTo(ctx, pointList[pointList.length - 1][0], pointList[pointList.length - 1][1], pointList[0][0], pointList[0][1], dashLength);
  17087. }
  17088. }
  17089. ctx.closePath();
  17090. return;
  17091. },
  17092. getRect: function (style) {
  17093. if (style.__rect) {
  17094. return style.__rect;
  17095. }
  17096. var minX = Number.MAX_VALUE;
  17097. var maxX = Number.MIN_VALUE;
  17098. var minY = Number.MAX_VALUE;
  17099. var maxY = Number.MIN_VALUE;
  17100. var pointList = style.pointList;
  17101. for (var i = 0, l = pointList.length; i < l; i++) {
  17102. if (pointList[i][0] < minX) {
  17103. minX = pointList[i][0];
  17104. }
  17105. if (pointList[i][0] > maxX) {
  17106. maxX = pointList[i][0];
  17107. }
  17108. if (pointList[i][1] < minY) {
  17109. minY = pointList[i][1];
  17110. }
  17111. if (pointList[i][1] > maxY) {
  17112. maxY = pointList[i][1];
  17113. }
  17114. }
  17115. var lineWidth;
  17116. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  17117. lineWidth = style.lineWidth || 1;
  17118. } else {
  17119. lineWidth = 0;
  17120. }
  17121. style.__rect = {
  17122. x: Math.round(minX - lineWidth / 2),
  17123. y: Math.round(minY - lineWidth / 2),
  17124. width: maxX - minX + lineWidth,
  17125. height: maxY - minY + lineWidth
  17126. };
  17127. return style.__rect;
  17128. }
  17129. };
  17130. require('../tool/util').inherits(Polygon, Base);
  17131. return Polygon;
  17132. });define('echarts/util/shape/normalIsCover', [], function () {
  17133. return function (x, y) {
  17134. var originPos = this.transformCoordToLocal(x, y);
  17135. x = originPos[0];
  17136. y = originPos[1];
  17137. return this.isCoverRect(x, y);
  17138. };
  17139. });define('zrender/shape/util/smoothSpline', [
  17140. 'require',
  17141. '../../tool/vector'
  17142. ], function (require) {
  17143. var vector = require('../../tool/vector');
  17144. function interpolate(p0, p1, p2, p3, t, t2, t3) {
  17145. var v0 = (p2 - p0) * 0.5;
  17146. var v1 = (p3 - p1) * 0.5;
  17147. return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;
  17148. }
  17149. return function (points, isLoop, constraint) {
  17150. var len = points.length;
  17151. var ret = [];
  17152. var distance = 0;
  17153. for (var i = 1; i < len; i++) {
  17154. distance += vector.distance(points[i - 1], points[i]);
  17155. }
  17156. var segs = distance / 5;
  17157. segs = segs < len ? len : segs;
  17158. for (var i = 0; i < segs; i++) {
  17159. var pos = i / (segs - 1) * (isLoop ? len : len - 1);
  17160. var idx = Math.floor(pos);
  17161. var w = pos - idx;
  17162. var p0;
  17163. var p1 = points[idx % len];
  17164. var p2;
  17165. var p3;
  17166. if (!isLoop) {
  17167. p0 = points[idx === 0 ? idx : idx - 1];
  17168. p2 = points[idx > len - 2 ? len - 1 : idx + 1];
  17169. p3 = points[idx > len - 3 ? len - 1 : idx + 2];
  17170. } else {
  17171. p0 = points[(idx - 1 + len) % len];
  17172. p2 = points[(idx + 1) % len];
  17173. p3 = points[(idx + 2) % len];
  17174. }
  17175. var w2 = w * w;
  17176. var w3 = w * w2;
  17177. ret.push([
  17178. interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),
  17179. interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)
  17180. ]);
  17181. }
  17182. return ret;
  17183. };
  17184. });define('zrender/shape/util/smoothBezier', [
  17185. 'require',
  17186. '../../tool/vector'
  17187. ], function (require) {
  17188. var vector = require('../../tool/vector');
  17189. return function (points, smooth, isLoop, constraint) {
  17190. var cps = [];
  17191. var v = [];
  17192. var v1 = [];
  17193. var v2 = [];
  17194. var prevPoint;
  17195. var nextPoint;
  17196. var hasConstraint = !!constraint;
  17197. var min, max;
  17198. if (hasConstraint) {
  17199. min = [
  17200. Infinity,
  17201. Infinity
  17202. ];
  17203. max = [
  17204. -Infinity,
  17205. -Infinity
  17206. ];
  17207. for (var i = 0, len = points.length; i < len; i++) {
  17208. vector.min(min, min, points[i]);
  17209. vector.max(max, max, points[i]);
  17210. }
  17211. vector.min(min, min, constraint[0]);
  17212. vector.max(max, max, constraint[1]);
  17213. }
  17214. for (var i = 0, len = points.length; i < len; i++) {
  17215. var point = points[i];
  17216. var prevPoint;
  17217. var nextPoint;
  17218. if (isLoop) {
  17219. prevPoint = points[i ? i - 1 : len - 1];
  17220. nextPoint = points[(i + 1) % len];
  17221. } else {
  17222. if (i === 0 || i === len - 1) {
  17223. cps.push(vector.clone(points[i]));
  17224. continue;
  17225. } else {
  17226. prevPoint = points[i - 1];
  17227. nextPoint = points[i + 1];
  17228. }
  17229. }
  17230. vector.sub(v, nextPoint, prevPoint);
  17231. vector.scale(v, v, smooth);
  17232. var d0 = vector.distance(point, prevPoint);
  17233. var d1 = vector.distance(point, nextPoint);
  17234. var sum = d0 + d1;
  17235. if (sum !== 0) {
  17236. d0 /= sum;
  17237. d1 /= sum;
  17238. }
  17239. vector.scale(v1, v, -d0);
  17240. vector.scale(v2, v, d1);
  17241. var cp0 = vector.add([], point, v1);
  17242. var cp1 = vector.add([], point, v2);
  17243. if (hasConstraint) {
  17244. vector.max(cp0, cp0, min);
  17245. vector.min(cp0, cp0, max);
  17246. vector.max(cp1, cp1, min);
  17247. vector.min(cp1, cp1, max);
  17248. }
  17249. cps.push(cp0);
  17250. cps.push(cp1);
  17251. }
  17252. if (isLoop) {
  17253. cps.push(vector.clone(cps.shift()));
  17254. }
  17255. return cps;
  17256. };
  17257. });define('echarts/util/ecQuery', [
  17258. 'require',
  17259. 'zrender/tool/util'
  17260. ], function (require) {
  17261. var zrUtil = require('zrender/tool/util');
  17262. function query(optionTarget, optionLocation) {
  17263. if (typeof optionTarget == 'undefined') {
  17264. return;
  17265. }
  17266. if (!optionLocation) {
  17267. return optionTarget;
  17268. }
  17269. optionLocation = optionLocation.split('.');
  17270. var length = optionLocation.length;
  17271. var curIdx = 0;
  17272. while (curIdx < length) {
  17273. optionTarget = optionTarget[optionLocation[curIdx]];
  17274. if (typeof optionTarget == 'undefined') {
  17275. return;
  17276. }
  17277. curIdx++;
  17278. }
  17279. return optionTarget;
  17280. }
  17281. function deepQuery(ctrList, optionLocation) {
  17282. var finalOption;
  17283. for (var i = 0, l = ctrList.length; i < l; i++) {
  17284. finalOption = query(ctrList[i], optionLocation);
  17285. if (typeof finalOption != 'undefined') {
  17286. return finalOption;
  17287. }
  17288. }
  17289. }
  17290. function deepMerge(ctrList, optionLocation) {
  17291. var finalOption;
  17292. var len = ctrList.length;
  17293. while (len--) {
  17294. var tempOption = query(ctrList[len], optionLocation);
  17295. if (typeof tempOption != 'undefined') {
  17296. if (typeof finalOption == 'undefined') {
  17297. finalOption = zrUtil.clone(tempOption);
  17298. } else {
  17299. zrUtil.merge(finalOption, tempOption, true);
  17300. }
  17301. }
  17302. }
  17303. return finalOption;
  17304. }
  17305. return {
  17306. query: query,
  17307. deepQuery: deepQuery,
  17308. deepMerge: deepMerge
  17309. };
  17310. });define('echarts/util/number', [], function () {
  17311. function _trim(str) {
  17312. return str.replace(/^\s+/, '').replace(/\s+$/, '');
  17313. }
  17314. function parsePercent(value, maxValue) {
  17315. if (typeof value === 'string') {
  17316. if (_trim(value).match(/%$/)) {
  17317. return parseFloat(value) / 100 * maxValue;
  17318. }
  17319. return parseFloat(value);
  17320. }
  17321. return value;
  17322. }
  17323. function parseCenter(zr, center) {
  17324. return [
  17325. parsePercent(center[0], zr.getWidth()),
  17326. parsePercent(center[1], zr.getHeight())
  17327. ];
  17328. }
  17329. function parseRadius(zr, radius) {
  17330. if (!(radius instanceof Array)) {
  17331. radius = [
  17332. 0,
  17333. radius
  17334. ];
  17335. }
  17336. var zrSize = Math.min(zr.getWidth(), zr.getHeight()) / 2;
  17337. return [
  17338. parsePercent(radius[0], zrSize),
  17339. parsePercent(radius[1], zrSize)
  17340. ];
  17341. }
  17342. function addCommas(x) {
  17343. if (isNaN(x)) {
  17344. return '-';
  17345. }
  17346. x = (x + '').split('.');
  17347. return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + (x.length > 1 ? '.' + x[1] : '');
  17348. }
  17349. return {
  17350. parsePercent: parsePercent,
  17351. parseCenter: parseCenter,
  17352. parseRadius: parseRadius,
  17353. addCommas: addCommas
  17354. };
  17355. });define('echarts/data/KDTree', [
  17356. 'require',
  17357. './quickSelect'
  17358. ], function (require) {
  17359. var quickSelect = require('./quickSelect');
  17360. function Node(axis, data) {
  17361. this.left = null;
  17362. this.right = null;
  17363. this.axis = axis;
  17364. this.data = data;
  17365. }
  17366. var KDTree = function (points, dimension) {
  17367. if (!points.length) {
  17368. return;
  17369. }
  17370. if (!dimension) {
  17371. dimension = points[0].array.length;
  17372. }
  17373. this.dimension = dimension;
  17374. this.root = this._buildTree(points, 0, points.length - 1, 0);
  17375. this._stack = [];
  17376. this._nearstNList = [];
  17377. };
  17378. KDTree.prototype._buildTree = function (points, left, right, axis) {
  17379. if (right < left) {
  17380. return null;
  17381. }
  17382. var medianIndex = Math.floor((left + right) / 2);
  17383. medianIndex = quickSelect(points, left, right, medianIndex, function (a, b) {
  17384. return a.array[axis] - b.array[axis];
  17385. });
  17386. var median = points[medianIndex];
  17387. var node = new Node(axis, median);
  17388. axis = (axis + 1) % this.dimension;
  17389. if (right > left) {
  17390. node.left = this._buildTree(points, left, medianIndex - 1, axis);
  17391. node.right = this._buildTree(points, medianIndex + 1, right, axis);
  17392. }
  17393. return node;
  17394. };
  17395. KDTree.prototype.nearest = function (target, squaredDistance) {
  17396. var curr = this.root;
  17397. var stack = this._stack;
  17398. var idx = 0;
  17399. var minDist = Infinity;
  17400. var nearestNode = null;
  17401. if (curr.data !== target) {
  17402. minDist = squaredDistance(curr.data, target);
  17403. nearestNode = curr;
  17404. }
  17405. if (target.array[curr.axis] < curr.data.array[curr.axis]) {
  17406. curr.right && (stack[idx++] = curr.right);
  17407. curr.left && (stack[idx++] = curr.left);
  17408. } else {
  17409. curr.left && (stack[idx++] = curr.left);
  17410. curr.right && (stack[idx++] = curr.right);
  17411. }
  17412. while (idx--) {
  17413. curr = stack[idx];
  17414. var currDist = target.array[curr.axis] - curr.data.array[curr.axis];
  17415. var isLeft = currDist < 0;
  17416. var needsCheckOtherSide = false;
  17417. currDist = currDist * currDist;
  17418. if (currDist < minDist) {
  17419. currDist = squaredDistance(curr.data, target);
  17420. if (currDist < minDist && curr.data !== target) {
  17421. minDist = currDist;
  17422. nearestNode = curr;
  17423. }
  17424. needsCheckOtherSide = true;
  17425. }
  17426. if (isLeft) {
  17427. if (needsCheckOtherSide) {
  17428. curr.right && (stack[idx++] = curr.right);
  17429. }
  17430. curr.left && (stack[idx++] = curr.left);
  17431. } else {
  17432. if (needsCheckOtherSide) {
  17433. curr.left && (stack[idx++] = curr.left);
  17434. }
  17435. curr.right && (stack[idx++] = curr.right);
  17436. }
  17437. }
  17438. return nearestNode.data;
  17439. };
  17440. KDTree.prototype._addNearest = function (found, dist, node) {
  17441. var nearestNList = this._nearstNList;
  17442. for (var i = found - 1; i > 0; i--) {
  17443. if (dist >= nearestNList[i - 1].dist) {
  17444. break;
  17445. } else {
  17446. nearestNList[i].dist = nearestNList[i - 1].dist;
  17447. nearestNList[i].node = nearestNList[i - 1].node;
  17448. }
  17449. }
  17450. nearestNList[i].dist = dist;
  17451. nearestNList[i].node = node;
  17452. };
  17453. KDTree.prototype.nearestN = function (target, N, squaredDistance, output) {
  17454. if (N <= 0) {
  17455. output.length = 0;
  17456. return output;
  17457. }
  17458. var curr = this.root;
  17459. var stack = this._stack;
  17460. var idx = 0;
  17461. var nearestNList = this._nearstNList;
  17462. for (var i = 0; i < N; i++) {
  17463. if (!nearestNList[i]) {
  17464. nearestNList[i] = {};
  17465. }
  17466. nearestNList[i].dist = 0;
  17467. nearestNList[i].node = null;
  17468. }
  17469. var currDist = squaredDistance(curr.data, target);
  17470. var found = 0;
  17471. if (curr.data !== target) {
  17472. found++;
  17473. this._addNearest(found, currDist, curr);
  17474. }
  17475. if (target.array[curr.axis] < curr.data.array[curr.axis]) {
  17476. curr.right && (stack[idx++] = curr.right);
  17477. curr.left && (stack[idx++] = curr.left);
  17478. } else {
  17479. curr.left && (stack[idx++] = curr.left);
  17480. curr.right && (stack[idx++] = curr.right);
  17481. }
  17482. while (idx--) {
  17483. curr = stack[idx];
  17484. var currDist = target.array[curr.axis] - curr.data.array[curr.axis];
  17485. var isLeft = currDist < 0;
  17486. var needsCheckOtherSide = false;
  17487. currDist = currDist * currDist;
  17488. if (found < N || currDist < nearestNList[found - 1].dist) {
  17489. currDist = squaredDistance(curr.data, target);
  17490. if ((found < N || currDist < nearestNList[found - 1].dist) && curr.data !== target) {
  17491. if (found < N) {
  17492. found++;
  17493. }
  17494. this._addNearest(found, currDist, curr);
  17495. }
  17496. needsCheckOtherSide = true;
  17497. }
  17498. if (isLeft) {
  17499. if (needsCheckOtherSide) {
  17500. curr.right && (stack[idx++] = curr.right);
  17501. }
  17502. curr.left && (stack[idx++] = curr.left);
  17503. } else {
  17504. if (needsCheckOtherSide) {
  17505. curr.left && (stack[idx++] = curr.left);
  17506. }
  17507. curr.right && (stack[idx++] = curr.right);
  17508. }
  17509. }
  17510. for (var i = 0; i < found; i++) {
  17511. output[i] = nearestNList[i].node.data;
  17512. }
  17513. output.length = found;
  17514. return output;
  17515. };
  17516. return KDTree;
  17517. });define('echarts/data/quickSelect', ['require'], function (require) {
  17518. function defaultCompareFunc(a, b) {
  17519. return a - b;
  17520. }
  17521. function swapElement(list, idx0, idx1) {
  17522. var tmp = list[idx0];
  17523. list[idx0] = list[idx1];
  17524. list[idx1] = tmp;
  17525. }
  17526. function select(list, left, right, nth, compareFunc) {
  17527. var pivotIdx = left;
  17528. while (right > left) {
  17529. var pivotIdx = Math.round((right + left) / 2);
  17530. var pivotValue = list[pivotIdx];
  17531. swapElement(list, pivotIdx, right);
  17532. pivotIdx = left;
  17533. for (var i = left; i <= right - 1; i++) {
  17534. if (compareFunc(pivotValue, list[i]) >= 0) {
  17535. swapElement(list, i, pivotIdx);
  17536. pivotIdx++;
  17537. }
  17538. }
  17539. swapElement(list, right, pivotIdx);
  17540. if (pivotIdx === nth) {
  17541. return pivotIdx;
  17542. } else if (pivotIdx < nth) {
  17543. left = pivotIdx + 1;
  17544. } else {
  17545. right = pivotIdx - 1;
  17546. }
  17547. }
  17548. return left;
  17549. }
  17550. function quickSelect(list, left, right, nth, compareFunc) {
  17551. if (arguments.length <= 3) {
  17552. nth = left;
  17553. if (arguments.length == 2) {
  17554. compareFunc = defaultCompareFunc;
  17555. } else {
  17556. compareFunc = right;
  17557. }
  17558. left = 0;
  17559. right = list.length - 1;
  17560. }
  17561. return select(list, left, right, nth, compareFunc);
  17562. }
  17563. return quickSelect;
  17564. });define('echarts/component/dataView', [
  17565. 'require',
  17566. './base',
  17567. '../config',
  17568. 'zrender/tool/util',
  17569. '../component'
  17570. ], function (require) {
  17571. var Base = require('./base');
  17572. var ecConfig = require('../config');
  17573. var zrUtil = require('zrender/tool/util');
  17574. function DataView(ecTheme, messageCenter, zr, option, myChart) {
  17575. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  17576. this.dom = myChart.dom;
  17577. this._tDom = document.createElement('div');
  17578. this._textArea = document.createElement('textArea');
  17579. this._buttonRefresh = document.createElement('button');
  17580. this._buttonClose = document.createElement('button');
  17581. this._hasShow = false;
  17582. this._zrHeight = zr.getHeight();
  17583. this._zrWidth = zr.getWidth();
  17584. this._tDom.className = 'echarts-dataview';
  17585. this.hide();
  17586. this.dom.firstChild.appendChild(this._tDom);
  17587. if (window.addEventListener) {
  17588. this._tDom.addEventListener('click', this._stop);
  17589. this._tDom.addEventListener('mousewheel', this._stop);
  17590. this._tDom.addEventListener('mousemove', this._stop);
  17591. this._tDom.addEventListener('mousedown', this._stop);
  17592. this._tDom.addEventListener('mouseup', this._stop);
  17593. this._tDom.addEventListener('touchstart', this._stop);
  17594. this._tDom.addEventListener('touchmove', this._stop);
  17595. this._tDom.addEventListener('touchend', this._stop);
  17596. } else {
  17597. this._tDom.attachEvent('onclick', this._stop);
  17598. this._tDom.attachEvent('onmousewheel', this._stop);
  17599. this._tDom.attachEvent('onmousemove', this._stop);
  17600. this._tDom.attachEvent('onmousedown', this._stop);
  17601. this._tDom.attachEvent('onmouseup', this._stop);
  17602. }
  17603. }
  17604. DataView.prototype = {
  17605. type: ecConfig.COMPONENT_TYPE_DATAVIEW,
  17606. _lang: [
  17607. 'Data View',
  17608. 'close',
  17609. 'refresh'
  17610. ],
  17611. _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;',
  17612. hide: function () {
  17613. this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + 0 + 'px;' + 'background-color:#f0ffff;';
  17614. this._tDom.style.cssText = this._gCssText + this._sizeCssText;
  17615. },
  17616. show: function (newOption) {
  17617. this._hasShow = true;
  17618. var lang = this.query(this.option, 'toolbox.feature.dataView.lang') || this._lang;
  17619. this.option = newOption;
  17620. this._tDom.innerHTML = '<p style="padding:8px 0;margin:0 0 10px 0;' + 'border-bottom:1px solid #eee">' + (lang[0] || this._lang[0]) + '</p>';
  17621. var customContent = this.query(this.option, 'toolbox.feature.dataView.optionToContent');
  17622. if (typeof customContent != 'function') {
  17623. this._textArea.value = this._optionToContent();
  17624. } else {
  17625. this._textArea = document.createElement('div');
  17626. this._textArea.innerHTML = customContent(this.option);
  17627. }
  17628. this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;' + 'width:100%;' + 'height:' + (this._zrHeight - 100) + 'px;';
  17629. this._tDom.appendChild(this._textArea);
  17630. this._buttonClose.style.cssText = 'float:right;padding:1px 6px;';
  17631. this._buttonClose.innerHTML = lang[1] || this._lang[1];
  17632. var self = this;
  17633. this._buttonClose.onclick = function () {
  17634. self.hide();
  17635. };
  17636. this._tDom.appendChild(this._buttonClose);
  17637. if (this.query(this.option, 'toolbox.feature.dataView.readOnly') === false) {
  17638. this._buttonRefresh.style.cssText = 'float:right;margin-right:10px;padding:1px 6px;';
  17639. this._buttonRefresh.innerHTML = lang[2] || this._lang[2];
  17640. this._buttonRefresh.onclick = function () {
  17641. self._save();
  17642. };
  17643. this._textArea.readOnly = false;
  17644. this._textArea.style.cursor = 'default';
  17645. } else {
  17646. this._buttonRefresh.style.cssText = 'display:none';
  17647. this._textArea.readOnly = true;
  17648. this._textArea.style.cursor = 'text';
  17649. }
  17650. this._tDom.appendChild(this._buttonRefresh);
  17651. this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + this._zrHeight + 'px;' + 'background-color:#fff;';
  17652. this._tDom.style.cssText = this._gCssText + this._sizeCssText;
  17653. },
  17654. _optionToContent: function () {
  17655. var i;
  17656. var j;
  17657. var k;
  17658. var len;
  17659. var data;
  17660. var valueList;
  17661. var axisList = [];
  17662. var content = '';
  17663. if (this.option.xAxis) {
  17664. if (this.option.xAxis instanceof Array) {
  17665. axisList = this.option.xAxis;
  17666. } else {
  17667. axisList = [this.option.xAxis];
  17668. }
  17669. for (i = 0, len = axisList.length; i < len; i++) {
  17670. if ((axisList[i].type || 'category') == 'category') {
  17671. valueList = [];
  17672. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17673. valueList.push(this.getDataFromOption(axisList[i].data[j]));
  17674. }
  17675. content += valueList.join(', ') + '\n\n';
  17676. }
  17677. }
  17678. }
  17679. if (this.option.yAxis) {
  17680. if (this.option.yAxis instanceof Array) {
  17681. axisList = this.option.yAxis;
  17682. } else {
  17683. axisList = [this.option.yAxis];
  17684. }
  17685. for (i = 0, len = axisList.length; i < len; i++) {
  17686. if (axisList[i].type == 'category') {
  17687. valueList = [];
  17688. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17689. valueList.push(this.getDataFromOption(axisList[i].data[j]));
  17690. }
  17691. content += valueList.join(', ') + '\n\n';
  17692. }
  17693. }
  17694. }
  17695. var series = this.option.series;
  17696. var itemName;
  17697. for (i = 0, len = series.length; i < len; i++) {
  17698. valueList = [];
  17699. for (j = 0, k = series[i].data.length; j < k; j++) {
  17700. data = series[i].data[j];
  17701. if (series[i].type == ecConfig.CHART_TYPE_PIE || series[i].type == ecConfig.CHART_TYPE_MAP) {
  17702. itemName = (data.name || '-') + ':';
  17703. } else {
  17704. itemName = '';
  17705. }
  17706. if (series[i].type == ecConfig.CHART_TYPE_SCATTER) {
  17707. data = this.getDataFromOption(data).join(', ');
  17708. }
  17709. valueList.push(itemName + this.getDataFromOption(data));
  17710. }
  17711. content += (series[i].name || '-') + ' : \n';
  17712. content += valueList.join(series[i].type == ecConfig.CHART_TYPE_SCATTER ? '\n' : ', ');
  17713. content += '\n\n';
  17714. }
  17715. return content;
  17716. },
  17717. _save: function () {
  17718. var customContent = this.query(this.option, 'toolbox.feature.dataView.contentToOption');
  17719. if (typeof customContent != 'function') {
  17720. var text = this._textArea.value.split('\n');
  17721. var content = [];
  17722. for (var i = 0, l = text.length; i < l; i++) {
  17723. text[i] = this._trim(text[i]);
  17724. if (text[i] !== '') {
  17725. content.push(text[i]);
  17726. }
  17727. }
  17728. this._contentToOption(content);
  17729. } else {
  17730. customContent(this._textArea, this.option);
  17731. }
  17732. this.hide();
  17733. var self = this;
  17734. setTimeout(function () {
  17735. self.messageCenter && self.messageCenter.dispatch(ecConfig.EVENT.DATA_VIEW_CHANGED, null, { option: self.option }, self.myChart);
  17736. }, self.canvasSupported ? 800 : 100);
  17737. },
  17738. _contentToOption: function (content) {
  17739. var i;
  17740. var j;
  17741. var k;
  17742. var len;
  17743. var data;
  17744. var axisList = [];
  17745. var contentIdx = 0;
  17746. var contentValueList;
  17747. var value;
  17748. if (this.option.xAxis) {
  17749. if (this.option.xAxis instanceof Array) {
  17750. axisList = this.option.xAxis;
  17751. } else {
  17752. axisList = [this.option.xAxis];
  17753. }
  17754. for (i = 0, len = axisList.length; i < len; i++) {
  17755. if ((axisList[i].type || 'category') == 'category') {
  17756. contentValueList = content[contentIdx].split(',');
  17757. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17758. value = this._trim(contentValueList[j] || '');
  17759. data = axisList[i].data[j];
  17760. if (typeof axisList[i].data[j].value != 'undefined') {
  17761. axisList[i].data[j].value = value;
  17762. } else {
  17763. axisList[i].data[j] = value;
  17764. }
  17765. }
  17766. contentIdx++;
  17767. }
  17768. }
  17769. }
  17770. if (this.option.yAxis) {
  17771. if (this.option.yAxis instanceof Array) {
  17772. axisList = this.option.yAxis;
  17773. } else {
  17774. axisList = [this.option.yAxis];
  17775. }
  17776. for (i = 0, len = axisList.length; i < len; i++) {
  17777. if (axisList[i].type == 'category') {
  17778. contentValueList = content[contentIdx].split(',');
  17779. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17780. value = this._trim(contentValueList[j] || '');
  17781. data = axisList[i].data[j];
  17782. if (typeof axisList[i].data[j].value != 'undefined') {
  17783. axisList[i].data[j].value = value;
  17784. } else {
  17785. axisList[i].data[j] = value;
  17786. }
  17787. }
  17788. contentIdx++;
  17789. }
  17790. }
  17791. }
  17792. var series = this.option.series;
  17793. for (i = 0, len = series.length; i < len; i++) {
  17794. contentIdx++;
  17795. if (series[i].type == ecConfig.CHART_TYPE_SCATTER) {
  17796. for (var j = 0, k = series[i].data.length; j < k; j++) {
  17797. contentValueList = content[contentIdx];
  17798. value = contentValueList.replace(' ', '').split(',');
  17799. if (typeof series[i].data[j].value != 'undefined') {
  17800. series[i].data[j].value = value;
  17801. } else {
  17802. series[i].data[j] = value;
  17803. }
  17804. contentIdx++;
  17805. }
  17806. } else {
  17807. contentValueList = content[contentIdx].split(',');
  17808. for (var j = 0, k = series[i].data.length; j < k; j++) {
  17809. value = (contentValueList[j] || '').replace(/.*:/, '');
  17810. value = this._trim(value);
  17811. value = value != '-' && value !== '' ? value - 0 : '-';
  17812. if (typeof series[i].data[j].value != 'undefined') {
  17813. series[i].data[j].value = value;
  17814. } else {
  17815. series[i].data[j] = value;
  17816. }
  17817. }
  17818. contentIdx++;
  17819. }
  17820. }
  17821. },
  17822. _trim: function (str) {
  17823. var trimer = new RegExp('(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)', 'g');
  17824. return str.replace(trimer, '');
  17825. },
  17826. _stop: function (e) {
  17827. e = e || window.event;
  17828. if (e.stopPropagation) {
  17829. e.stopPropagation();
  17830. } else {
  17831. e.cancelBubble = true;
  17832. }
  17833. },
  17834. resize: function () {
  17835. this._zrHeight = this.zr.getHeight();
  17836. this._zrWidth = this.zr.getWidth();
  17837. if (this._tDom.offsetHeight > 10) {
  17838. this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + this._zrHeight + 'px;' + 'background-color:#fff;';
  17839. this._tDom.style.cssText = this._gCssText + this._sizeCssText;
  17840. this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;' + 'padding:4px 6px;overflow:auto;' + 'width:100%;' + 'height:' + (this._zrHeight - 100) + 'px;';
  17841. }
  17842. },
  17843. dispose: function () {
  17844. if (window.removeEventListener) {
  17845. this._tDom.removeEventListener('click', this._stop);
  17846. this._tDom.removeEventListener('mousewheel', this._stop);
  17847. this._tDom.removeEventListener('mousemove', this._stop);
  17848. this._tDom.removeEventListener('mousedown', this._stop);
  17849. this._tDom.removeEventListener('mouseup', this._stop);
  17850. this._tDom.removeEventListener('touchstart', this._stop);
  17851. this._tDom.removeEventListener('touchmove', this._stop);
  17852. this._tDom.removeEventListener('touchend', this._stop);
  17853. } else {
  17854. this._tDom.detachEvent('onclick', this._stop);
  17855. this._tDom.detachEvent('onmousewheel', this._stop);
  17856. this._tDom.detachEvent('onmousemove', this._stop);
  17857. this._tDom.detachEvent('onmousedown', this._stop);
  17858. this._tDom.detachEvent('onmouseup', this._stop);
  17859. }
  17860. this._buttonRefresh.onclick = null;
  17861. this._buttonClose.onclick = null;
  17862. if (this._hasShow) {
  17863. this._tDom.removeChild(this._textArea);
  17864. this._tDom.removeChild(this._buttonRefresh);
  17865. this._tDom.removeChild(this._buttonClose);
  17866. }
  17867. this._textArea = null;
  17868. this._buttonRefresh = null;
  17869. this._buttonClose = null;
  17870. this.dom.firstChild.removeChild(this._tDom);
  17871. this._tDom = null;
  17872. }
  17873. };
  17874. zrUtil.inherits(DataView, Base);
  17875. require('../component').define('dataView', DataView);
  17876. return DataView;
  17877. });define('echarts/util/shape/Cross', [
  17878. 'require',
  17879. 'zrender/shape/Base',
  17880. 'zrender/shape/Line',
  17881. 'zrender/tool/util',
  17882. './normalIsCover'
  17883. ], function (require) {
  17884. var Base = require('zrender/shape/Base');
  17885. var LineShape = require('zrender/shape/Line');
  17886. var zrUtil = require('zrender/tool/util');
  17887. function Cross(options) {
  17888. Base.call(this, options);
  17889. }
  17890. Cross.prototype = {
  17891. type: 'cross',
  17892. buildPath: function (ctx, style) {
  17893. var rect = style.rect;
  17894. style.xStart = rect.x;
  17895. style.xEnd = rect.x + rect.width;
  17896. style.yStart = style.yEnd = style.y;
  17897. LineShape.prototype.buildPath(ctx, style);
  17898. style.xStart = style.xEnd = style.x;
  17899. style.yStart = rect.y;
  17900. style.yEnd = rect.y + rect.height;
  17901. LineShape.prototype.buildPath(ctx, style);
  17902. },
  17903. getRect: function (style) {
  17904. return style.rect;
  17905. },
  17906. isCover: require('./normalIsCover')
  17907. };
  17908. zrUtil.inherits(Cross, Base);
  17909. return Cross;
  17910. });define('zrender/shape/Sector', [
  17911. 'require',
  17912. '../tool/math',
  17913. '../tool/computeBoundingBox',
  17914. '../tool/vector',
  17915. './Base',
  17916. '../tool/util'
  17917. ], function (require) {
  17918. var math = require('../tool/math');
  17919. var computeBoundingBox = require('../tool/computeBoundingBox');
  17920. var vec2 = require('../tool/vector');
  17921. var Base = require('./Base');
  17922. var min0 = vec2.create();
  17923. var min1 = vec2.create();
  17924. var max0 = vec2.create();
  17925. var max1 = vec2.create();
  17926. var Sector = function (options) {
  17927. Base.call(this, options);
  17928. };
  17929. Sector.prototype = {
  17930. type: 'sector',
  17931. buildPath: function (ctx, style) {
  17932. var x = style.x;
  17933. var y = style.y;
  17934. var r0 = style.r0 || 0;
  17935. var r = style.r;
  17936. var startAngle = style.startAngle;
  17937. var endAngle = style.endAngle;
  17938. var clockWise = style.clockWise || false;
  17939. startAngle = math.degreeToRadian(startAngle);
  17940. endAngle = math.degreeToRadian(endAngle);
  17941. if (!clockWise) {
  17942. startAngle = -startAngle;
  17943. endAngle = -endAngle;
  17944. }
  17945. var unitX = math.cos(startAngle);
  17946. var unitY = math.sin(startAngle);
  17947. ctx.moveTo(unitX * r0 + x, unitY * r0 + y);
  17948. ctx.lineTo(unitX * r + x, unitY * r + y);
  17949. ctx.arc(x, y, r, startAngle, endAngle, !clockWise);
  17950. ctx.lineTo(math.cos(endAngle) * r0 + x, math.sin(endAngle) * r0 + y);
  17951. if (r0 !== 0) {
  17952. ctx.arc(x, y, r0, endAngle, startAngle, clockWise);
  17953. }
  17954. ctx.closePath();
  17955. return;
  17956. },
  17957. getRect: function (style) {
  17958. if (style.__rect) {
  17959. return style.__rect;
  17960. }
  17961. var x = style.x;
  17962. var y = style.y;
  17963. var r0 = style.r0 || 0;
  17964. var r = style.r;
  17965. var startAngle = math.degreeToRadian(style.startAngle);
  17966. var endAngle = math.degreeToRadian(style.endAngle);
  17967. var clockWise = style.clockWise;
  17968. if (!clockWise) {
  17969. startAngle = -startAngle;
  17970. endAngle = -endAngle;
  17971. }
  17972. if (r0 > 1) {
  17973. computeBoundingBox.arc(x, y, r0, startAngle, endAngle, !clockWise, min0, max0);
  17974. } else {
  17975. min0[0] = max0[0] = x;
  17976. min0[1] = max0[1] = y;
  17977. }
  17978. computeBoundingBox.arc(x, y, r, startAngle, endAngle, !clockWise, min1, max1);
  17979. vec2.min(min0, min0, min1);
  17980. vec2.max(max0, max0, max1);
  17981. style.__rect = {
  17982. x: min0[0],
  17983. y: min0[1],
  17984. width: max0[0] - min0[0],
  17985. height: max0[1] - min0[1]
  17986. };
  17987. return style.__rect;
  17988. }
  17989. };
  17990. require('../tool/util').inherits(Sector, Base);
  17991. return Sector;
  17992. });define('echarts/util/shape/Candle', [
  17993. 'require',
  17994. 'zrender/shape/Base',
  17995. 'zrender/tool/util',
  17996. './normalIsCover'
  17997. ], function (require) {
  17998. var Base = require('zrender/shape/Base');
  17999. var zrUtil = require('zrender/tool/util');
  18000. function Candle(options) {
  18001. Base.call(this, options);
  18002. }
  18003. Candle.prototype = {
  18004. type: 'candle',
  18005. _numberOrder: function (a, b) {
  18006. return b - a;
  18007. },
  18008. buildPath: function (ctx, style) {
  18009. var yList = zrUtil.clone(style.y).sort(this._numberOrder);
  18010. ctx.moveTo(style.x, yList[3]);
  18011. ctx.lineTo(style.x, yList[2]);
  18012. ctx.moveTo(style.x - style.width / 2, yList[2]);
  18013. ctx.rect(style.x - style.width / 2, yList[2], style.width, yList[1] - yList[2]);
  18014. ctx.moveTo(style.x, yList[1]);
  18015. ctx.lineTo(style.x, yList[0]);
  18016. },
  18017. getRect: function (style) {
  18018. if (!style.__rect) {
  18019. var lineWidth = 0;
  18020. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  18021. lineWidth = style.lineWidth || 1;
  18022. }
  18023. var yList = zrUtil.clone(style.y).sort(this._numberOrder);
  18024. style.__rect = {
  18025. x: Math.round(style.x - style.width / 2 - lineWidth / 2),
  18026. y: Math.round(yList[3] - lineWidth / 2),
  18027. width: style.width + lineWidth,
  18028. height: yList[0] - yList[3] + lineWidth
  18029. };
  18030. }
  18031. return style.__rect;
  18032. },
  18033. isCover: require('./normalIsCover')
  18034. };
  18035. zrUtil.inherits(Candle, Base);
  18036. return Candle;
  18037. });define('zrender/tool/computeBoundingBox', [
  18038. 'require',
  18039. './vector',
  18040. './curve'
  18041. ], function (require) {
  18042. var vec2 = require('./vector');
  18043. var curve = require('./curve');
  18044. function computeBoundingBox(points, min, max) {
  18045. if (points.length === 0) {
  18046. return;
  18047. }
  18048. var left = points[0][0];
  18049. var right = points[0][0];
  18050. var top = points[0][1];
  18051. var bottom = points[0][1];
  18052. for (var i = 1; i < points.length; i++) {
  18053. var p = points[i];
  18054. if (p[0] < left) {
  18055. left = p[0];
  18056. }
  18057. if (p[0] > right) {
  18058. right = p[0];
  18059. }
  18060. if (p[1] < top) {
  18061. top = p[1];
  18062. }
  18063. if (p[1] > bottom) {
  18064. bottom = p[1];
  18065. }
  18066. }
  18067. min[0] = left;
  18068. min[1] = top;
  18069. max[0] = right;
  18070. max[1] = bottom;
  18071. }
  18072. function computeCubeBezierBoundingBox(p0, p1, p2, p3, min, max) {
  18073. var xDim = [];
  18074. curve.cubicExtrema(p0[0], p1[0], p2[0], p3[0], xDim);
  18075. for (var i = 0; i < xDim.length; i++) {
  18076. xDim[i] = curve.cubicAt(p0[0], p1[0], p2[0], p3[0], xDim[i]);
  18077. }
  18078. var yDim = [];
  18079. curve.cubicExtrema(p0[1], p1[1], p2[1], p3[1], yDim);
  18080. for (var i = 0; i < yDim.length; i++) {
  18081. yDim[i] = curve.cubicAt(p0[1], p1[1], p2[1], p3[1], yDim[i]);
  18082. }
  18083. xDim.push(p0[0], p3[0]);
  18084. yDim.push(p0[1], p3[1]);
  18085. var left = Math.min.apply(null, xDim);
  18086. var right = Math.max.apply(null, xDim);
  18087. var top = Math.min.apply(null, yDim);
  18088. var bottom = Math.max.apply(null, yDim);
  18089. min[0] = left;
  18090. min[1] = top;
  18091. max[0] = right;
  18092. max[1] = bottom;
  18093. }
  18094. function computeQuadraticBezierBoundingBox(p0, p1, p2, min, max) {
  18095. var t1 = curve.quadraticExtremum(p0[0], p1[0], p2[0]);
  18096. var t2 = curve.quadraticExtremum(p0[1], p1[1], p2[1]);
  18097. t1 = Math.max(Math.min(t1, 1), 0);
  18098. t2 = Math.max(Math.min(t2, 1), 0);
  18099. var ct1 = 1 - t1;
  18100. var ct2 = 1 - t2;
  18101. var x1 = ct1 * ct1 * p0[0] + 2 * ct1 * t1 * p1[0] + t1 * t1 * p2[0];
  18102. var y1 = ct1 * ct1 * p0[1] + 2 * ct1 * t1 * p1[1] + t1 * t1 * p2[1];
  18103. var x2 = ct2 * ct2 * p0[0] + 2 * ct2 * t2 * p1[0] + t2 * t2 * p2[0];
  18104. var y2 = ct2 * ct2 * p0[1] + 2 * ct2 * t2 * p1[1] + t2 * t2 * p2[1];
  18105. min[0] = Math.min(p0[0], p2[0], x1, x2);
  18106. min[1] = Math.min(p0[1], p2[1], y1, y2);
  18107. max[0] = Math.max(p0[0], p2[0], x1, x2);
  18108. max[1] = Math.max(p0[1], p2[1], y1, y2);
  18109. }
  18110. var start = vec2.create();
  18111. var end = vec2.create();
  18112. var extremity = vec2.create();
  18113. var computeArcBoundingBox = function (x, y, r, startAngle, endAngle, anticlockwise, min, max) {
  18114. if (Math.abs(startAngle - endAngle) >= Math.PI * 2) {
  18115. min[0] = x - r;
  18116. min[1] = y - r;
  18117. max[0] = x + r;
  18118. max[1] = y + r;
  18119. return;
  18120. }
  18121. start[0] = Math.cos(startAngle) * r + x;
  18122. start[1] = Math.sin(startAngle) * r + y;
  18123. end[0] = Math.cos(endAngle) * r + x;
  18124. end[1] = Math.sin(endAngle) * r + y;
  18125. vec2.min(min, start, end);
  18126. vec2.max(max, start, end);
  18127. startAngle = startAngle % (Math.PI * 2);
  18128. if (startAngle < 0) {
  18129. startAngle = startAngle + Math.PI * 2;
  18130. }
  18131. endAngle = endAngle % (Math.PI * 2);
  18132. if (endAngle < 0) {
  18133. endAngle = endAngle + Math.PI * 2;
  18134. }
  18135. if (startAngle > endAngle && !anticlockwise) {
  18136. endAngle += Math.PI * 2;
  18137. } else if (startAngle < endAngle && anticlockwise) {
  18138. startAngle += Math.PI * 2;
  18139. }
  18140. if (anticlockwise) {
  18141. var tmp = endAngle;
  18142. endAngle = startAngle;
  18143. startAngle = tmp;
  18144. }
  18145. for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {
  18146. if (angle > startAngle) {
  18147. extremity[0] = Math.cos(angle) * r + x;
  18148. extremity[1] = Math.sin(angle) * r + y;
  18149. vec2.min(min, extremity, min);
  18150. vec2.max(max, extremity, max);
  18151. }
  18152. }
  18153. };
  18154. computeBoundingBox.cubeBezier = computeCubeBezierBoundingBox;
  18155. computeBoundingBox.quadraticBezier = computeQuadraticBezierBoundingBox;
  18156. computeBoundingBox.arc = computeArcBoundingBox;
  18157. return computeBoundingBox;
  18158. });define('echarts/util/shape/Chain', [
  18159. 'require',
  18160. 'zrender/shape/Base',
  18161. './Icon',
  18162. 'zrender/shape/util/dashedLineTo',
  18163. 'zrender/tool/util',
  18164. 'zrender/tool/matrix'
  18165. ], function (require) {
  18166. var Base = require('zrender/shape/Base');
  18167. var IconShape = require('./Icon');
  18168. var dashedLineTo = require('zrender/shape/util/dashedLineTo');
  18169. var zrUtil = require('zrender/tool/util');
  18170. var matrix = require('zrender/tool/matrix');
  18171. function Chain(options) {
  18172. Base.call(this, options);
  18173. }
  18174. Chain.prototype = {
  18175. type: 'chain',
  18176. brush: function (ctx, isHighlight) {
  18177. var style = this.style;
  18178. if (isHighlight) {
  18179. style = this.getHighlightStyle(style, this.highlightStyle || {});
  18180. }
  18181. ctx.save();
  18182. this.setContext(ctx, style);
  18183. this.setTransform(ctx);
  18184. ctx.save();
  18185. ctx.beginPath();
  18186. this.buildLinePath(ctx, style);
  18187. ctx.stroke();
  18188. ctx.restore();
  18189. this.brushSymbol(ctx, style);
  18190. ctx.restore();
  18191. return;
  18192. },
  18193. buildLinePath: function (ctx, style) {
  18194. var x = style.x;
  18195. var y = style.y + 5;
  18196. var width = style.width;
  18197. var height = style.height / 2 - 10;
  18198. ctx.moveTo(x, y);
  18199. ctx.lineTo(x, y + height);
  18200. ctx.moveTo(x + width, y);
  18201. ctx.lineTo(x + width, y + height);
  18202. ctx.moveTo(x, y + height / 2);
  18203. if (!style.lineType || style.lineType == 'solid') {
  18204. ctx.lineTo(x + width, y + height / 2);
  18205. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  18206. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  18207. dashedLineTo(ctx, x, y + height / 2, x + width, y + height / 2, dashLength);
  18208. }
  18209. },
  18210. brushSymbol: function (ctx, style) {
  18211. var y = style.y + style.height / 4;
  18212. ctx.save();
  18213. var chainPoint = style.chainPoint;
  18214. var curPoint;
  18215. for (var idx = 0, l = chainPoint.length; idx < l; idx++) {
  18216. curPoint = chainPoint[idx];
  18217. if (curPoint.symbol != 'none') {
  18218. ctx.beginPath();
  18219. var symbolSize = curPoint.symbolSize;
  18220. IconShape.prototype.buildPath(ctx, {
  18221. iconType: curPoint.symbol,
  18222. x: curPoint.x - symbolSize,
  18223. y: y - symbolSize,
  18224. width: symbolSize * 2,
  18225. height: symbolSize * 2,
  18226. n: curPoint.n
  18227. });
  18228. ctx.fillStyle = curPoint.isEmpty ? '#fff' : style.strokeColor;
  18229. ctx.closePath();
  18230. ctx.fill();
  18231. ctx.stroke();
  18232. }
  18233. if (curPoint.showLabel) {
  18234. ctx.font = curPoint.textFont;
  18235. ctx.fillStyle = curPoint.textColor;
  18236. ctx.textAlign = curPoint.textAlign;
  18237. ctx.textBaseline = curPoint.textBaseline;
  18238. if (curPoint.rotation) {
  18239. ctx.save();
  18240. this._updateTextTransform(ctx, curPoint.rotation);
  18241. ctx.fillText(curPoint.name, curPoint.textX, curPoint.textY);
  18242. ctx.restore();
  18243. } else {
  18244. ctx.fillText(curPoint.name, curPoint.textX, curPoint.textY);
  18245. }
  18246. }
  18247. }
  18248. ctx.restore();
  18249. },
  18250. _updateTextTransform: function (ctx, rotation) {
  18251. var _transform = matrix.create();
  18252. matrix.identity(_transform);
  18253. if (rotation[0] !== 0) {
  18254. var originX = rotation[1] || 0;
  18255. var originY = rotation[2] || 0;
  18256. if (originX || originY) {
  18257. matrix.translate(_transform, _transform, [
  18258. -originX,
  18259. -originY
  18260. ]);
  18261. }
  18262. matrix.rotate(_transform, _transform, rotation[0]);
  18263. if (originX || originY) {
  18264. matrix.translate(_transform, _transform, [
  18265. originX,
  18266. originY
  18267. ]);
  18268. }
  18269. }
  18270. ctx.transform.apply(ctx, _transform);
  18271. },
  18272. isCover: function (x, y) {
  18273. var rect = this.style;
  18274. if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
  18275. return true;
  18276. } else {
  18277. return false;
  18278. }
  18279. }
  18280. };
  18281. zrUtil.inherits(Chain, Base);
  18282. return Chain;
  18283. });define('zrender/shape/Ring', [
  18284. 'require',
  18285. './Base',
  18286. '../tool/util'
  18287. ], function (require) {
  18288. var Base = require('./Base');
  18289. var Ring = function (options) {
  18290. Base.call(this, options);
  18291. };
  18292. Ring.prototype = {
  18293. type: 'ring',
  18294. buildPath: function (ctx, style) {
  18295. ctx.arc(style.x, style.y, style.r, 0, Math.PI * 2, false);
  18296. ctx.moveTo(style.x + style.r0, style.y);
  18297. ctx.arc(style.x, style.y, style.r0, 0, Math.PI * 2, true);
  18298. return;
  18299. },
  18300. getRect: function (style) {
  18301. if (style.__rect) {
  18302. return style.__rect;
  18303. }
  18304. var lineWidth;
  18305. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  18306. lineWidth = style.lineWidth || 1;
  18307. } else {
  18308. lineWidth = 0;
  18309. }
  18310. style.__rect = {
  18311. x: Math.round(style.x - style.r - lineWidth / 2),
  18312. y: Math.round(style.y - style.r - lineWidth / 2),
  18313. width: style.r * 2 + lineWidth,
  18314. height: style.r * 2 + lineWidth
  18315. };
  18316. return style.__rect;
  18317. }
  18318. };
  18319. require('../tool/util').inherits(Ring, Base);
  18320. return Ring;
  18321. });define('echarts/component/axis', [
  18322. 'require',
  18323. './base',
  18324. 'zrender/shape/Line',
  18325. '../config',
  18326. '../util/ecData',
  18327. 'zrender/tool/util',
  18328. 'zrender/tool/color',
  18329. './categoryAxis',
  18330. './valueAxis',
  18331. '../component'
  18332. ], function (require) {
  18333. var Base = require('./base');
  18334. var LineShape = require('zrender/shape/Line');
  18335. var ecConfig = require('../config');
  18336. var ecData = require('../util/ecData');
  18337. var zrUtil = require('zrender/tool/util');
  18338. var zrColor = require('zrender/tool/color');
  18339. function Axis(ecTheme, messageCenter, zr, option, myChart, axisType) {
  18340. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  18341. this.axisType = axisType;
  18342. this._axisList = [];
  18343. this.refresh(option);
  18344. }
  18345. Axis.prototype = {
  18346. type: ecConfig.COMPONENT_TYPE_AXIS,
  18347. axisBase: {
  18348. _buildAxisLine: function () {
  18349. var lineWidth = this.option.axisLine.lineStyle.width;
  18350. var halfLineWidth = lineWidth / 2;
  18351. var axShape = {
  18352. _axisShape: 'axisLine',
  18353. zlevel: this.getZlevelBase(),
  18354. z: this.getZBase() + 3,
  18355. hoverable: false
  18356. };
  18357. var grid = this.grid;
  18358. switch (this.option.position) {
  18359. case 'left':
  18360. axShape.style = {
  18361. xStart: grid.getX() - halfLineWidth,
  18362. yStart: grid.getYend(),
  18363. xEnd: grid.getX() - halfLineWidth,
  18364. yEnd: grid.getY(),
  18365. lineCap: 'round'
  18366. };
  18367. break;
  18368. case 'right':
  18369. axShape.style = {
  18370. xStart: grid.getXend() + halfLineWidth,
  18371. yStart: grid.getYend(),
  18372. xEnd: grid.getXend() + halfLineWidth,
  18373. yEnd: grid.getY(),
  18374. lineCap: 'round'
  18375. };
  18376. break;
  18377. case 'bottom':
  18378. axShape.style = {
  18379. xStart: grid.getX(),
  18380. yStart: grid.getYend() + halfLineWidth,
  18381. xEnd: grid.getXend(),
  18382. yEnd: grid.getYend() + halfLineWidth,
  18383. lineCap: 'round'
  18384. };
  18385. break;
  18386. case 'top':
  18387. axShape.style = {
  18388. xStart: grid.getX(),
  18389. yStart: grid.getY() - halfLineWidth,
  18390. xEnd: grid.getXend(),
  18391. yEnd: grid.getY() - halfLineWidth,
  18392. lineCap: 'round'
  18393. };
  18394. break;
  18395. }
  18396. var style = axShape.style;
  18397. if (this.option.name !== '') {
  18398. style.text = this.option.name;
  18399. style.textPosition = this.option.nameLocation;
  18400. style.textFont = this.getFont(this.option.nameTextStyle);
  18401. if (this.option.nameTextStyle.align) {
  18402. style.textAlign = this.option.nameTextStyle.align;
  18403. }
  18404. if (this.option.nameTextStyle.baseline) {
  18405. style.textBaseline = this.option.nameTextStyle.baseline;
  18406. }
  18407. if (this.option.nameTextStyle.color) {
  18408. style.textColor = this.option.nameTextStyle.color;
  18409. }
  18410. }
  18411. style.strokeColor = this.option.axisLine.lineStyle.color;
  18412. style.lineWidth = lineWidth;
  18413. if (this.isHorizontal()) {
  18414. style.yStart = style.yEnd = this.subPixelOptimize(style.yEnd, lineWidth);
  18415. } else {
  18416. style.xStart = style.xEnd = this.subPixelOptimize(style.xEnd, lineWidth);
  18417. }
  18418. style.lineType = this.option.axisLine.lineStyle.type;
  18419. axShape = new LineShape(axShape);
  18420. this.shapeList.push(axShape);
  18421. },
  18422. _axisLabelClickable: function (clickable, axShape) {
  18423. if (clickable) {
  18424. ecData.pack(axShape, undefined, -1, undefined, -1, axShape.style.text);
  18425. axShape.hoverable = true;
  18426. axShape.clickable = true;
  18427. axShape.highlightStyle = {
  18428. color: zrColor.lift(axShape.style.color, 1),
  18429. brushType: 'fill'
  18430. };
  18431. return axShape;
  18432. } else {
  18433. return axShape;
  18434. }
  18435. },
  18436. refixAxisShape: function (zeroX, zeroY) {
  18437. if (!this.option.axisLine.onZero) {
  18438. return;
  18439. }
  18440. var tickLength;
  18441. if (this.isHorizontal() && zeroY != null) {
  18442. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  18443. if (this.shapeList[i]._axisShape === 'axisLine') {
  18444. this.shapeList[i].style.yStart = this.shapeList[i].style.yEnd = this.subPixelOptimize(zeroY, this.shapeList[i].stylelineWidth);
  18445. this.zr.modShape(this.shapeList[i].id);
  18446. } else if (this.shapeList[i]._axisShape === 'axisTick') {
  18447. tickLength = this.shapeList[i].style.yEnd - this.shapeList[i].style.yStart;
  18448. this.shapeList[i].style.yStart = zeroY - tickLength;
  18449. this.shapeList[i].style.yEnd = zeroY;
  18450. this.zr.modShape(this.shapeList[i].id);
  18451. }
  18452. }
  18453. }
  18454. if (!this.isHorizontal() && zeroX != null) {
  18455. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  18456. if (this.shapeList[i]._axisShape === 'axisLine') {
  18457. this.shapeList[i].style.xStart = this.shapeList[i].style.xEnd = this.subPixelOptimize(zeroX, this.shapeList[i].stylelineWidth);
  18458. this.zr.modShape(this.shapeList[i].id);
  18459. } else if (this.shapeList[i]._axisShape === 'axisTick') {
  18460. tickLength = this.shapeList[i].style.xEnd - this.shapeList[i].style.xStart;
  18461. this.shapeList[i].style.xStart = zeroX;
  18462. this.shapeList[i].style.xEnd = zeroX + tickLength;
  18463. this.zr.modShape(this.shapeList[i].id);
  18464. }
  18465. }
  18466. }
  18467. },
  18468. getPosition: function () {
  18469. return this.option.position;
  18470. },
  18471. isHorizontal: function () {
  18472. return this.option.position === 'bottom' || this.option.position === 'top';
  18473. }
  18474. },
  18475. reformOption: function (opt) {
  18476. if (!opt || opt instanceof Array && opt.length === 0) {
  18477. opt = [{ type: ecConfig.COMPONENT_TYPE_AXIS_VALUE }];
  18478. } else if (!(opt instanceof Array)) {
  18479. opt = [opt];
  18480. }
  18481. if (opt.length > 2) {
  18482. opt = [
  18483. opt[0],
  18484. opt[1]
  18485. ];
  18486. }
  18487. if (this.axisType === 'xAxis') {
  18488. if (!opt[0].position || opt[0].position != 'bottom' && opt[0].position != 'top') {
  18489. opt[0].position = 'bottom';
  18490. }
  18491. if (opt.length > 1) {
  18492. opt[1].position = opt[0].position === 'bottom' ? 'top' : 'bottom';
  18493. }
  18494. for (var i = 0, l = opt.length; i < l; i++) {
  18495. opt[i].type = opt[i].type || 'category';
  18496. opt[i].xAxisIndex = i;
  18497. opt[i].yAxisIndex = -1;
  18498. }
  18499. } else {
  18500. if (!opt[0].position || opt[0].position != 'left' && opt[0].position != 'right') {
  18501. opt[0].position = 'left';
  18502. }
  18503. if (opt.length > 1) {
  18504. opt[1].position = opt[0].position === 'left' ? 'right' : 'left';
  18505. }
  18506. for (var i = 0, l = opt.length; i < l; i++) {
  18507. opt[i].type = opt[i].type || 'value';
  18508. opt[i].xAxisIndex = -1;
  18509. opt[i].yAxisIndex = i;
  18510. }
  18511. }
  18512. return opt;
  18513. },
  18514. refresh: function (newOption) {
  18515. var axisOption;
  18516. if (newOption) {
  18517. this.option = newOption;
  18518. if (this.axisType === 'xAxis') {
  18519. this.option.xAxis = this.reformOption(newOption.xAxis);
  18520. axisOption = this.option.xAxis;
  18521. } else {
  18522. this.option.yAxis = this.reformOption(newOption.yAxis);
  18523. axisOption = this.option.yAxis;
  18524. }
  18525. this.series = newOption.series;
  18526. }
  18527. var CategoryAxis = require('./categoryAxis');
  18528. var ValueAxis = require('./valueAxis');
  18529. var len = Math.max(axisOption && axisOption.length || 0, this._axisList.length);
  18530. for (var i = 0; i < len; i++) {
  18531. if (this._axisList[i] && newOption && (!axisOption[i] || this._axisList[i].type != axisOption[i].type)) {
  18532. this._axisList[i].dispose && this._axisList[i].dispose();
  18533. this._axisList[i] = false;
  18534. }
  18535. if (this._axisList[i]) {
  18536. this._axisList[i].refresh && this._axisList[i].refresh(axisOption ? axisOption[i] : false, this.series);
  18537. } else if (axisOption && axisOption[i]) {
  18538. 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);
  18539. }
  18540. }
  18541. },
  18542. getAxis: function (idx) {
  18543. return this._axisList[idx];
  18544. },
  18545. clear: function () {
  18546. for (var i = 0, l = this._axisList.length; i < l; i++) {
  18547. this._axisList[i].dispose && this._axisList[i].dispose();
  18548. }
  18549. this._axisList = [];
  18550. }
  18551. };
  18552. zrUtil.inherits(Axis, Base);
  18553. require('../component').define('axis', Axis);
  18554. return Axis;
  18555. });define('echarts/component/grid', [
  18556. 'require',
  18557. './base',
  18558. 'zrender/shape/Rectangle',
  18559. '../config',
  18560. 'zrender/tool/util',
  18561. '../component'
  18562. ], function (require) {
  18563. var Base = require('./base');
  18564. var RectangleShape = require('zrender/shape/Rectangle');
  18565. var ecConfig = require('../config');
  18566. ecConfig.grid = {
  18567. zlevel: 0,
  18568. z: 0,
  18569. x: 80,
  18570. y: 60,
  18571. x2: 80,
  18572. y2: 60,
  18573. backgroundColor: 'rgba(0,0,0,0)',
  18574. borderWidth: 1,
  18575. borderColor: '#ccc'
  18576. };
  18577. var zrUtil = require('zrender/tool/util');
  18578. function Grid(ecTheme, messageCenter, zr, option, myChart) {
  18579. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  18580. this.refresh(option);
  18581. }
  18582. Grid.prototype = {
  18583. type: ecConfig.COMPONENT_TYPE_GRID,
  18584. getX: function () {
  18585. return this._x;
  18586. },
  18587. getY: function () {
  18588. return this._y;
  18589. },
  18590. getWidth: function () {
  18591. return this._width;
  18592. },
  18593. getHeight: function () {
  18594. return this._height;
  18595. },
  18596. getXend: function () {
  18597. return this._x + this._width;
  18598. },
  18599. getYend: function () {
  18600. return this._y + this._height;
  18601. },
  18602. getArea: function () {
  18603. return {
  18604. x: this._x,
  18605. y: this._y,
  18606. width: this._width,
  18607. height: this._height
  18608. };
  18609. },
  18610. getBbox: function () {
  18611. return [
  18612. [
  18613. this._x,
  18614. this._y
  18615. ],
  18616. [
  18617. this.getXend(),
  18618. this.getYend()
  18619. ]
  18620. ];
  18621. },
  18622. refixAxisShape: function (component) {
  18623. var zeroX;
  18624. var zeroY;
  18625. var axisList = component.xAxis._axisList.concat(component.yAxis ? component.yAxis._axisList : []);
  18626. var len = axisList.length;
  18627. var axis;
  18628. while (len--) {
  18629. axis = axisList[len];
  18630. if (axis.type == ecConfig.COMPONENT_TYPE_AXIS_VALUE && axis._min < 0 && axis._max >= 0) {
  18631. axis.isHorizontal() ? zeroX = axis.getCoord(0) : zeroY = axis.getCoord(0);
  18632. }
  18633. }
  18634. if (typeof zeroX != 'undefined' || typeof zeroY != 'undefined') {
  18635. len = axisList.length;
  18636. while (len--) {
  18637. axisList[len].refixAxisShape(zeroX, zeroY);
  18638. }
  18639. }
  18640. },
  18641. refresh: function (newOption) {
  18642. if (newOption || this._zrWidth != this.zr.getWidth() || this._zrHeight != this.zr.getHeight()) {
  18643. this.clear();
  18644. this.option = newOption || this.option;
  18645. this.option.grid = this.reformOption(this.option.grid);
  18646. var gridOption = this.option.grid;
  18647. this._zrWidth = this.zr.getWidth();
  18648. this._zrHeight = this.zr.getHeight();
  18649. this._x = this.parsePercent(gridOption.x, this._zrWidth);
  18650. this._y = this.parsePercent(gridOption.y, this._zrHeight);
  18651. var x2 = this.parsePercent(gridOption.x2, this._zrWidth);
  18652. var y2 = this.parsePercent(gridOption.y2, this._zrHeight);
  18653. if (typeof gridOption.width == 'undefined') {
  18654. this._width = this._zrWidth - this._x - x2;
  18655. } else {
  18656. this._width = this.parsePercent(gridOption.width, this._zrWidth);
  18657. }
  18658. this._width = this._width <= 0 ? 10 : this._width;
  18659. if (typeof gridOption.height == 'undefined') {
  18660. this._height = this._zrHeight - this._y - y2;
  18661. } else {
  18662. this._height = this.parsePercent(gridOption.height, this._zrHeight);
  18663. }
  18664. this._height = this._height <= 0 ? 10 : this._height;
  18665. this._x = this.subPixelOptimize(this._x, gridOption.borderWidth);
  18666. this._y = this.subPixelOptimize(this._y, gridOption.borderWidth);
  18667. this.shapeList.push(new RectangleShape({
  18668. zlevel: this.getZlevelBase(),
  18669. z: this.getZBase(),
  18670. hoverable: false,
  18671. style: {
  18672. x: this._x,
  18673. y: this._y,
  18674. width: this._width,
  18675. height: this._height,
  18676. brushType: gridOption.borderWidth > 0 ? 'both' : 'fill',
  18677. color: gridOption.backgroundColor,
  18678. strokeColor: gridOption.borderColor,
  18679. lineWidth: gridOption.borderWidth
  18680. }
  18681. }));
  18682. this.zr.addShape(this.shapeList[0]);
  18683. }
  18684. }
  18685. };
  18686. zrUtil.inherits(Grid, Base);
  18687. require('../component').define('grid', Grid);
  18688. return Grid;
  18689. });define('echarts/component/dataZoom', [
  18690. 'require',
  18691. './base',
  18692. 'zrender/shape/Rectangle',
  18693. 'zrender/shape/Polygon',
  18694. '../util/shape/Icon',
  18695. '../config',
  18696. '../util/date',
  18697. 'zrender/tool/util',
  18698. '../component'
  18699. ], function (require) {
  18700. var Base = require('./base');
  18701. var RectangleShape = require('zrender/shape/Rectangle');
  18702. var PolygonShape = require('zrender/shape/Polygon');
  18703. var IconShape = require('../util/shape/Icon');
  18704. var ecConfig = require('../config');
  18705. ecConfig.dataZoom = {
  18706. zlevel: 0,
  18707. z: 4,
  18708. show: false,
  18709. orient: 'horizontal',
  18710. backgroundColor: 'rgba(0,0,0,0)',
  18711. dataBackgroundColor: '#eee',
  18712. fillerColor: 'rgba(144,197,237,0.2)',
  18713. handleColor: 'rgba(70,130,180,0.8)',
  18714. handleSize: 8,
  18715. showDetail: true,
  18716. realtime: true
  18717. };
  18718. var ecDate = require('../util/date');
  18719. var zrUtil = require('zrender/tool/util');
  18720. function DataZoom(ecTheme, messageCenter, zr, option, myChart) {
  18721. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  18722. var self = this;
  18723. self._ondrift = function (dx, dy) {
  18724. return self.__ondrift(this, dx, dy);
  18725. };
  18726. self._ondragend = function () {
  18727. return self.__ondragend();
  18728. };
  18729. this._fillerSize = 30;
  18730. this._isSilence = false;
  18731. this._zoom = {};
  18732. this.option.dataZoom = this.reformOption(this.option.dataZoom);
  18733. this.zoomOption = this.option.dataZoom;
  18734. this._handleSize = this.zoomOption.handleSize;
  18735. if (!this.myChart.canvasSupported) {
  18736. this.zoomOption.realtime = false;
  18737. }
  18738. this._location = this._getLocation();
  18739. this._zoom = this._getZoom();
  18740. this._backupData();
  18741. if (this.option.dataZoom.show) {
  18742. this._buildShape();
  18743. }
  18744. this._syncData();
  18745. }
  18746. DataZoom.prototype = {
  18747. type: ecConfig.COMPONENT_TYPE_DATAZOOM,
  18748. _buildShape: function () {
  18749. this._buildBackground();
  18750. this._buildFiller();
  18751. this._buildHandle();
  18752. this._buildFrame();
  18753. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  18754. this.zr.addShape(this.shapeList[i]);
  18755. }
  18756. this._syncFrameShape();
  18757. },
  18758. _getLocation: function () {
  18759. var x;
  18760. var y;
  18761. var width;
  18762. var height;
  18763. var grid = this.component.grid;
  18764. if (this.zoomOption.orient == 'horizontal') {
  18765. width = this.zoomOption.width || grid.getWidth();
  18766. height = this.zoomOption.height || this._fillerSize;
  18767. x = this.zoomOption.x != null ? this.zoomOption.x : grid.getX();
  18768. y = this.zoomOption.y != null ? this.zoomOption.y : this.zr.getHeight() - height - 2;
  18769. } else {
  18770. width = this.zoomOption.width || this._fillerSize;
  18771. height = this.zoomOption.height || grid.getHeight();
  18772. x = this.zoomOption.x != null ? this.zoomOption.x : 2;
  18773. y = this.zoomOption.y != null ? this.zoomOption.y : grid.getY();
  18774. }
  18775. return {
  18776. x: x,
  18777. y: y,
  18778. width: width,
  18779. height: height
  18780. };
  18781. },
  18782. _getZoom: function () {
  18783. var series = this.option.series;
  18784. var xAxis = this.option.xAxis;
  18785. if (xAxis && !(xAxis instanceof Array)) {
  18786. xAxis = [xAxis];
  18787. this.option.xAxis = xAxis;
  18788. }
  18789. var yAxis = this.option.yAxis;
  18790. if (yAxis && !(yAxis instanceof Array)) {
  18791. yAxis = [yAxis];
  18792. this.option.yAxis = yAxis;
  18793. }
  18794. var zoomSeriesIndex = [];
  18795. var xAxisIndex;
  18796. var yAxisIndex;
  18797. var zOptIdx = this.zoomOption.xAxisIndex;
  18798. if (xAxis && zOptIdx == null) {
  18799. xAxisIndex = [];
  18800. for (var i = 0, l = xAxis.length; i < l; i++) {
  18801. if (xAxis[i].type == 'category' || xAxis[i].type == null) {
  18802. xAxisIndex.push(i);
  18803. }
  18804. }
  18805. } else {
  18806. if (zOptIdx instanceof Array) {
  18807. xAxisIndex = zOptIdx;
  18808. } else if (zOptIdx != null) {
  18809. xAxisIndex = [zOptIdx];
  18810. } else {
  18811. xAxisIndex = [];
  18812. }
  18813. }
  18814. zOptIdx = this.zoomOption.yAxisIndex;
  18815. if (yAxis && zOptIdx == null) {
  18816. yAxisIndex = [];
  18817. for (var i = 0, l = yAxis.length; i < l; i++) {
  18818. if (yAxis[i].type == 'category') {
  18819. yAxisIndex.push(i);
  18820. }
  18821. }
  18822. } else {
  18823. if (zOptIdx instanceof Array) {
  18824. yAxisIndex = zOptIdx;
  18825. } else if (zOptIdx != null) {
  18826. yAxisIndex = [zOptIdx];
  18827. } else {
  18828. yAxisIndex = [];
  18829. }
  18830. }
  18831. var serie;
  18832. for (var i = 0, l = series.length; i < l; i++) {
  18833. serie = series[i];
  18834. 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) {
  18835. continue;
  18836. }
  18837. for (var j = 0, k = xAxisIndex.length; j < k; j++) {
  18838. if (xAxisIndex[j] == (serie.xAxisIndex || 0)) {
  18839. zoomSeriesIndex.push(i);
  18840. break;
  18841. }
  18842. }
  18843. for (var j = 0, k = yAxisIndex.length; j < k; j++) {
  18844. if (yAxisIndex[j] == (serie.yAxisIndex || 0)) {
  18845. zoomSeriesIndex.push(i);
  18846. break;
  18847. }
  18848. }
  18849. 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)) {
  18850. zoomSeriesIndex.push(i);
  18851. }
  18852. }
  18853. var start = this._zoom.start != null ? this._zoom.start : this.zoomOption.start != null ? this.zoomOption.start : 0;
  18854. var end = this._zoom.end != null ? this._zoom.end : this.zoomOption.end != null ? this.zoomOption.end : 100;
  18855. if (start > end) {
  18856. start = start + end;
  18857. end = start - end;
  18858. start = start - end;
  18859. }
  18860. var size = Math.round((end - start) / 100 * (this.zoomOption.orient == 'horizontal' ? this._location.width : this._location.height));
  18861. return {
  18862. start: start,
  18863. end: end,
  18864. start2: 0,
  18865. end2: 100,
  18866. size: size,
  18867. xAxisIndex: xAxisIndex,
  18868. yAxisIndex: yAxisIndex,
  18869. seriesIndex: zoomSeriesIndex,
  18870. scatterMap: this._zoom.scatterMap || {}
  18871. };
  18872. },
  18873. _backupData: function () {
  18874. this._originalData = {
  18875. xAxis: {},
  18876. yAxis: {},
  18877. series: {}
  18878. };
  18879. var xAxis = this.option.xAxis;
  18880. var xAxisIndex = this._zoom.xAxisIndex;
  18881. for (var i = 0, l = xAxisIndex.length; i < l; i++) {
  18882. this._originalData.xAxis[xAxisIndex[i]] = xAxis[xAxisIndex[i]].data;
  18883. }
  18884. var yAxis = this.option.yAxis;
  18885. var yAxisIndex = this._zoom.yAxisIndex;
  18886. for (var i = 0, l = yAxisIndex.length; i < l; i++) {
  18887. this._originalData.yAxis[yAxisIndex[i]] = yAxis[yAxisIndex[i]].data;
  18888. }
  18889. var series = this.option.series;
  18890. var seriesIndex = this._zoom.seriesIndex;
  18891. var serie;
  18892. for (var i = 0, l = seriesIndex.length; i < l; i++) {
  18893. serie = series[seriesIndex[i]];
  18894. this._originalData.series[seriesIndex[i]] = serie.data;
  18895. 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)) {
  18896. this._backupScale();
  18897. this._calculScatterMap(seriesIndex[i]);
  18898. }
  18899. }
  18900. },
  18901. _calculScatterMap: function (seriesIndex) {
  18902. this._zoom.scatterMap = this._zoom.scatterMap || {};
  18903. this._zoom.scatterMap[seriesIndex] = this._zoom.scatterMap[seriesIndex] || {};
  18904. var componentLibrary = require('../component');
  18905. var Axis = componentLibrary.get('axis');
  18906. var axisOption = zrUtil.clone(this.option.xAxis);
  18907. if (axisOption[0].type == 'category') {
  18908. axisOption[0].type = 'value';
  18909. }
  18910. if (axisOption[1] && axisOption[1].type == 'category') {
  18911. axisOption[1].type = 'value';
  18912. }
  18913. var vAxis = new Axis(this.ecTheme, null, false, {
  18914. xAxis: axisOption,
  18915. series: this.option.series
  18916. }, this, 'xAxis');
  18917. var axisIndex = this.option.series[seriesIndex].xAxisIndex || 0;
  18918. this._zoom.scatterMap[seriesIndex].x = vAxis.getAxis(axisIndex).getExtremum();
  18919. vAxis.dispose();
  18920. axisOption = zrUtil.clone(this.option.yAxis);
  18921. if (axisOption[0].type == 'category') {
  18922. axisOption[0].type = 'value';
  18923. }
  18924. if (axisOption[1] && axisOption[1].type == 'category') {
  18925. axisOption[1].type = 'value';
  18926. }
  18927. vAxis = new Axis(this.ecTheme, null, false, {
  18928. yAxis: axisOption,
  18929. series: this.option.series
  18930. }, this, 'yAxis');
  18931. axisIndex = this.option.series[seriesIndex].yAxisIndex || 0;
  18932. this._zoom.scatterMap[seriesIndex].y = vAxis.getAxis(axisIndex).getExtremum();
  18933. vAxis.dispose();
  18934. },
  18935. _buildBackground: function () {
  18936. var width = this._location.width;
  18937. var height = this._location.height;
  18938. this.shapeList.push(new RectangleShape({
  18939. zlevel: this.getZlevelBase(),
  18940. z: this.getZBase(),
  18941. hoverable: false,
  18942. style: {
  18943. x: this._location.x,
  18944. y: this._location.y,
  18945. width: width,
  18946. height: height,
  18947. color: this.zoomOption.backgroundColor
  18948. }
  18949. }));
  18950. var maxLength = 0;
  18951. var xAxis = this._originalData.xAxis;
  18952. var xAxisIndex = this._zoom.xAxisIndex;
  18953. for (var i = 0, l = xAxisIndex.length; i < l; i++) {
  18954. maxLength = Math.max(maxLength, xAxis[xAxisIndex[i]].length);
  18955. }
  18956. var yAxis = this._originalData.yAxis;
  18957. var yAxisIndex = this._zoom.yAxisIndex;
  18958. for (var i = 0, l = yAxisIndex.length; i < l; i++) {
  18959. maxLength = Math.max(maxLength, yAxis[yAxisIndex[i]].length);
  18960. }
  18961. var seriesIndex = this._zoom.seriesIndex[0];
  18962. var data = this._originalData.series[seriesIndex];
  18963. var maxValue = Number.MIN_VALUE;
  18964. var minValue = Number.MAX_VALUE;
  18965. var value;
  18966. for (var i = 0, l = data.length; i < l; i++) {
  18967. value = this.getDataFromOption(data[i], 0);
  18968. if (this.option.series[seriesIndex].type == ecConfig.CHART_TYPE_K) {
  18969. value = value[1];
  18970. }
  18971. if (isNaN(value)) {
  18972. value = 0;
  18973. }
  18974. maxValue = Math.max(maxValue, value);
  18975. minValue = Math.min(minValue, value);
  18976. }
  18977. var valueRange = maxValue - minValue;
  18978. var pointList = [];
  18979. var x = width / (maxLength - (maxLength > 1 ? 1 : 0));
  18980. var y = height / (maxLength - (maxLength > 1 ? 1 : 0));
  18981. var step = 1;
  18982. if (this.zoomOption.orient == 'horizontal' && x < 1) {
  18983. step = Math.floor(maxLength * 3 / width);
  18984. } else if (this.zoomOption.orient == 'vertical' && y < 1) {
  18985. step = Math.floor(maxLength * 3 / height);
  18986. }
  18987. for (var i = 0, l = maxLength; i < l; i += step) {
  18988. value = this.getDataFromOption(data[i], 0);
  18989. if (this.option.series[seriesIndex].type == ecConfig.CHART_TYPE_K) {
  18990. value = value[1];
  18991. }
  18992. if (isNaN(value)) {
  18993. value = 0;
  18994. }
  18995. if (this.zoomOption.orient == 'horizontal') {
  18996. pointList.push([
  18997. this._location.x + x * i,
  18998. this._location.y + height - 1 - Math.round((value - minValue) / valueRange * (height - 10))
  18999. ]);
  19000. } else {
  19001. pointList.push([
  19002. this._location.x + 1 + Math.round((value - minValue) / valueRange * (width - 10)),
  19003. this._location.y + y * (l - i - 1)
  19004. ]);
  19005. }
  19006. }
  19007. if (this.zoomOption.orient == 'horizontal') {
  19008. pointList.push([
  19009. this._location.x + width,
  19010. this._location.y + height
  19011. ]);
  19012. pointList.push([
  19013. this._location.x,
  19014. this._location.y + height
  19015. ]);
  19016. } else {
  19017. pointList.push([
  19018. this._location.x,
  19019. this._location.y
  19020. ]);
  19021. pointList.push([
  19022. this._location.x,
  19023. this._location.y + height
  19024. ]);
  19025. }
  19026. this.shapeList.push(new PolygonShape({
  19027. zlevel: this.getZlevelBase(),
  19028. z: this.getZBase(),
  19029. style: {
  19030. pointList: pointList,
  19031. color: this.zoomOption.dataBackgroundColor
  19032. },
  19033. hoverable: false
  19034. }));
  19035. },
  19036. _buildFiller: function () {
  19037. this._fillerShae = {
  19038. zlevel: this.getZlevelBase(),
  19039. z: this.getZBase(),
  19040. draggable: true,
  19041. ondrift: this._ondrift,
  19042. ondragend: this._ondragend,
  19043. _type: 'filler'
  19044. };
  19045. if (this.zoomOption.orient == 'horizontal') {
  19046. this._fillerShae.style = {
  19047. x: this._location.x + Math.round(this._zoom.start / 100 * this._location.width) + this._handleSize,
  19048. y: this._location.y,
  19049. width: this._zoom.size - this._handleSize * 2,
  19050. height: this._location.height,
  19051. color: this.zoomOption.fillerColor,
  19052. text: ':::',
  19053. textPosition: 'inside'
  19054. };
  19055. } else {
  19056. this._fillerShae.style = {
  19057. x: this._location.x,
  19058. y: this._location.y + Math.round(this._zoom.start / 100 * this._location.height) + this._handleSize,
  19059. width: this._location.width,
  19060. height: this._zoom.size - this._handleSize * 2,
  19061. color: this.zoomOption.fillerColor,
  19062. text: '::',
  19063. textPosition: 'inside'
  19064. };
  19065. }
  19066. this._fillerShae.highlightStyle = {
  19067. brushType: 'fill',
  19068. color: 'rgba(0,0,0,0)'
  19069. };
  19070. this._fillerShae = new RectangleShape(this._fillerShae);
  19071. this.shapeList.push(this._fillerShae);
  19072. },
  19073. _buildHandle: function () {
  19074. var detail = this.zoomOption.showDetail ? this._getDetail() : {
  19075. start: '',
  19076. end: ''
  19077. };
  19078. this._startShape = {
  19079. zlevel: this.getZlevelBase(),
  19080. z: this.getZBase(),
  19081. draggable: true,
  19082. style: {
  19083. iconType: 'rectangle',
  19084. x: this._location.x,
  19085. y: this._location.y,
  19086. width: this._handleSize,
  19087. height: this._handleSize,
  19088. color: this.zoomOption.handleColor,
  19089. text: '=',
  19090. textPosition: 'inside'
  19091. },
  19092. highlightStyle: {
  19093. text: detail.start,
  19094. brushType: 'fill',
  19095. textPosition: 'left'
  19096. },
  19097. ondrift: this._ondrift,
  19098. ondragend: this._ondragend
  19099. };
  19100. if (this.zoomOption.orient == 'horizontal') {
  19101. this._startShape.style.height = this._location.height;
  19102. this._endShape = zrUtil.clone(this._startShape);
  19103. this._startShape.style.x = this._fillerShae.style.x - this._handleSize, this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
  19104. this._endShape.highlightStyle.text = detail.end;
  19105. this._endShape.highlightStyle.textPosition = 'right';
  19106. } else {
  19107. this._startShape.style.width = this._location.width;
  19108. this._endShape = zrUtil.clone(this._startShape);
  19109. this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
  19110. this._startShape.highlightStyle.textPosition = 'bottom';
  19111. this._endShape.style.y = this._fillerShae.style.y - this._handleSize;
  19112. this._endShape.highlightStyle.text = detail.end;
  19113. this._endShape.highlightStyle.textPosition = 'top';
  19114. }
  19115. this._startShape = new IconShape(this._startShape);
  19116. this._endShape = new IconShape(this._endShape);
  19117. this.shapeList.push(this._startShape);
  19118. this.shapeList.push(this._endShape);
  19119. },
  19120. _buildFrame: function () {
  19121. var x = this.subPixelOptimize(this._location.x, 1);
  19122. var y = this.subPixelOptimize(this._location.y, 1);
  19123. this._startFrameShape = {
  19124. zlevel: this.getZlevelBase(),
  19125. z: this.getZBase(),
  19126. hoverable: false,
  19127. style: {
  19128. x: x,
  19129. y: y,
  19130. width: this._location.width - (x > this._location.x ? 1 : 0),
  19131. height: this._location.height - (y > this._location.y ? 1 : 0),
  19132. lineWidth: 1,
  19133. brushType: 'stroke',
  19134. strokeColor: this.zoomOption.handleColor
  19135. }
  19136. };
  19137. this._endFrameShape = zrUtil.clone(this._startFrameShape);
  19138. this._startFrameShape = new RectangleShape(this._startFrameShape);
  19139. this._endFrameShape = new RectangleShape(this._endFrameShape);
  19140. this.shapeList.push(this._startFrameShape);
  19141. this.shapeList.push(this._endFrameShape);
  19142. return;
  19143. },
  19144. _syncHandleShape: function () {
  19145. if (this.zoomOption.orient == 'horizontal') {
  19146. this._startShape.style.x = this._fillerShae.style.x - this._handleSize;
  19147. this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
  19148. this._zoom.start = (this._startShape.style.x - this._location.x) / this._location.width * 100;
  19149. this._zoom.end = (this._endShape.style.x + this._handleSize - this._location.x) / this._location.width * 100;
  19150. } else {
  19151. this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
  19152. this._endShape.style.y = this._fillerShae.style.y - this._handleSize;
  19153. this._zoom.start = (this._location.y + this._location.height - this._startShape.style.y) / this._location.height * 100;
  19154. this._zoom.end = (this._location.y + this._location.height - this._endShape.style.y - this._handleSize) / this._location.height * 100;
  19155. }
  19156. this.zr.modShape(this._startShape.id);
  19157. this.zr.modShape(this._endShape.id);
  19158. this._syncFrameShape();
  19159. this.zr.refreshNextFrame();
  19160. },
  19161. _syncFillerShape: function () {
  19162. var a;
  19163. var b;
  19164. if (this.zoomOption.orient == 'horizontal') {
  19165. a = this._startShape.style.x;
  19166. b = this._endShape.style.x;
  19167. this._fillerShae.style.x = Math.min(a, b) + this._handleSize;
  19168. this._fillerShae.style.width = Math.abs(a - b) - this._handleSize;
  19169. this._zoom.start = (Math.min(a, b) - this._location.x) / this._location.width * 100;
  19170. this._zoom.end = (Math.max(a, b) + this._handleSize - this._location.x) / this._location.width * 100;
  19171. } else {
  19172. a = this._startShape.style.y;
  19173. b = this._endShape.style.y;
  19174. this._fillerShae.style.y = Math.min(a, b) + this._handleSize;
  19175. this._fillerShae.style.height = Math.abs(a - b) - this._handleSize;
  19176. this._zoom.start = (this._location.y + this._location.height - Math.max(a, b)) / this._location.height * 100;
  19177. this._zoom.end = (this._location.y + this._location.height - Math.min(a, b) - this._handleSize) / this._location.height * 100;
  19178. }
  19179. this.zr.modShape(this._fillerShae.id);
  19180. this._syncFrameShape();
  19181. this.zr.refreshNextFrame();
  19182. },
  19183. _syncFrameShape: function () {
  19184. if (this.zoomOption.orient == 'horizontal') {
  19185. this._startFrameShape.style.width = this._fillerShae.style.x - this._location.x;
  19186. this._endFrameShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
  19187. this._endFrameShape.style.width = this._location.x + this._location.width - this._endFrameShape.style.x;
  19188. } else {
  19189. this._startFrameShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
  19190. this._startFrameShape.style.height = this._location.y + this._location.height - this._startFrameShape.style.y;
  19191. this._endFrameShape.style.height = this._fillerShae.style.y - this._location.y;
  19192. }
  19193. this.zr.modShape(this._startFrameShape.id);
  19194. this.zr.modShape(this._endFrameShape.id);
  19195. },
  19196. _syncShape: function () {
  19197. if (!this.zoomOption.show) {
  19198. return;
  19199. }
  19200. if (this.zoomOption.orient == 'horizontal') {
  19201. this._startShape.style.x = this._location.x + this._zoom.start / 100 * this._location.width;
  19202. this._endShape.style.x = this._location.x + this._zoom.end / 100 * this._location.width - this._handleSize;
  19203. this._fillerShae.style.x = this._startShape.style.x + this._handleSize;
  19204. this._fillerShae.style.width = this._endShape.style.x - this._startShape.style.x - this._handleSize;
  19205. } else {
  19206. this._startShape.style.y = this._location.y + this._location.height - this._zoom.start / 100 * this._location.height;
  19207. this._endShape.style.y = this._location.y + this._location.height - this._zoom.end / 100 * this._location.height - this._handleSize;
  19208. this._fillerShae.style.y = this._endShape.style.y + this._handleSize;
  19209. this._fillerShae.style.height = this._startShape.style.y - this._endShape.style.y - this._handleSize;
  19210. }
  19211. this.zr.modShape(this._startShape.id);
  19212. this.zr.modShape(this._endShape.id);
  19213. this.zr.modShape(this._fillerShae.id);
  19214. this._syncFrameShape();
  19215. this.zr.refresh();
  19216. },
  19217. _syncData: function (dispatchNow) {
  19218. var target;
  19219. var start;
  19220. var end;
  19221. var length;
  19222. var data;
  19223. for (var key in this._originalData) {
  19224. target = this._originalData[key];
  19225. for (var idx in target) {
  19226. data = target[idx];
  19227. if (data == null) {
  19228. continue;
  19229. }
  19230. length = data.length;
  19231. start = Math.floor(this._zoom.start / 100 * length);
  19232. end = Math.ceil(this._zoom.end / 100 * length);
  19233. if (!(this.getDataFromOption(data[0]) instanceof Array) || this.option[key][idx].type == ecConfig.CHART_TYPE_K) {
  19234. this.option[key][idx].data = data.slice(start, end);
  19235. } else {
  19236. this._setScale();
  19237. this.option[key][idx].data = this._synScatterData(idx, data);
  19238. }
  19239. }
  19240. }
  19241. if (!this._isSilence && (this.zoomOption.realtime || dispatchNow)) {
  19242. this.messageCenter.dispatch(ecConfig.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart);
  19243. }
  19244. },
  19245. _synScatterData: function (seriesIndex, data) {
  19246. if (this._zoom.start === 0 && this._zoom.end == 100 && this._zoom.start2 === 0 && this._zoom.end2 == 100) {
  19247. return data;
  19248. }
  19249. var newData = [];
  19250. var scale = this._zoom.scatterMap[seriesIndex];
  19251. var total;
  19252. var xStart;
  19253. var xEnd;
  19254. var yStart;
  19255. var yEnd;
  19256. if (this.zoomOption.orient == 'horizontal') {
  19257. total = scale.x.max - scale.x.min;
  19258. xStart = this._zoom.start / 100 * total + scale.x.min;
  19259. xEnd = this._zoom.end / 100 * total + scale.x.min;
  19260. total = scale.y.max - scale.y.min;
  19261. yStart = this._zoom.start2 / 100 * total + scale.y.min;
  19262. yEnd = this._zoom.end2 / 100 * total + scale.y.min;
  19263. } else {
  19264. total = scale.x.max - scale.x.min;
  19265. xStart = this._zoom.start2 / 100 * total + scale.x.min;
  19266. xEnd = this._zoom.end2 / 100 * total + scale.x.min;
  19267. total = scale.y.max - scale.y.min;
  19268. yStart = this._zoom.start / 100 * total + scale.y.min;
  19269. yEnd = this._zoom.end / 100 * total + scale.y.min;
  19270. }
  19271. var value;
  19272. for (var i = 0, l = data.length; i < l; i++) {
  19273. value = data[i].value || data[i];
  19274. if (value[0] >= xStart && value[0] <= xEnd && value[1] >= yStart && value[1] <= yEnd) {
  19275. newData.push(data[i]);
  19276. }
  19277. }
  19278. return newData;
  19279. },
  19280. _setScale: function () {
  19281. var needScale = this._zoom.start !== 0 || this._zoom.end !== 100 || this._zoom.start2 !== 0 || this._zoom.end2 !== 100;
  19282. var axis = {
  19283. xAxis: this.option.xAxis,
  19284. yAxis: this.option.yAxis
  19285. };
  19286. for (var key in axis) {
  19287. for (var i = 0, l = axis[key].length; i < l; i++) {
  19288. axis[key][i].scale = needScale || axis[key][i]._scale;
  19289. }
  19290. }
  19291. },
  19292. _backupScale: function () {
  19293. var axis = {
  19294. xAxis: this.option.xAxis,
  19295. yAxis: this.option.yAxis
  19296. };
  19297. for (var key in axis) {
  19298. for (var i = 0, l = axis[key].length; i < l; i++) {
  19299. axis[key][i]._scale = axis[key][i].scale;
  19300. }
  19301. }
  19302. },
  19303. _getDetail: function () {
  19304. var key = [
  19305. 'xAxis',
  19306. 'yAxis'
  19307. ];
  19308. for (var i = 0, l = key.length; i < l; i++) {
  19309. var target = this._originalData[key[i]];
  19310. for (var idx in target) {
  19311. var data = target[idx];
  19312. if (data == null) {
  19313. continue;
  19314. }
  19315. var length = data.length;
  19316. var start = Math.floor(this._zoom.start / 100 * length);
  19317. var end = Math.ceil(this._zoom.end / 100 * length);
  19318. end -= end > 0 ? 1 : 0;
  19319. return {
  19320. start: this.getDataFromOption(data[start]),
  19321. end: this.getDataFromOption(data[end])
  19322. };
  19323. }
  19324. }
  19325. key = this.zoomOption.orient == 'horizontal' ? 'xAxis' : 'yAxis';
  19326. var seriesIndex = this._zoom.seriesIndex[0];
  19327. var axisIndex = this.option.series[seriesIndex][key + 'Index'] || 0;
  19328. var axisType = this.option[key][axisIndex].type;
  19329. var min = this._zoom.scatterMap[seriesIndex][key.charAt(0)].min;
  19330. var max = this._zoom.scatterMap[seriesIndex][key.charAt(0)].max;
  19331. var gap = max - min;
  19332. if (axisType == 'value') {
  19333. return {
  19334. start: min + gap * this._zoom.start / 100,
  19335. end: min + gap * this._zoom.end / 100
  19336. };
  19337. } else if (axisType == 'time') {
  19338. max = min + gap * this._zoom.end / 100;
  19339. min = min + gap * this._zoom.start / 100;
  19340. var formatter = ecDate.getAutoFormatter(min, max).formatter;
  19341. return {
  19342. start: ecDate.format(formatter, min),
  19343. end: ecDate.format(formatter, max)
  19344. };
  19345. }
  19346. return {
  19347. start: '',
  19348. end: ''
  19349. };
  19350. },
  19351. __ondrift: function (shape, dx, dy) {
  19352. if (this.zoomOption.zoomLock) {
  19353. shape = this._fillerShae;
  19354. }
  19355. var detailSize = shape._type == 'filler' ? this._handleSize : 0;
  19356. if (this.zoomOption.orient == 'horizontal') {
  19357. if (shape.style.x + dx - detailSize <= this._location.x) {
  19358. shape.style.x = this._location.x + detailSize;
  19359. } else if (shape.style.x + dx + shape.style.width + detailSize >= this._location.x + this._location.width) {
  19360. shape.style.x = this._location.x + this._location.width - shape.style.width - detailSize;
  19361. } else {
  19362. shape.style.x += dx;
  19363. }
  19364. } else {
  19365. if (shape.style.y + dy - detailSize <= this._location.y) {
  19366. shape.style.y = this._location.y + detailSize;
  19367. } else if (shape.style.y + dy + shape.style.height + detailSize >= this._location.y + this._location.height) {
  19368. shape.style.y = this._location.y + this._location.height - shape.style.height - detailSize;
  19369. } else {
  19370. shape.style.y += dy;
  19371. }
  19372. }
  19373. if (shape._type == 'filler') {
  19374. this._syncHandleShape();
  19375. } else {
  19376. this._syncFillerShape();
  19377. }
  19378. if (this.zoomOption.realtime) {
  19379. this._syncData();
  19380. }
  19381. if (this.zoomOption.showDetail) {
  19382. var detail = this._getDetail();
  19383. this._startShape.style.text = this._startShape.highlightStyle.text = detail.start;
  19384. this._endShape.style.text = this._endShape.highlightStyle.text = detail.end;
  19385. this._startShape.style.textPosition = this._startShape.highlightStyle.textPosition;
  19386. this._endShape.style.textPosition = this._endShape.highlightStyle.textPosition;
  19387. }
  19388. return true;
  19389. },
  19390. __ondragend: function () {
  19391. if (this.zoomOption.showDetail) {
  19392. this._startShape.style.text = this._endShape.style.text = '=';
  19393. this._startShape.style.textPosition = this._endShape.style.textPosition = 'inside';
  19394. this.zr.modShape(this._startShape.id);
  19395. this.zr.modShape(this._endShape.id);
  19396. this.zr.refreshNextFrame();
  19397. }
  19398. this.isDragend = true;
  19399. },
  19400. ondragend: function (param, status) {
  19401. if (!this.isDragend || !param.target) {
  19402. return;
  19403. }
  19404. !this.zoomOption.realtime && this._syncData();
  19405. status.dragOut = true;
  19406. status.dragIn = true;
  19407. if (!this._isSilence && !this.zoomOption.realtime) {
  19408. this.messageCenter.dispatch(ecConfig.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart);
  19409. }
  19410. status.needRefresh = false;
  19411. this.isDragend = false;
  19412. return;
  19413. },
  19414. ondataZoom: function (param, status) {
  19415. status.needRefresh = true;
  19416. return;
  19417. },
  19418. absoluteZoom: function (param) {
  19419. this._zoom.start = param.start;
  19420. this._zoom.end = param.end;
  19421. this._zoom.start2 = param.start2;
  19422. this._zoom.end2 = param.end2;
  19423. this._syncShape();
  19424. this._syncData(true);
  19425. return;
  19426. },
  19427. rectZoom: function (param) {
  19428. if (!param) {
  19429. this._zoom.start = this._zoom.start2 = 0;
  19430. this._zoom.end = this._zoom.end2 = 100;
  19431. this._syncShape();
  19432. this._syncData(true);
  19433. return this._zoom;
  19434. }
  19435. var gridArea = this.component.grid.getArea();
  19436. var rect = {
  19437. x: param.x,
  19438. y: param.y,
  19439. width: param.width,
  19440. height: param.height
  19441. };
  19442. if (rect.width < 0) {
  19443. rect.x += rect.width;
  19444. rect.width = -rect.width;
  19445. }
  19446. if (rect.height < 0) {
  19447. rect.y += rect.height;
  19448. rect.height = -rect.height;
  19449. }
  19450. if (rect.x > gridArea.x + gridArea.width || rect.y > gridArea.y + gridArea.height) {
  19451. return false;
  19452. }
  19453. if (rect.x < gridArea.x) {
  19454. rect.x = gridArea.x;
  19455. }
  19456. if (rect.x + rect.width > gridArea.x + gridArea.width) {
  19457. rect.width = gridArea.x + gridArea.width - rect.x;
  19458. }
  19459. if (rect.y + rect.height > gridArea.y + gridArea.height) {
  19460. rect.height = gridArea.y + gridArea.height - rect.y;
  19461. }
  19462. var total;
  19463. var sdx = (rect.x - gridArea.x) / gridArea.width;
  19464. var edx = 1 - (rect.x + rect.width - gridArea.x) / gridArea.width;
  19465. var sdy = 1 - (rect.y + rect.height - gridArea.y) / gridArea.height;
  19466. var edy = (rect.y - gridArea.y) / gridArea.height;
  19467. if (this.zoomOption.orient == 'horizontal') {
  19468. total = this._zoom.end - this._zoom.start;
  19469. this._zoom.start += total * sdx;
  19470. this._zoom.end -= total * edx;
  19471. total = this._zoom.end2 - this._zoom.start2;
  19472. this._zoom.start2 += total * sdy;
  19473. this._zoom.end2 -= total * edy;
  19474. } else {
  19475. total = this._zoom.end - this._zoom.start;
  19476. this._zoom.start += total * sdy;
  19477. this._zoom.end -= total * edy;
  19478. total = this._zoom.end2 - this._zoom.start2;
  19479. this._zoom.start2 += total * sdx;
  19480. this._zoom.end2 -= total * edx;
  19481. }
  19482. this._syncShape();
  19483. this._syncData(true);
  19484. return this._zoom;
  19485. },
  19486. syncBackupData: function (curOption) {
  19487. var start;
  19488. var target = this._originalData['series'];
  19489. var curSeries = curOption.series;
  19490. var curData;
  19491. for (var i = 0, l = curSeries.length; i < l; i++) {
  19492. curData = curSeries[i].data || curSeries[i].eventList;
  19493. if (target[i]) {
  19494. start = Math.floor(this._zoom.start / 100 * target[i].length);
  19495. } else {
  19496. start = 0;
  19497. }
  19498. for (var j = 0, k = curData.length; j < k; j++) {
  19499. if (target[i]) {
  19500. target[i][j + start] = curData[j];
  19501. }
  19502. }
  19503. }
  19504. },
  19505. syncOption: function (magicOption) {
  19506. this.silence(true);
  19507. this.option = magicOption;
  19508. this.option.dataZoom = this.reformOption(this.option.dataZoom);
  19509. this.zoomOption = this.option.dataZoom;
  19510. if (!this.myChart.canvasSupported) {
  19511. this.zoomOption.realtime = false;
  19512. }
  19513. this.clear();
  19514. this._location = this._getLocation();
  19515. this._zoom = this._getZoom();
  19516. this._backupData();
  19517. if (this.option.dataZoom && this.option.dataZoom.show) {
  19518. this._buildShape();
  19519. }
  19520. this._syncData();
  19521. this.silence(false);
  19522. },
  19523. silence: function (s) {
  19524. this._isSilence = s;
  19525. },
  19526. getRealDataIndex: function (sIdx, dIdx) {
  19527. if (!this._originalData || this._zoom.start === 0 && this._zoom.end == 100) {
  19528. return dIdx;
  19529. }
  19530. var sreies = this._originalData.series;
  19531. if (sreies[sIdx]) {
  19532. return Math.floor(this._zoom.start / 100 * sreies[sIdx].length) + dIdx;
  19533. }
  19534. return -1;
  19535. },
  19536. resize: function () {
  19537. this.clear();
  19538. this._location = this._getLocation();
  19539. this._zoom = this._getZoom();
  19540. if (this.option.dataZoom.show) {
  19541. this._buildShape();
  19542. }
  19543. }
  19544. };
  19545. zrUtil.inherits(DataZoom, Base);
  19546. require('../component').define('dataZoom', DataZoom);
  19547. return DataZoom;
  19548. });define('echarts/component/categoryAxis', [
  19549. 'require',
  19550. './base',
  19551. 'zrender/shape/Text',
  19552. 'zrender/shape/Line',
  19553. 'zrender/shape/Rectangle',
  19554. '../config',
  19555. 'zrender/tool/util',
  19556. 'zrender/tool/area',
  19557. '../component'
  19558. ], function (require) {
  19559. var Base = require('./base');
  19560. var TextShape = require('zrender/shape/Text');
  19561. var LineShape = require('zrender/shape/Line');
  19562. var RectangleShape = require('zrender/shape/Rectangle');
  19563. var ecConfig = require('../config');
  19564. ecConfig.categoryAxis = {
  19565. zlevel: 0,
  19566. z: 0,
  19567. show: true,
  19568. position: 'bottom',
  19569. name: '',
  19570. nameLocation: 'end',
  19571. nameTextStyle: {},
  19572. boundaryGap: true,
  19573. axisLine: {
  19574. show: true,
  19575. onZero: true,
  19576. lineStyle: {
  19577. color: '#48b',
  19578. width: 2,
  19579. type: 'solid'
  19580. }
  19581. },
  19582. axisTick: {
  19583. show: true,
  19584. interval: 'auto',
  19585. inside: false,
  19586. length: 5,
  19587. lineStyle: {
  19588. color: '#333',
  19589. width: 1
  19590. }
  19591. },
  19592. axisLabel: {
  19593. show: true,
  19594. interval: 'auto',
  19595. rotate: 0,
  19596. margin: 8,
  19597. textStyle: { color: '#333' }
  19598. },
  19599. splitLine: {
  19600. show: true,
  19601. lineStyle: {
  19602. color: ['#ccc'],
  19603. width: 1,
  19604. type: 'solid'
  19605. }
  19606. },
  19607. splitArea: {
  19608. show: false,
  19609. areaStyle: {
  19610. color: [
  19611. 'rgba(250,250,250,0.3)',
  19612. 'rgba(200,200,200,0.3)'
  19613. ]
  19614. }
  19615. }
  19616. };
  19617. var zrUtil = require('zrender/tool/util');
  19618. var zrArea = require('zrender/tool/area');
  19619. function CategoryAxis(ecTheme, messageCenter, zr, option, myChart, axisBase) {
  19620. if (option.data.length < 1) {
  19621. console.error('option.data.length < 1.');
  19622. return;
  19623. }
  19624. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  19625. this.grid = this.component.grid;
  19626. for (var method in axisBase) {
  19627. this[method] = axisBase[method];
  19628. }
  19629. this.refresh(option);
  19630. }
  19631. CategoryAxis.prototype = {
  19632. type: ecConfig.COMPONENT_TYPE_AXIS_CATEGORY,
  19633. _getReformedLabel: function (idx) {
  19634. var data = this.getDataFromOption(this.option.data[idx]);
  19635. var formatter = this.option.data[idx].formatter || this.option.axisLabel.formatter;
  19636. if (formatter) {
  19637. if (typeof formatter == 'function') {
  19638. data = formatter.call(this.myChart, data);
  19639. } else if (typeof formatter == 'string') {
  19640. data = formatter.replace('{value}', data);
  19641. }
  19642. }
  19643. return data;
  19644. },
  19645. _getInterval: function () {
  19646. var interval = this.option.axisLabel.interval;
  19647. if (interval == 'auto') {
  19648. var fontSize = this.option.axisLabel.textStyle.fontSize;
  19649. var data = this.option.data;
  19650. var dataLength = this.option.data.length;
  19651. if (this.isHorizontal()) {
  19652. if (dataLength > 3) {
  19653. var gap = this.getGap();
  19654. var isEnough = false;
  19655. var labelSpace;
  19656. var labelSize;
  19657. var step = Math.floor(0.5 / gap);
  19658. step = step < 1 ? 1 : step;
  19659. interval = Math.floor(15 / gap);
  19660. while (!isEnough && interval < dataLength) {
  19661. interval += step;
  19662. isEnough = true;
  19663. labelSpace = Math.floor(gap * interval);
  19664. for (var i = Math.floor((dataLength - 1) / interval) * interval; i >= 0; i -= interval) {
  19665. if (this.option.axisLabel.rotate !== 0) {
  19666. labelSize = fontSize;
  19667. } else if (data[i].textStyle) {
  19668. labelSize = zrArea.getTextWidth(this._getReformedLabel(i), this.getFont(zrUtil.merge(data[i].textStyle, this.option.axisLabel.textStyle)));
  19669. } else {
  19670. var label = this._getReformedLabel(i) + '';
  19671. var wLen = (label.match(/\w/g) || '').length;
  19672. var oLen = label.length - wLen;
  19673. labelSize = wLen * fontSize * 2 / 3 + oLen * fontSize;
  19674. }
  19675. if (labelSpace < labelSize) {
  19676. isEnough = false;
  19677. break;
  19678. }
  19679. }
  19680. }
  19681. } else {
  19682. interval = 1;
  19683. }
  19684. } else {
  19685. if (dataLength > 3) {
  19686. var gap = this.getGap();
  19687. interval = Math.floor(11 / gap);
  19688. while (gap * interval - 6 < fontSize && interval < dataLength) {
  19689. interval++;
  19690. }
  19691. } else {
  19692. interval = 1;
  19693. }
  19694. }
  19695. } else {
  19696. interval = typeof interval == 'function' ? 1 : interval - 0 + 1;
  19697. }
  19698. return interval;
  19699. },
  19700. _buildShape: function () {
  19701. this._interval = this._getInterval();
  19702. if (!this.option.show) {
  19703. return;
  19704. }
  19705. this.option.splitArea.show && this._buildSplitArea();
  19706. this.option.splitLine.show && this._buildSplitLine();
  19707. this.option.axisLine.show && this._buildAxisLine();
  19708. this.option.axisTick.show && this._buildAxisTick();
  19709. this.option.axisLabel.show && this._buildAxisLabel();
  19710. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  19711. this.zr.addShape(this.shapeList[i]);
  19712. }
  19713. },
  19714. _buildAxisTick: function () {
  19715. var axShape;
  19716. var data = this.option.data;
  19717. var dataLength = this.option.data.length;
  19718. var tickOption = this.option.axisTick;
  19719. var length = tickOption.length;
  19720. var color = tickOption.lineStyle.color;
  19721. var lineWidth = tickOption.lineStyle.width;
  19722. var intervalFunction = typeof tickOption.interval == 'function' ? tickOption.interval : tickOption.interval == 'auto' ? typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false : false;
  19723. var interval = intervalFunction ? 1 : tickOption.interval == 'auto' ? this._interval : tickOption.interval - 0 + 1;
  19724. var onGap = tickOption.onGap;
  19725. var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
  19726. var startIndex = optGap > 0 ? -interval : 0;
  19727. if (this.isHorizontal()) {
  19728. 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;
  19729. var x;
  19730. for (var i = startIndex; i < dataLength; i += interval) {
  19731. if (intervalFunction && !intervalFunction(i, data[i])) {
  19732. continue;
  19733. }
  19734. x = this.subPixelOptimize(this.getCoordByIndex(i) + (i >= 0 ? optGap : 0), lineWidth);
  19735. axShape = {
  19736. _axisShape: 'axisTick',
  19737. zlevel: this.getZlevelBase(),
  19738. z: this.getZBase(),
  19739. hoverable: false,
  19740. style: {
  19741. xStart: x,
  19742. yStart: yPosition,
  19743. xEnd: x,
  19744. yEnd: yPosition + length,
  19745. strokeColor: color,
  19746. lineWidth: lineWidth
  19747. }
  19748. };
  19749. this.shapeList.push(new LineShape(axShape));
  19750. }
  19751. } else {
  19752. 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;
  19753. var y;
  19754. for (var i = startIndex; i < dataLength; i += interval) {
  19755. if (intervalFunction && !intervalFunction(i, data[i])) {
  19756. continue;
  19757. }
  19758. y = this.subPixelOptimize(this.getCoordByIndex(i) - (i >= 0 ? optGap : 0), lineWidth);
  19759. axShape = {
  19760. _axisShape: 'axisTick',
  19761. zlevel: this.getZlevelBase(),
  19762. z: this.getZBase(),
  19763. hoverable: false,
  19764. style: {
  19765. xStart: xPosition,
  19766. yStart: y,
  19767. xEnd: xPosition + length,
  19768. yEnd: y,
  19769. strokeColor: color,
  19770. lineWidth: lineWidth
  19771. }
  19772. };
  19773. this.shapeList.push(new LineShape(axShape));
  19774. }
  19775. }
  19776. },
  19777. _buildAxisLabel: function () {
  19778. var axShape;
  19779. var data = this.option.data;
  19780. var dataLength = this.option.data.length;
  19781. var labelOption = this.option.axisLabel;
  19782. var rotate = labelOption.rotate;
  19783. var margin = labelOption.margin;
  19784. var clickable = labelOption.clickable;
  19785. var textStyle = labelOption.textStyle;
  19786. var intervalFunction = typeof labelOption.interval == 'function' ? labelOption.interval : false;
  19787. var dataTextStyle;
  19788. if (this.isHorizontal()) {
  19789. var yPosition;
  19790. var baseLine;
  19791. if (this.option.position == 'bottom') {
  19792. yPosition = this.grid.getYend() + margin;
  19793. baseLine = 'top';
  19794. } else {
  19795. yPosition = this.grid.getY() - margin;
  19796. baseLine = 'bottom';
  19797. }
  19798. for (var i = 0; i < dataLength; i += this._interval) {
  19799. if (intervalFunction && !intervalFunction(i, data[i]) || this._getReformedLabel(i) === '') {
  19800. continue;
  19801. }
  19802. dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
  19803. axShape = {
  19804. zlevel: this.getZlevelBase(),
  19805. z: this.getZBase() + 3,
  19806. hoverable: false,
  19807. style: {
  19808. x: this.getCoordByIndex(i),
  19809. y: yPosition,
  19810. color: dataTextStyle.color,
  19811. text: this._getReformedLabel(i),
  19812. textFont: this.getFont(dataTextStyle),
  19813. textAlign: dataTextStyle.align || 'center',
  19814. textBaseline: dataTextStyle.baseline || baseLine
  19815. }
  19816. };
  19817. if (rotate) {
  19818. axShape.style.textAlign = rotate > 0 ? this.option.position == 'bottom' ? 'right' : 'left' : this.option.position == 'bottom' ? 'left' : 'right';
  19819. axShape.rotation = [
  19820. rotate * Math.PI / 180,
  19821. axShape.style.x,
  19822. axShape.style.y
  19823. ];
  19824. }
  19825. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  19826. }
  19827. } else {
  19828. var xPosition;
  19829. var align;
  19830. if (this.option.position == 'left') {
  19831. xPosition = this.grid.getX() - margin;
  19832. align = 'right';
  19833. } else {
  19834. xPosition = this.grid.getXend() + margin;
  19835. align = 'left';
  19836. }
  19837. for (var i = 0; i < dataLength; i += this._interval) {
  19838. if (intervalFunction && !intervalFunction(i, data[i]) || this._getReformedLabel(i) === '') {
  19839. continue;
  19840. }
  19841. dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
  19842. axShape = {
  19843. zlevel: this.getZlevelBase(),
  19844. z: this.getZBase() + 3,
  19845. hoverable: false,
  19846. style: {
  19847. x: xPosition,
  19848. y: this.getCoordByIndex(i),
  19849. color: dataTextStyle.color,
  19850. text: this._getReformedLabel(i),
  19851. textFont: this.getFont(dataTextStyle),
  19852. textAlign: dataTextStyle.align || align,
  19853. textBaseline: dataTextStyle.baseline || i === 0 && this.option.name !== '' ? 'bottom' : i == dataLength - 1 && this.option.name !== '' ? 'top' : 'middle'
  19854. }
  19855. };
  19856. if (rotate) {
  19857. axShape.rotation = [
  19858. rotate * Math.PI / 180,
  19859. axShape.style.x,
  19860. axShape.style.y
  19861. ];
  19862. }
  19863. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  19864. }
  19865. }
  19866. },
  19867. _buildSplitLine: function () {
  19868. var axShape;
  19869. var data = this.option.data;
  19870. var dataLength = this.option.data.length;
  19871. var sLineOption = this.option.splitLine;
  19872. var lineType = sLineOption.lineStyle.type;
  19873. var lineWidth = sLineOption.lineStyle.width;
  19874. var color = sLineOption.lineStyle.color;
  19875. color = color instanceof Array ? color : [color];
  19876. var colorLength = color.length;
  19877. var intervalFunction = typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false;
  19878. var onGap = sLineOption.onGap;
  19879. var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
  19880. dataLength -= onGap || typeof onGap == 'undefined' && this.option.boundaryGap ? 1 : 0;
  19881. if (this.isHorizontal()) {
  19882. var sy = this.grid.getY();
  19883. var ey = this.grid.getYend();
  19884. var x;
  19885. for (var i = 0; i < dataLength; i += this._interval) {
  19886. if (intervalFunction && !intervalFunction(i, data[i])) {
  19887. continue;
  19888. }
  19889. x = this.subPixelOptimize(this.getCoordByIndex(i) + optGap, lineWidth);
  19890. axShape = {
  19891. zlevel: this.getZlevelBase(),
  19892. z: this.getZBase(),
  19893. hoverable: false,
  19894. style: {
  19895. xStart: x,
  19896. yStart: sy,
  19897. xEnd: x,
  19898. yEnd: ey,
  19899. strokeColor: color[i / this._interval % colorLength],
  19900. lineType: lineType,
  19901. lineWidth: lineWidth
  19902. }
  19903. };
  19904. this.shapeList.push(new LineShape(axShape));
  19905. }
  19906. } else {
  19907. var sx = this.grid.getX();
  19908. var ex = this.grid.getXend();
  19909. var y;
  19910. for (var i = 0; i < dataLength; i += this._interval) {
  19911. if (intervalFunction && !intervalFunction(i, data[i])) {
  19912. continue;
  19913. }
  19914. y = this.subPixelOptimize(this.getCoordByIndex(i) - optGap, lineWidth);
  19915. axShape = {
  19916. zlevel: this.getZlevelBase(),
  19917. z: this.getZBase(),
  19918. hoverable: false,
  19919. style: {
  19920. xStart: sx,
  19921. yStart: y,
  19922. xEnd: ex,
  19923. yEnd: y,
  19924. strokeColor: color[i / this._interval % colorLength],
  19925. lineType: lineType,
  19926. lineWidth: lineWidth
  19927. }
  19928. };
  19929. this.shapeList.push(new LineShape(axShape));
  19930. }
  19931. }
  19932. },
  19933. _buildSplitArea: function () {
  19934. var axShape;
  19935. var data = this.option.data;
  19936. var sAreaOption = this.option.splitArea;
  19937. var color = sAreaOption.areaStyle.color;
  19938. if (!(color instanceof Array)) {
  19939. axShape = {
  19940. zlevel: this.getZlevelBase(),
  19941. z: this.getZBase(),
  19942. hoverable: false,
  19943. style: {
  19944. x: this.grid.getX(),
  19945. y: this.grid.getY(),
  19946. width: this.grid.getWidth(),
  19947. height: this.grid.getHeight(),
  19948. color: color
  19949. }
  19950. };
  19951. this.shapeList.push(new RectangleShape(axShape));
  19952. } else {
  19953. var colorLength = color.length;
  19954. var dataLength = this.option.data.length;
  19955. var intervalFunction = typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false;
  19956. var onGap = sAreaOption.onGap;
  19957. var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
  19958. if (this.isHorizontal()) {
  19959. var y = this.grid.getY();
  19960. var height = this.grid.getHeight();
  19961. var lastX = this.grid.getX();
  19962. var curX;
  19963. for (var i = 0; i <= dataLength; i += this._interval) {
  19964. if (intervalFunction && !intervalFunction(i, data[i]) && i < dataLength) {
  19965. continue;
  19966. }
  19967. curX = i < dataLength ? this.getCoordByIndex(i) + optGap : this.grid.getXend();
  19968. axShape = {
  19969. zlevel: this.getZlevelBase(),
  19970. z: this.getZBase(),
  19971. hoverable: false,
  19972. style: {
  19973. x: lastX,
  19974. y: y,
  19975. width: curX - lastX,
  19976. height: height,
  19977. color: color[i / this._interval % colorLength]
  19978. }
  19979. };
  19980. this.shapeList.push(new RectangleShape(axShape));
  19981. lastX = curX;
  19982. }
  19983. } else {
  19984. var x = this.grid.getX();
  19985. var width = this.grid.getWidth();
  19986. var lastYend = this.grid.getYend();
  19987. var curY;
  19988. for (var i = 0; i <= dataLength; i += this._interval) {
  19989. if (intervalFunction && !intervalFunction(i, data[i]) && i < dataLength) {
  19990. continue;
  19991. }
  19992. curY = i < dataLength ? this.getCoordByIndex(i) - optGap : this.grid.getY();
  19993. axShape = {
  19994. zlevel: this.getZlevelBase(),
  19995. z: this.getZBase(),
  19996. hoverable: false,
  19997. style: {
  19998. x: x,
  19999. y: curY,
  20000. width: width,
  20001. height: lastYend - curY,
  20002. color: color[i / this._interval % colorLength]
  20003. }
  20004. };
  20005. this.shapeList.push(new RectangleShape(axShape));
  20006. lastYend = curY;
  20007. }
  20008. }
  20009. }
  20010. },
  20011. refresh: function (newOption) {
  20012. if (newOption) {
  20013. this.option = this.reformOption(newOption);
  20014. this.option.axisLabel.textStyle = this.getTextStyle(this.option.axisLabel.textStyle);
  20015. }
  20016. this.clear();
  20017. this._buildShape();
  20018. },
  20019. getGap: function () {
  20020. var dataLength = this.option.data.length;
  20021. var total = this.isHorizontal() ? this.grid.getWidth() : this.grid.getHeight();
  20022. if (this.option.boundaryGap) {
  20023. return total / dataLength;
  20024. } else {
  20025. return total / (dataLength > 1 ? dataLength - 1 : 1);
  20026. }
  20027. },
  20028. getCoord: function (value) {
  20029. var data = this.option.data;
  20030. var dataLength = data.length;
  20031. var gap = this.getGap();
  20032. var position = this.option.boundaryGap ? gap / 2 : 0;
  20033. for (var i = 0; i < dataLength; i++) {
  20034. if (this.getDataFromOption(data[i]) == value) {
  20035. if (this.isHorizontal()) {
  20036. position = this.grid.getX() + position;
  20037. } else {
  20038. position = this.grid.getYend() - position;
  20039. }
  20040. return position;
  20041. }
  20042. position += gap;
  20043. }
  20044. },
  20045. getCoordByIndex: function (dataIndex) {
  20046. if (dataIndex < 0) {
  20047. if (this.isHorizontal()) {
  20048. return this.grid.getX();
  20049. } else {
  20050. return this.grid.getYend();
  20051. }
  20052. } else if (dataIndex > this.option.data.length - 1) {
  20053. if (this.isHorizontal()) {
  20054. return this.grid.getXend();
  20055. } else {
  20056. return this.grid.getY();
  20057. }
  20058. } else {
  20059. var gap = this.getGap();
  20060. var position = this.option.boundaryGap ? gap / 2 : 0;
  20061. position += dataIndex * gap;
  20062. if (this.isHorizontal()) {
  20063. position = this.grid.getX() + position;
  20064. } else {
  20065. position = this.grid.getYend() - position;
  20066. }
  20067. return position;
  20068. }
  20069. },
  20070. getNameByIndex: function (dataIndex) {
  20071. return this.getDataFromOption(this.option.data[dataIndex]);
  20072. },
  20073. getIndexByName: function (name) {
  20074. var data = this.option.data;
  20075. var dataLength = data.length;
  20076. for (var i = 0; i < dataLength; i++) {
  20077. if (this.getDataFromOption(data[i]) == name) {
  20078. return i;
  20079. }
  20080. }
  20081. return -1;
  20082. },
  20083. getValueFromCoord: function () {
  20084. return '';
  20085. },
  20086. isMainAxis: function (dataIndex) {
  20087. return dataIndex % this._interval === 0;
  20088. }
  20089. };
  20090. zrUtil.inherits(CategoryAxis, Base);
  20091. require('../component').define('categoryAxis', CategoryAxis);
  20092. return CategoryAxis;
  20093. });define('echarts/component/valueAxis', [
  20094. 'require',
  20095. './base',
  20096. 'zrender/shape/Text',
  20097. 'zrender/shape/Line',
  20098. 'zrender/shape/Rectangle',
  20099. '../config',
  20100. '../util/date',
  20101. 'zrender/tool/util',
  20102. '../util/smartSteps',
  20103. '../util/accMath',
  20104. '../component'
  20105. ], function (require) {
  20106. var Base = require('./base');
  20107. var TextShape = require('zrender/shape/Text');
  20108. var LineShape = require('zrender/shape/Line');
  20109. var RectangleShape = require('zrender/shape/Rectangle');
  20110. var ecConfig = require('../config');
  20111. ecConfig.valueAxis = {
  20112. zlevel: 0,
  20113. z: 0,
  20114. show: true,
  20115. position: 'left',
  20116. name: '',
  20117. nameLocation: 'end',
  20118. nameTextStyle: {},
  20119. boundaryGap: [
  20120. 0,
  20121. 0
  20122. ],
  20123. axisLine: {
  20124. show: true,
  20125. onZero: true,
  20126. lineStyle: {
  20127. color: '#48b',
  20128. width: 2,
  20129. type: 'solid'
  20130. }
  20131. },
  20132. axisTick: {
  20133. show: false,
  20134. inside: false,
  20135. length: 5,
  20136. lineStyle: {
  20137. color: '#333',
  20138. width: 1
  20139. }
  20140. },
  20141. axisLabel: {
  20142. show: true,
  20143. rotate: 0,
  20144. margin: 8,
  20145. textStyle: { color: '#333' }
  20146. },
  20147. splitLine: {
  20148. show: true,
  20149. lineStyle: {
  20150. color: ['#ccc'],
  20151. width: 1,
  20152. type: 'solid'
  20153. }
  20154. },
  20155. splitArea: {
  20156. show: false,
  20157. areaStyle: {
  20158. color: [
  20159. 'rgba(250,250,250,0.3)',
  20160. 'rgba(200,200,200,0.3)'
  20161. ]
  20162. }
  20163. }
  20164. };
  20165. var ecDate = require('../util/date');
  20166. var zrUtil = require('zrender/tool/util');
  20167. function ValueAxis(ecTheme, messageCenter, zr, option, myChart, axisBase, series) {
  20168. if (!series || series.length === 0) {
  20169. console.err('option.series.length == 0.');
  20170. return;
  20171. }
  20172. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  20173. this.series = series;
  20174. this.grid = this.component.grid;
  20175. for (var method in axisBase) {
  20176. this[method] = axisBase[method];
  20177. }
  20178. this.refresh(option, series);
  20179. }
  20180. ValueAxis.prototype = {
  20181. type: ecConfig.COMPONENT_TYPE_AXIS_VALUE,
  20182. _buildShape: function () {
  20183. this._hasData = false;
  20184. this._calculateValue();
  20185. if (!this._hasData || !this.option.show) {
  20186. return;
  20187. }
  20188. this.option.splitArea.show && this._buildSplitArea();
  20189. this.option.splitLine.show && this._buildSplitLine();
  20190. this.option.axisLine.show && this._buildAxisLine();
  20191. this.option.axisTick.show && this._buildAxisTick();
  20192. this.option.axisLabel.show && this._buildAxisLabel();
  20193. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  20194. this.zr.addShape(this.shapeList[i]);
  20195. }
  20196. },
  20197. _buildAxisTick: function () {
  20198. var axShape;
  20199. var data = this._valueList;
  20200. var dataLength = this._valueList.length;
  20201. var tickOption = this.option.axisTick;
  20202. var length = tickOption.length;
  20203. var color = tickOption.lineStyle.color;
  20204. var lineWidth = tickOption.lineStyle.width;
  20205. if (this.isHorizontal()) {
  20206. 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;
  20207. var x;
  20208. for (var i = 0; i < dataLength; i++) {
  20209. x = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20210. axShape = {
  20211. _axisShape: 'axisTick',
  20212. zlevel: this.getZlevelBase(),
  20213. z: this.getZBase(),
  20214. hoverable: false,
  20215. style: {
  20216. xStart: x,
  20217. yStart: yPosition,
  20218. xEnd: x,
  20219. yEnd: yPosition + length,
  20220. strokeColor: color,
  20221. lineWidth: lineWidth
  20222. }
  20223. };
  20224. this.shapeList.push(new LineShape(axShape));
  20225. }
  20226. } else {
  20227. 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;
  20228. var y;
  20229. for (var i = 0; i < dataLength; i++) {
  20230. y = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20231. axShape = {
  20232. _axisShape: 'axisTick',
  20233. zlevel: this.getZlevelBase(),
  20234. z: this.getZBase(),
  20235. hoverable: false,
  20236. style: {
  20237. xStart: xPosition,
  20238. yStart: y,
  20239. xEnd: xPosition + length,
  20240. yEnd: y,
  20241. strokeColor: color,
  20242. lineWidth: lineWidth
  20243. }
  20244. };
  20245. this.shapeList.push(new LineShape(axShape));
  20246. }
  20247. }
  20248. },
  20249. _buildAxisLabel: function () {
  20250. var axShape;
  20251. var data = this._valueList;
  20252. var dataLength = this._valueList.length;
  20253. var rotate = this.option.axisLabel.rotate;
  20254. var margin = this.option.axisLabel.margin;
  20255. var clickable = this.option.axisLabel.clickable;
  20256. var textStyle = this.option.axisLabel.textStyle;
  20257. if (this.isHorizontal()) {
  20258. var yPosition;
  20259. var baseLine;
  20260. if (this.option.position === 'bottom') {
  20261. yPosition = this.grid.getYend() + margin;
  20262. baseLine = 'top';
  20263. } else {
  20264. yPosition = this.grid.getY() - margin;
  20265. baseLine = 'bottom';
  20266. }
  20267. for (var i = 0; i < dataLength; i++) {
  20268. axShape = {
  20269. zlevel: this.getZlevelBase(),
  20270. z: this.getZBase() + 3,
  20271. hoverable: false,
  20272. style: {
  20273. x: this.getCoord(data[i]),
  20274. y: yPosition,
  20275. color: typeof textStyle.color === 'function' ? textStyle.color(data[i]) : textStyle.color,
  20276. text: this._valueLabel[i],
  20277. textFont: this.getFont(textStyle),
  20278. textAlign: textStyle.align || 'center',
  20279. textBaseline: textStyle.baseline || baseLine
  20280. }
  20281. };
  20282. if (rotate) {
  20283. axShape.style.textAlign = rotate > 0 ? this.option.position === 'bottom' ? 'right' : 'left' : this.option.position === 'bottom' ? 'left' : 'right';
  20284. axShape.rotation = [
  20285. rotate * Math.PI / 180,
  20286. axShape.style.x,
  20287. axShape.style.y
  20288. ];
  20289. }
  20290. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  20291. }
  20292. } else {
  20293. var xPosition;
  20294. var align;
  20295. if (this.option.position === 'left') {
  20296. xPosition = this.grid.getX() - margin;
  20297. align = 'right';
  20298. } else {
  20299. xPosition = this.grid.getXend() + margin;
  20300. align = 'left';
  20301. }
  20302. for (var i = 0; i < dataLength; i++) {
  20303. axShape = {
  20304. zlevel: this.getZlevelBase(),
  20305. z: this.getZBase() + 3,
  20306. hoverable: false,
  20307. style: {
  20308. x: xPosition,
  20309. y: this.getCoord(data[i]),
  20310. color: typeof textStyle.color === 'function' ? textStyle.color(data[i]) : textStyle.color,
  20311. text: this._valueLabel[i],
  20312. textFont: this.getFont(textStyle),
  20313. textAlign: textStyle.align || align,
  20314. textBaseline: textStyle.baseline || (i === 0 && this.option.name !== '' ? 'bottom' : i === dataLength - 1 && this.option.name !== '' ? 'top' : 'middle')
  20315. }
  20316. };
  20317. if (rotate) {
  20318. axShape.rotation = [
  20319. rotate * Math.PI / 180,
  20320. axShape.style.x,
  20321. axShape.style.y
  20322. ];
  20323. }
  20324. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  20325. }
  20326. }
  20327. },
  20328. _buildSplitLine: function () {
  20329. var axShape;
  20330. var data = this._valueList;
  20331. var dataLength = this._valueList.length;
  20332. var sLineOption = this.option.splitLine;
  20333. var lineType = sLineOption.lineStyle.type;
  20334. var lineWidth = sLineOption.lineStyle.width;
  20335. var color = sLineOption.lineStyle.color;
  20336. color = color instanceof Array ? color : [color];
  20337. var colorLength = color.length;
  20338. if (this.isHorizontal()) {
  20339. var sy = this.grid.getY();
  20340. var ey = this.grid.getYend();
  20341. var x;
  20342. for (var i = 0; i < dataLength; i++) {
  20343. x = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20344. axShape = {
  20345. zlevel: this.getZlevelBase(),
  20346. z: this.getZBase(),
  20347. hoverable: false,
  20348. style: {
  20349. xStart: x,
  20350. yStart: sy,
  20351. xEnd: x,
  20352. yEnd: ey,
  20353. strokeColor: color[i % colorLength],
  20354. lineType: lineType,
  20355. lineWidth: lineWidth
  20356. }
  20357. };
  20358. this.shapeList.push(new LineShape(axShape));
  20359. }
  20360. } else {
  20361. var sx = this.grid.getX();
  20362. var ex = this.grid.getXend();
  20363. var y;
  20364. for (var i = 0; i < dataLength; i++) {
  20365. y = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20366. axShape = {
  20367. zlevel: this.getZlevelBase(),
  20368. z: this.getZBase(),
  20369. hoverable: false,
  20370. style: {
  20371. xStart: sx,
  20372. yStart: y,
  20373. xEnd: ex,
  20374. yEnd: y,
  20375. strokeColor: color[i % colorLength],
  20376. lineType: lineType,
  20377. lineWidth: lineWidth
  20378. }
  20379. };
  20380. this.shapeList.push(new LineShape(axShape));
  20381. }
  20382. }
  20383. },
  20384. _buildSplitArea: function () {
  20385. var axShape;
  20386. var color = this.option.splitArea.areaStyle.color;
  20387. if (!(color instanceof Array)) {
  20388. axShape = {
  20389. zlevel: this.getZlevelBase(),
  20390. z: this.getZBase(),
  20391. hoverable: false,
  20392. style: {
  20393. x: this.grid.getX(),
  20394. y: this.grid.getY(),
  20395. width: this.grid.getWidth(),
  20396. height: this.grid.getHeight(),
  20397. color: color
  20398. }
  20399. };
  20400. this.shapeList.push(new RectangleShape(axShape));
  20401. } else {
  20402. var colorLength = color.length;
  20403. var data = this._valueList;
  20404. var dataLength = this._valueList.length;
  20405. if (this.isHorizontal()) {
  20406. var y = this.grid.getY();
  20407. var height = this.grid.getHeight();
  20408. var lastX = this.grid.getX();
  20409. var curX;
  20410. for (var i = 0; i <= dataLength; i++) {
  20411. curX = i < dataLength ? this.getCoord(data[i]) : this.grid.getXend();
  20412. axShape = {
  20413. zlevel: this.getZlevelBase(),
  20414. z: this.getZBase(),
  20415. hoverable: false,
  20416. style: {
  20417. x: lastX,
  20418. y: y,
  20419. width: curX - lastX,
  20420. height: height,
  20421. color: color[i % colorLength]
  20422. }
  20423. };
  20424. this.shapeList.push(new RectangleShape(axShape));
  20425. lastX = curX;
  20426. }
  20427. } else {
  20428. var x = this.grid.getX();
  20429. var width = this.grid.getWidth();
  20430. var lastYend = this.grid.getYend();
  20431. var curY;
  20432. for (var i = 0; i <= dataLength; i++) {
  20433. curY = i < dataLength ? this.getCoord(data[i]) : this.grid.getY();
  20434. axShape = {
  20435. zlevel: this.getZlevelBase(),
  20436. z: this.getZBase(),
  20437. hoverable: false,
  20438. style: {
  20439. x: x,
  20440. y: curY,
  20441. width: width,
  20442. height: lastYend - curY,
  20443. color: color[i % colorLength]
  20444. }
  20445. };
  20446. this.shapeList.push(new RectangleShape(axShape));
  20447. lastYend = curY;
  20448. }
  20449. }
  20450. }
  20451. },
  20452. _calculateValue: function () {
  20453. if (isNaN(this.option.min - 0) || isNaN(this.option.max - 0)) {
  20454. var data = {};
  20455. var xIdx;
  20456. var yIdx;
  20457. var legend = this.component.legend;
  20458. for (var i = 0, l = this.series.length; i < l; i++) {
  20459. 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) {
  20460. continue;
  20461. }
  20462. if (legend && !legend.isSelected(this.series[i].name)) {
  20463. continue;
  20464. }
  20465. xIdx = this.series[i].xAxisIndex || 0;
  20466. yIdx = this.series[i].yAxisIndex || 0;
  20467. if (this.option.xAxisIndex != xIdx && this.option.yAxisIndex != yIdx) {
  20468. continue;
  20469. }
  20470. this._calculSum(data, i);
  20471. }
  20472. var oriData;
  20473. for (var i in data) {
  20474. oriData = data[i];
  20475. for (var j = 0, k = oriData.length; j < k; j++) {
  20476. if (!isNaN(oriData[j])) {
  20477. this._hasData = true;
  20478. this._min = oriData[j];
  20479. this._max = oriData[j];
  20480. break;
  20481. }
  20482. }
  20483. if (this._hasData) {
  20484. break;
  20485. }
  20486. }
  20487. for (var i in data) {
  20488. oriData = data[i];
  20489. for (var j = 0, k = oriData.length; j < k; j++) {
  20490. if (!isNaN(oriData[j])) {
  20491. this._min = Math.min(this._min, oriData[j]);
  20492. this._max = Math.max(this._max, oriData[j]);
  20493. }
  20494. }
  20495. }
  20496. var gap = Math.abs(this._max - this._min);
  20497. this._min = isNaN(this.option.min - 0) ? this._min - Math.abs(gap * this.option.boundaryGap[0]) : this.option.min - 0;
  20498. this._max = isNaN(this.option.max - 0) ? this._max + Math.abs(gap * this.option.boundaryGap[1]) : this.option.max - 0;
  20499. if (this._min === this._max) {
  20500. if (this._max === 0) {
  20501. this._max = 1;
  20502. } else if (this._max > 0) {
  20503. this._min = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5;
  20504. } else {
  20505. this._max = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5;
  20506. }
  20507. }
  20508. this.option.type != 'time' ? this._reformValue(this.option.scale) : this._reformTimeValue();
  20509. } else {
  20510. this._hasData = true;
  20511. this._min = this.option.min - 0;
  20512. this._max = this.option.max - 0;
  20513. this.option.type != 'time' ? this._customerValue() : this._reformTimeValue();
  20514. }
  20515. },
  20516. _calculSum: function (data, i) {
  20517. var key = this.series[i].name || 'kener';
  20518. var value;
  20519. var oriData;
  20520. if (!this.series[i].stack) {
  20521. data[key] = data[key] || [];
  20522. if (this.series[i].type != ecConfig.CHART_TYPE_EVENTRIVER) {
  20523. oriData = this.series[i].data;
  20524. for (var j = 0, k = oriData.length; j < k; j++) {
  20525. value = this.getDataFromOption(oriData[j]);
  20526. if (this.series[i].type === ecConfig.CHART_TYPE_K) {
  20527. data[key].push(value[0]);
  20528. data[key].push(value[1]);
  20529. data[key].push(value[2]);
  20530. data[key].push(value[3]);
  20531. } else if (value instanceof Array) {
  20532. if (this.option.xAxisIndex != -1) {
  20533. data[key].push(this.option.type != 'time' ? value[0] : ecDate.getNewDate(value[0]));
  20534. }
  20535. if (this.option.yAxisIndex != -1) {
  20536. data[key].push(this.option.type != 'time' ? value[1] : ecDate.getNewDate(value[1]));
  20537. }
  20538. } else {
  20539. data[key].push(value);
  20540. }
  20541. }
  20542. } else {
  20543. oriData = this.series[i].data;
  20544. for (var j = 0, k = oriData.length; j < k; j++) {
  20545. var evolution = oriData[j].evolution;
  20546. for (var m = 0, n = evolution.length; m < n; m++) {
  20547. data[key].push(ecDate.getNewDate(evolution[m].time));
  20548. }
  20549. }
  20550. }
  20551. } else {
  20552. var keyP = '__Magic_Key_Positive__' + this.series[i].stack;
  20553. var keyN = '__Magic_Key_Negative__' + this.series[i].stack;
  20554. data[keyP] = data[keyP] || [];
  20555. data[keyN] = data[keyN] || [];
  20556. data[key] = data[key] || [];
  20557. oriData = this.series[i].data;
  20558. for (var j = 0, k = oriData.length; j < k; j++) {
  20559. value = this.getDataFromOption(oriData[j]);
  20560. if (value === '-') {
  20561. continue;
  20562. }
  20563. value = value - 0;
  20564. if (value >= 0) {
  20565. if (data[keyP][j] != null) {
  20566. data[keyP][j] += value;
  20567. } else {
  20568. data[keyP][j] = value;
  20569. }
  20570. } else {
  20571. if (data[keyN][j] != null) {
  20572. data[keyN][j] += value;
  20573. } else {
  20574. data[keyN][j] = value;
  20575. }
  20576. }
  20577. if (this.option.scale) {
  20578. data[key].push(value);
  20579. }
  20580. }
  20581. }
  20582. },
  20583. _reformValue: function (scale) {
  20584. var smartSteps = require('../util/smartSteps');
  20585. var splitNumber = this.option.splitNumber;
  20586. if (!scale && this._min >= 0 && this._max >= 0) {
  20587. this._min = 0;
  20588. }
  20589. if (!scale && this._min <= 0 && this._max <= 0) {
  20590. this._max = 0;
  20591. }
  20592. var stepOpt = smartSteps(this._min, this._max, splitNumber);
  20593. splitNumber = splitNumber != null ? splitNumber : stepOpt.secs;
  20594. this._min = stepOpt.min;
  20595. this._max = stepOpt.max;
  20596. this._valueList = stepOpt.pnts;
  20597. this._reformLabelData();
  20598. },
  20599. _reformTimeValue: function () {
  20600. var splitNumber = this.option.splitNumber != null ? this.option.splitNumber : 5;
  20601. var curValue = ecDate.getAutoFormatter(this._min, this._max, splitNumber);
  20602. var formatter = curValue.formatter;
  20603. var gapValue = curValue.gapValue;
  20604. this._valueList = [ecDate.getNewDate(this._min)];
  20605. var startGap;
  20606. switch (formatter) {
  20607. case 'week':
  20608. startGap = ecDate.nextMonday(this._min);
  20609. break;
  20610. case 'month':
  20611. startGap = ecDate.nextNthOnMonth(this._min, 1);
  20612. break;
  20613. case 'quarter':
  20614. startGap = ecDate.nextNthOnQuarterYear(this._min, 1);
  20615. break;
  20616. case 'half-year':
  20617. startGap = ecDate.nextNthOnHalfYear(this._min, 1);
  20618. break;
  20619. case 'year':
  20620. startGap = ecDate.nextNthOnYear(this._min, 1);
  20621. break;
  20622. default:
  20623. if (gapValue <= 3600000 * 2) {
  20624. startGap = (Math.floor(this._min / gapValue) + 1) * gapValue;
  20625. } else {
  20626. startGap = ecDate.getNewDate(this._min - -gapValue);
  20627. startGap.setHours(Math.round(startGap.getHours() / 6) * 6);
  20628. startGap.setMinutes(0);
  20629. startGap.setSeconds(0);
  20630. }
  20631. break;
  20632. }
  20633. if (startGap - this._min < gapValue / 2) {
  20634. startGap -= -gapValue;
  20635. }
  20636. curValue = ecDate.getNewDate(startGap);
  20637. splitNumber *= 1.5;
  20638. while (splitNumber-- >= 0) {
  20639. if (formatter == 'month' || formatter == 'quarter' || formatter == 'half-year' || formatter == 'year') {
  20640. curValue.setDate(1);
  20641. }
  20642. if (this._max - curValue < gapValue / 2) {
  20643. break;
  20644. }
  20645. this._valueList.push(curValue);
  20646. curValue = ecDate.getNewDate(curValue - -gapValue);
  20647. }
  20648. this._valueList.push(ecDate.getNewDate(this._max));
  20649. this._reformLabelData(formatter);
  20650. },
  20651. _customerValue: function () {
  20652. var accMath = require('../util/accMath');
  20653. var splitNumber = this.option.splitNumber != null ? this.option.splitNumber : 5;
  20654. var splitGap = (this._max - this._min) / splitNumber;
  20655. this._valueList = [];
  20656. for (var i = 0; i <= splitNumber; i++) {
  20657. this._valueList.push(accMath.accAdd(this._min, accMath.accMul(splitGap, i)));
  20658. }
  20659. this._reformLabelData();
  20660. },
  20661. _reformLabelData: function (timeFormatter) {
  20662. this._valueLabel = [];
  20663. var formatter = this.option.axisLabel.formatter;
  20664. if (formatter) {
  20665. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20666. if (typeof formatter === 'function') {
  20667. this._valueLabel.push(timeFormatter ? formatter.call(this.myChart, this._valueList[i], timeFormatter) : formatter.call(this.myChart, this._valueList[i]));
  20668. } else if (typeof formatter === 'string') {
  20669. this._valueLabel.push(timeFormatter ? ecDate.format(formatter, this._valueList[i]) : formatter.replace('{value}', this._valueList[i]));
  20670. }
  20671. }
  20672. } else if (timeFormatter) {
  20673. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20674. this._valueLabel.push(ecDate.format(timeFormatter, this._valueList[i]));
  20675. }
  20676. } else {
  20677. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20678. this._valueLabel.push(this.numAddCommas(this._valueList[i]));
  20679. }
  20680. }
  20681. },
  20682. getExtremum: function () {
  20683. this._calculateValue();
  20684. return {
  20685. min: this._min,
  20686. max: this._max
  20687. };
  20688. },
  20689. refresh: function (newOption, newSeries) {
  20690. if (newOption) {
  20691. this.option = this.reformOption(newOption);
  20692. this.option.axisLabel.textStyle = zrUtil.merge(this.option.axisLabel.textStyle || {}, this.ecTheme.textStyle);
  20693. this.series = newSeries;
  20694. }
  20695. if (this.zr) {
  20696. this.clear();
  20697. this._buildShape();
  20698. }
  20699. },
  20700. getCoord: function (value) {
  20701. value = value < this._min ? this._min : value;
  20702. value = value > this._max ? this._max : value;
  20703. var result;
  20704. if (!this.isHorizontal()) {
  20705. result = this.grid.getYend() - (value - this._min) / (this._max - this._min) * this.grid.getHeight();
  20706. } else {
  20707. result = this.grid.getX() + (value - this._min) / (this._max - this._min) * this.grid.getWidth();
  20708. }
  20709. return result;
  20710. },
  20711. getCoordSize: function (value) {
  20712. if (!this.isHorizontal()) {
  20713. return Math.abs(value / (this._max - this._min) * this.grid.getHeight());
  20714. } else {
  20715. return Math.abs(value / (this._max - this._min) * this.grid.getWidth());
  20716. }
  20717. },
  20718. getValueFromCoord: function (coord) {
  20719. var result;
  20720. if (!this.isHorizontal()) {
  20721. coord = coord < this.grid.getY() ? this.grid.getY() : coord;
  20722. coord = coord > this.grid.getYend() ? this.grid.getYend() : coord;
  20723. result = this._max - (coord - this.grid.getY()) / this.grid.getHeight() * (this._max - this._min);
  20724. } else {
  20725. coord = coord < this.grid.getX() ? this.grid.getX() : coord;
  20726. coord = coord > this.grid.getXend() ? this.grid.getXend() : coord;
  20727. result = this._min + (coord - this.grid.getX()) / this.grid.getWidth() * (this._max - this._min);
  20728. }
  20729. return result.toFixed(2) - 0;
  20730. },
  20731. isMaindAxis: function (value) {
  20732. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20733. if (this._valueList[i] === value) {
  20734. return true;
  20735. }
  20736. }
  20737. return false;
  20738. }
  20739. };
  20740. zrUtil.inherits(ValueAxis, Base);
  20741. require('../component').define('valueAxis', ValueAxis);
  20742. return ValueAxis;
  20743. });define('echarts/util/date', [], function () {
  20744. var _timeGap = [
  20745. {
  20746. formatter: 'hh : mm : ss',
  20747. value: 1000
  20748. },
  20749. {
  20750. formatter: 'hh : mm : ss',
  20751. value: 1000 * 5
  20752. },
  20753. {
  20754. formatter: 'hh : mm : ss',
  20755. value: 1000 * 10
  20756. },
  20757. {
  20758. formatter: 'hh : mm : ss',
  20759. value: 1000 * 15
  20760. },
  20761. {
  20762. formatter: 'hh : mm : ss',
  20763. value: 1000 * 30
  20764. },
  20765. {
  20766. formatter: 'hh : mm\nMM - dd',
  20767. value: 60000
  20768. },
  20769. {
  20770. formatter: 'hh : mm\nMM - dd',
  20771. value: 60000 * 5
  20772. },
  20773. {
  20774. formatter: 'hh : mm\nMM - dd',
  20775. value: 60000 * 10
  20776. },
  20777. {
  20778. formatter: 'hh : mm\nMM - dd',
  20779. value: 60000 * 15
  20780. },
  20781. {
  20782. formatter: 'hh : mm\nMM - dd',
  20783. value: 60000 * 30
  20784. },
  20785. {
  20786. formatter: 'hh : mm\nMM - dd',
  20787. value: 3600000
  20788. },
  20789. {
  20790. formatter: 'hh : mm\nMM - dd',
  20791. value: 3600000 * 2
  20792. },
  20793. {
  20794. formatter: 'hh : mm\nMM - dd',
  20795. value: 3600000 * 6
  20796. },
  20797. {
  20798. formatter: 'hh : mm\nMM - dd',
  20799. value: 3600000 * 12
  20800. },
  20801. {
  20802. formatter: 'MM - dd\nyyyy',
  20803. value: 3600000 * 24
  20804. },
  20805. {
  20806. formatter: 'week',
  20807. value: 3600000 * 24 * 7
  20808. },
  20809. {
  20810. formatter: 'month',
  20811. value: 3600000 * 24 * 31
  20812. },
  20813. {
  20814. formatter: 'quarter',
  20815. value: 3600000 * 24 * 380 / 4
  20816. },
  20817. {
  20818. formatter: 'half-year',
  20819. value: 3600000 * 24 * 380 / 2
  20820. },
  20821. {
  20822. formatter: 'year',
  20823. value: 3600000 * 24 * 380
  20824. }
  20825. ];
  20826. function getAutoFormatter(min, max, splitNumber) {
  20827. splitNumber = splitNumber > 1 ? splitNumber : 2;
  20828. var curValue;
  20829. var totalGap;
  20830. var formatter;
  20831. var gapValue;
  20832. for (var i = 0, l = _timeGap.length; i < l; i++) {
  20833. curValue = _timeGap[i].value;
  20834. totalGap = Math.ceil(max / curValue) * curValue - Math.floor(min / curValue) * curValue;
  20835. if (Math.round(totalGap / curValue) <= splitNumber * 1.2) {
  20836. formatter = _timeGap[i].formatter;
  20837. gapValue = _timeGap[i].value;
  20838. break;
  20839. }
  20840. }
  20841. if (formatter == null) {
  20842. formatter = 'year';
  20843. curValue = 3600000 * 24 * 367;
  20844. totalGap = Math.ceil(max / curValue) * curValue - Math.floor(min / curValue) * curValue;
  20845. gapValue = Math.round(totalGap / (splitNumber - 1) / curValue) * curValue;
  20846. }
  20847. return {
  20848. formatter: formatter,
  20849. gapValue: gapValue
  20850. };
  20851. }
  20852. function s2d(v) {
  20853. return v < 10 ? '0' + v : v;
  20854. }
  20855. function format(formatter, value) {
  20856. if (formatter == 'week' || formatter == 'month' || formatter == 'quarter' || formatter == 'half-year' || formatter == 'year') {
  20857. formatter = 'MM - dd\nyyyy';
  20858. }
  20859. var date = getNewDate(value);
  20860. var y = date.getFullYear();
  20861. var M = date.getMonth() + 1;
  20862. var d = date.getDate();
  20863. var h = date.getHours();
  20864. var m = date.getMinutes();
  20865. var s = date.getSeconds();
  20866. formatter = formatter.replace('MM', s2d(M));
  20867. formatter = formatter.toLowerCase();
  20868. formatter = formatter.replace('yyyy', y);
  20869. formatter = formatter.replace('yy', y % 100);
  20870. formatter = formatter.replace('dd', s2d(d));
  20871. formatter = formatter.replace('d', d);
  20872. formatter = formatter.replace('hh', s2d(h));
  20873. formatter = formatter.replace('h', h);
  20874. formatter = formatter.replace('mm', s2d(m));
  20875. formatter = formatter.replace('m', m);
  20876. formatter = formatter.replace('ss', s2d(s));
  20877. formatter = formatter.replace('s', s);
  20878. return formatter;
  20879. }
  20880. function nextMonday(value) {
  20881. value = getNewDate(value);
  20882. value.setDate(value.getDate() + 8 - value.getDay());
  20883. return value;
  20884. }
  20885. function nextNthPerNmonth(value, nth, nmon) {
  20886. value = getNewDate(value);
  20887. value.setMonth(Math.ceil((value.getMonth() + 1) / nmon) * nmon);
  20888. value.setDate(nth);
  20889. return value;
  20890. }
  20891. function nextNthOnMonth(value, nth) {
  20892. return nextNthPerNmonth(value, nth, 1);
  20893. }
  20894. function nextNthOnQuarterYear(value, nth) {
  20895. return nextNthPerNmonth(value, nth, 3);
  20896. }
  20897. function nextNthOnHalfYear(value, nth) {
  20898. return nextNthPerNmonth(value, nth, 6);
  20899. }
  20900. function nextNthOnYear(value, nth) {
  20901. return nextNthPerNmonth(value, nth, 12);
  20902. }
  20903. function getNewDate(value) {
  20904. return value instanceof Date ? value : new Date(typeof value == 'string' ? value.replace(/-/g, '/') : value);
  20905. }
  20906. return {
  20907. getAutoFormatter: getAutoFormatter,
  20908. getNewDate: getNewDate,
  20909. format: format,
  20910. nextMonday: nextMonday,
  20911. nextNthPerNmonth: nextNthPerNmonth,
  20912. nextNthOnMonth: nextNthOnMonth,
  20913. nextNthOnQuarterYear: nextNthOnQuarterYear,
  20914. nextNthOnHalfYear: nextNthOnHalfYear,
  20915. nextNthOnYear: nextNthOnYear
  20916. };
  20917. });define('echarts/util/smartSteps', [], function () {
  20918. var mySteps = [
  20919. 10,
  20920. 20,
  20921. 25,
  20922. 50
  20923. ];
  20924. var mySections = [
  20925. 4,
  20926. 5,
  20927. 6
  20928. ];
  20929. var custOpts;
  20930. var custSteps;
  20931. var custSecs;
  20932. var minLocked;
  20933. var maxLocked;
  20934. var MT = Math;
  20935. var MATH_ROUND = MT.round;
  20936. var MATH_FLOOR = MT.floor;
  20937. var MATH_CEIL = MT.ceil;
  20938. var MATH_ABS = MT.abs;
  20939. function MATH_LOG(n) {
  20940. return MT.log(MATH_ABS(n)) / MT.LN10;
  20941. }
  20942. function MATH_POW(n) {
  20943. return MT.pow(10, n);
  20944. }
  20945. function MATH_ISINT(n) {
  20946. return n === MATH_FLOOR(n);
  20947. }
  20948. function smartSteps(min, max, section, opts) {
  20949. custOpts = opts || {};
  20950. custSteps = custOpts.steps || mySteps;
  20951. custSecs = custOpts.secs || mySections;
  20952. section = MATH_ROUND(+section || 0) % 99;
  20953. min = +min || 0;
  20954. max = +max || 0;
  20955. minLocked = maxLocked = 0;
  20956. if ('min' in custOpts) {
  20957. min = +custOpts.min || 0;
  20958. minLocked = 1;
  20959. }
  20960. if ('max' in custOpts) {
  20961. max = +custOpts.max || 0;
  20962. maxLocked = 1;
  20963. }
  20964. if (min > max) {
  20965. max = [
  20966. min,
  20967. min = max
  20968. ][0];
  20969. }
  20970. var span = max - min;
  20971. if (minLocked && maxLocked) {
  20972. return bothLocked(min, max, section);
  20973. }
  20974. if (span < (section || 5)) {
  20975. if (MATH_ISINT(min) && MATH_ISINT(max)) {
  20976. return forInteger(min, max, section);
  20977. } else if (span === 0) {
  20978. return forSpan0(min, max, section);
  20979. }
  20980. }
  20981. return coreCalc(min, max, section);
  20982. }
  20983. function makeResult(newMin, newMax, section, expon) {
  20984. expon = expon || 0;
  20985. var expStep = expNum((newMax - newMin) / section, -1);
  20986. var expMin = expNum(newMin, -1, 1);
  20987. var expMax = expNum(newMax, -1);
  20988. var minExp = MT.min(expStep.e, expMin.e, expMax.e);
  20989. if (expMin.c === 0) {
  20990. minExp = MT.min(expStep.e, expMax.e);
  20991. } else if (expMax.c === 0) {
  20992. minExp = MT.min(expStep.e, expMin.e);
  20993. }
  20994. expFixTo(expStep, {
  20995. c: 0,
  20996. e: minExp
  20997. });
  20998. expFixTo(expMin, expStep, 1);
  20999. expFixTo(expMax, expStep);
  21000. expon += minExp;
  21001. newMin = expMin.c;
  21002. newMax = expMax.c;
  21003. var step = (newMax - newMin) / section;
  21004. var zoom = MATH_POW(expon);
  21005. var fixTo = 0;
  21006. var points = [];
  21007. for (var i = section + 1; i--;) {
  21008. points[i] = (newMin + step * i) * zoom;
  21009. }
  21010. if (expon < 0) {
  21011. fixTo = decimals(zoom);
  21012. step = +(step * zoom).toFixed(fixTo);
  21013. newMin = +(newMin * zoom).toFixed(fixTo);
  21014. newMax = +(newMax * zoom).toFixed(fixTo);
  21015. for (var i = points.length; i--;) {
  21016. points[i] = points[i].toFixed(fixTo);
  21017. +points[i] === 0 && (points[i] = '0');
  21018. }
  21019. } else {
  21020. newMin *= zoom;
  21021. newMax *= zoom;
  21022. step *= zoom;
  21023. }
  21024. custSecs = 0;
  21025. custSteps = 0;
  21026. custOpts = 0;
  21027. return {
  21028. min: newMin,
  21029. max: newMax,
  21030. secs: section,
  21031. step: step,
  21032. fix: fixTo,
  21033. exp: expon,
  21034. pnts: points
  21035. };
  21036. }
  21037. function expNum(num, digit, byFloor) {
  21038. digit = MATH_ROUND(digit % 10) || 2;
  21039. if (digit < 0) {
  21040. if (MATH_ISINT(num)) {
  21041. digit = ('' + MATH_ABS(num)).replace(/0+$/, '').length || 1;
  21042. } else {
  21043. num = num.toFixed(15).replace(/0+$/, '');
  21044. digit = num.replace('.', '').replace(/^[-0]+/, '').length;
  21045. num = +num;
  21046. }
  21047. }
  21048. var expon = MATH_FLOOR(MATH_LOG(num)) - digit + 1;
  21049. var cNum = +(num * MATH_POW(-expon)).toFixed(15) || 0;
  21050. cNum = byFloor ? MATH_FLOOR(cNum) : MATH_CEIL(cNum);
  21051. !cNum && (expon = 0);
  21052. if (('' + MATH_ABS(cNum)).length > digit) {
  21053. expon += 1;
  21054. cNum /= 10;
  21055. }
  21056. return {
  21057. c: cNum,
  21058. e: expon
  21059. };
  21060. }
  21061. function expFixTo(expnum1, expnum2, byFloor) {
  21062. var deltaExp = expnum2.e - expnum1.e;
  21063. if (deltaExp) {
  21064. expnum1.e += deltaExp;
  21065. expnum1.c *= MATH_POW(-deltaExp);
  21066. expnum1.c = byFloor ? MATH_FLOOR(expnum1.c) : MATH_CEIL(expnum1.c);
  21067. }
  21068. }
  21069. function expFixMin(expnum1, expnum2, byFloor) {
  21070. if (expnum1.e < expnum2.e) {
  21071. expFixTo(expnum2, expnum1, byFloor);
  21072. } else {
  21073. expFixTo(expnum1, expnum2, byFloor);
  21074. }
  21075. }
  21076. function getCeil(num, rounds) {
  21077. rounds = rounds || mySteps;
  21078. num = expNum(num);
  21079. var cNum = num.c;
  21080. var i = 0;
  21081. while (cNum > rounds[i]) {
  21082. i++;
  21083. }
  21084. if (!rounds[i]) {
  21085. cNum /= 10;
  21086. num.e += 1;
  21087. i = 0;
  21088. while (cNum > rounds[i]) {
  21089. i++;
  21090. }
  21091. }
  21092. num.c = rounds[i];
  21093. return num;
  21094. }
  21095. function coreCalc(min, max, section) {
  21096. var step;
  21097. var secs = section || +custSecs.slice(-1);
  21098. var expStep = getCeil((max - min) / secs, custSteps);
  21099. var expSpan = expNum(max - min);
  21100. var expMin = expNum(min, -1, 1);
  21101. var expMax = expNum(max, -1);
  21102. expFixTo(expSpan, expStep);
  21103. expFixTo(expMin, expStep, 1);
  21104. expFixTo(expMax, expStep);
  21105. if (!section) {
  21106. secs = look4sections(expMin, expMax);
  21107. } else {
  21108. step = look4step(expMin, expMax, secs);
  21109. }
  21110. if (MATH_ISINT(min) && MATH_ISINT(max) && min * max >= 0) {
  21111. if (max - min < secs) {
  21112. return forInteger(min, max, secs);
  21113. }
  21114. secs = tryForInt(min, max, section, expMin, expMax, secs);
  21115. }
  21116. var arrMM = cross0(min, max, expMin.c, expMax.c);
  21117. expMin.c = arrMM[0];
  21118. expMax.c = arrMM[1];
  21119. if (minLocked || maxLocked) {
  21120. singleLocked(min, max, expMin, expMax);
  21121. }
  21122. return makeResult(expMin.c, expMax.c, secs, expMax.e);
  21123. }
  21124. function look4sections(expMin, expMax) {
  21125. var section;
  21126. var tmpStep, tmpMin, tmpMax;
  21127. var reference = [];
  21128. for (var i = custSecs.length; i--;) {
  21129. section = custSecs[i];
  21130. tmpStep = getCeil((expMax.c - expMin.c) / section, custSteps);
  21131. tmpStep = tmpStep.c * MATH_POW(tmpStep.e);
  21132. tmpMin = MATH_FLOOR(expMin.c / tmpStep) * tmpStep;
  21133. tmpMax = MATH_CEIL(expMax.c / tmpStep) * tmpStep;
  21134. reference[i] = {
  21135. min: tmpMin,
  21136. max: tmpMax,
  21137. step: tmpStep,
  21138. span: tmpMax - tmpMin
  21139. };
  21140. }
  21141. reference.sort(function (a, b) {
  21142. var delta = a.span - b.span;
  21143. if (delta === 0) {
  21144. delta = a.step - b.step;
  21145. }
  21146. return delta;
  21147. });
  21148. reference = reference[0];
  21149. section = reference.span / reference.step;
  21150. expMin.c = reference.min;
  21151. expMax.c = reference.max;
  21152. return section < 3 ? section * 2 : section;
  21153. }
  21154. function look4step(expMin, expMax, secs) {
  21155. var span;
  21156. var tmpMax;
  21157. var tmpMin = expMax.c;
  21158. var tmpStep = (expMax.c - expMin.c) / secs - 1;
  21159. while (tmpMin > expMin.c) {
  21160. tmpStep = getCeil(tmpStep + 1, custSteps);
  21161. tmpStep = tmpStep.c * MATH_POW(tmpStep.e);
  21162. span = tmpStep * secs;
  21163. tmpMax = MATH_CEIL(expMax.c / tmpStep) * tmpStep;
  21164. tmpMin = tmpMax - span;
  21165. }
  21166. var deltaMin = expMin.c - tmpMin;
  21167. var deltaMax = tmpMax - expMax.c;
  21168. var deltaDelta = deltaMin - deltaMax;
  21169. if (deltaDelta > tmpStep * 1.1) {
  21170. deltaDelta = MATH_ROUND(deltaDelta / tmpStep / 2) * tmpStep;
  21171. tmpMin += deltaDelta;
  21172. tmpMax += deltaDelta;
  21173. }
  21174. expMin.c = tmpMin;
  21175. expMax.c = tmpMax;
  21176. return tmpStep;
  21177. }
  21178. function tryForInt(min, max, section, expMin, expMax, secs) {
  21179. var span = expMax.c - expMin.c;
  21180. var step = span / secs * MATH_POW(expMax.e);
  21181. if (!MATH_ISINT(step)) {
  21182. step = MATH_FLOOR(step);
  21183. span = step * secs;
  21184. if (span < max - min) {
  21185. step += 1;
  21186. span = step * secs;
  21187. if (!section && step * (secs - 1) >= max - min) {
  21188. secs -= 1;
  21189. span = step * secs;
  21190. }
  21191. }
  21192. if (span >= max - min) {
  21193. var delta = span - (max - min);
  21194. expMin.c = MATH_ROUND(min - delta / 2);
  21195. expMax.c = MATH_ROUND(max + delta / 2);
  21196. expMin.e = 0;
  21197. expMax.e = 0;
  21198. }
  21199. }
  21200. return secs;
  21201. }
  21202. function forInteger(min, max, section) {
  21203. section = section || 5;
  21204. if (minLocked) {
  21205. max = min + section;
  21206. } else if (maxLocked) {
  21207. min = max - section;
  21208. } else {
  21209. var delta = section - (max - min);
  21210. var newMin = MATH_ROUND(min - delta / 2);
  21211. var newMax = MATH_ROUND(max + delta / 2);
  21212. var arrMM = cross0(min, max, newMin, newMax);
  21213. min = arrMM[0];
  21214. max = arrMM[1];
  21215. }
  21216. return makeResult(min, max, section);
  21217. }
  21218. function forSpan0(min, max, section) {
  21219. section = section || 5;
  21220. var delta = MT.min(MATH_ABS(max / section), section) / 2.1;
  21221. if (minLocked) {
  21222. max = min + delta;
  21223. } else if (maxLocked) {
  21224. min = max - delta;
  21225. } else {
  21226. min = min - delta;
  21227. max = max + delta;
  21228. }
  21229. return coreCalc(min, max, section);
  21230. }
  21231. function cross0(min, max, newMin, newMax) {
  21232. if (min >= 0 && newMin < 0) {
  21233. newMax -= newMin;
  21234. newMin = 0;
  21235. } else if (max <= 0 && newMax > 0) {
  21236. newMin -= newMax;
  21237. newMax = 0;
  21238. }
  21239. return [
  21240. newMin,
  21241. newMax
  21242. ];
  21243. }
  21244. function decimals(num) {
  21245. num = (+num).toFixed(15).split('.');
  21246. return num.pop().replace(/0+$/, '').length;
  21247. }
  21248. function singleLocked(min, max, emin, emax) {
  21249. if (minLocked) {
  21250. var expMin = expNum(min, 4, 1);
  21251. if (emin.e - expMin.e > 6) {
  21252. expMin = {
  21253. c: 0,
  21254. e: emin.e
  21255. };
  21256. }
  21257. expFixMin(emin, expMin);
  21258. expFixMin(emax, expMin);
  21259. emax.c += expMin.c - emin.c;
  21260. emin.c = expMin.c;
  21261. } else if (maxLocked) {
  21262. var expMax = expNum(max, 4);
  21263. if (emax.e - expMax.e > 6) {
  21264. expMax = {
  21265. c: 0,
  21266. e: emax.e
  21267. };
  21268. }
  21269. expFixMin(emin, expMax);
  21270. expFixMin(emax, expMax);
  21271. emin.c += expMax.c - emax.c;
  21272. emax.c = expMax.c;
  21273. }
  21274. }
  21275. function bothLocked(min, max, section) {
  21276. var trySecs = section ? [section] : custSecs;
  21277. var span = max - min;
  21278. if (span === 0) {
  21279. max = expNum(max, 3);
  21280. section = trySecs[0];
  21281. max.c = MATH_ROUND(max.c + section / 2);
  21282. return makeResult(max.c - section, max.c, section, max.e);
  21283. }
  21284. if (MATH_ABS(max / span) < 0.000001) {
  21285. max = 0;
  21286. }
  21287. if (MATH_ABS(min / span) < 0.000001) {
  21288. min = 0;
  21289. }
  21290. var step, deltaSpan, score;
  21291. var scoreS = [
  21292. [
  21293. 5,
  21294. 10
  21295. ],
  21296. [
  21297. 10,
  21298. 2
  21299. ],
  21300. [
  21301. 50,
  21302. 10
  21303. ],
  21304. [
  21305. 100,
  21306. 2
  21307. ]
  21308. ];
  21309. var reference = [];
  21310. var debugLog = [];
  21311. var expSpan = expNum(max - min, 3);
  21312. var expMin = expNum(min, -1, 1);
  21313. var expMax = expNum(max, -1);
  21314. expFixTo(expMin, expSpan, 1);
  21315. expFixTo(expMax, expSpan);
  21316. span = expMax.c - expMin.c;
  21317. expSpan.c = span;
  21318. for (var i = trySecs.length; i--;) {
  21319. section = trySecs[i];
  21320. step = MATH_CEIL(span / section);
  21321. deltaSpan = step * section - span;
  21322. score = (deltaSpan + 3) * 3;
  21323. score += (section - trySecs[0] + 2) * 2;
  21324. if (section % 5 === 0) {
  21325. score -= 10;
  21326. }
  21327. for (var j = scoreS.length; j--;) {
  21328. if (step % scoreS[j][0] === 0) {
  21329. score /= scoreS[j][1];
  21330. }
  21331. }
  21332. debugLog[i] = [
  21333. section,
  21334. step,
  21335. deltaSpan,
  21336. score
  21337. ].join();
  21338. reference[i] = {
  21339. secs: section,
  21340. step: step,
  21341. delta: deltaSpan,
  21342. score: score
  21343. };
  21344. }
  21345. reference.sort(function (a, b) {
  21346. return a.score - b.score;
  21347. });
  21348. reference = reference[0];
  21349. expMin.c = MATH_ROUND(expMin.c - reference.delta / 2);
  21350. expMax.c = MATH_ROUND(expMax.c + reference.delta / 2);
  21351. return makeResult(expMin.c, expMax.c, reference.secs, expSpan.e);
  21352. }
  21353. return smartSteps;
  21354. });define('echarts/chart/line', [
  21355. 'require',
  21356. './base',
  21357. 'zrender/shape/Polyline',
  21358. '../util/shape/Icon',
  21359. '../util/shape/HalfSmoothPolygon',
  21360. '../component/axis',
  21361. '../component/grid',
  21362. '../component/dataZoom',
  21363. '../config',
  21364. '../util/ecData',
  21365. 'zrender/tool/util',
  21366. 'zrender/tool/color',
  21367. '../chart'
  21368. ], function (require) {
  21369. var ChartBase = require('./base');
  21370. var PolylineShape = require('zrender/shape/Polyline');
  21371. var IconShape = require('../util/shape/Icon');
  21372. var HalfSmoothPolygonShape = require('../util/shape/HalfSmoothPolygon');
  21373. require('../component/axis');
  21374. require('../component/grid');
  21375. require('../component/dataZoom');
  21376. var ecConfig = require('../config');
  21377. ecConfig.line = {
  21378. zlevel: 0,
  21379. z: 2,
  21380. clickable: true,
  21381. legendHoverLink: true,
  21382. xAxisIndex: 0,
  21383. yAxisIndex: 0,
  21384. dataFilter: 'nearest',
  21385. itemStyle: {
  21386. normal: {
  21387. label: { show: false },
  21388. lineStyle: {
  21389. width: 2,
  21390. type: 'solid',
  21391. shadowColor: 'rgba(0,0,0,0)',
  21392. shadowBlur: 0,
  21393. shadowOffsetX: 0,
  21394. shadowOffsetY: 0
  21395. }
  21396. },
  21397. emphasis: { label: { show: false } }
  21398. },
  21399. symbolSize: 2,
  21400. showAllSymbol: false
  21401. };
  21402. var ecData = require('../util/ecData');
  21403. var zrUtil = require('zrender/tool/util');
  21404. var zrColor = require('zrender/tool/color');
  21405. function Line(ecTheme, messageCenter, zr, option, myChart) {
  21406. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  21407. this.refresh(option);
  21408. }
  21409. Line.prototype = {
  21410. type: ecConfig.CHART_TYPE_LINE,
  21411. _buildShape: function () {
  21412. this.finalPLMap = {};
  21413. this._buildPosition();
  21414. },
  21415. _buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  21416. var series = this.series;
  21417. var seriesIndex = locationMap[0][0];
  21418. var serie = series[seriesIndex];
  21419. var categoryAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
  21420. var valueAxis;
  21421. var x;
  21422. var y;
  21423. var lastYP;
  21424. var baseYP;
  21425. var lastYN;
  21426. var baseYN;
  21427. var curPLMap = {};
  21428. var data;
  21429. var value;
  21430. for (var i = 0, l = maxDataLength; i < l; i++) {
  21431. if (categoryAxis.getNameByIndex(i) == null) {
  21432. break;
  21433. }
  21434. x = categoryAxis.getCoordByIndex(i);
  21435. for (var j = 0, k = locationMap.length; j < k; j++) {
  21436. valueAxis = this.component.yAxis.getAxis(series[locationMap[j][0]].yAxisIndex || 0);
  21437. baseYP = lastYP = baseYN = lastYN = valueAxis.getCoord(0);
  21438. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21439. seriesIndex = locationMap[j][m];
  21440. serie = series[seriesIndex];
  21441. data = serie.data[i];
  21442. value = this.getDataFromOption(data, '-');
  21443. curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
  21444. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  21445. min: Number.POSITIVE_INFINITY,
  21446. max: Number.NEGATIVE_INFINITY,
  21447. sum: 0,
  21448. counter: 0,
  21449. average: 0
  21450. };
  21451. if (value === '-') {
  21452. if (curPLMap[seriesIndex].length > 0) {
  21453. this.finalPLMap[seriesIndex] = this.finalPLMap[seriesIndex] || [];
  21454. this.finalPLMap[seriesIndex].push(curPLMap[seriesIndex]);
  21455. curPLMap[seriesIndex] = [];
  21456. }
  21457. continue;
  21458. }
  21459. if (value >= 0) {
  21460. lastYP -= m > 0 ? valueAxis.getCoordSize(value) : baseYP - valueAxis.getCoord(value);
  21461. y = lastYP;
  21462. } else if (value < 0) {
  21463. lastYN += m > 0 ? valueAxis.getCoordSize(value) : valueAxis.getCoord(value) - baseYN;
  21464. y = lastYN;
  21465. }
  21466. curPLMap[seriesIndex].push([
  21467. x,
  21468. y,
  21469. i,
  21470. categoryAxis.getNameByIndex(i),
  21471. x,
  21472. baseYP
  21473. ]);
  21474. if (xMarkMap[seriesIndex].min > value) {
  21475. xMarkMap[seriesIndex].min = value;
  21476. xMarkMap[seriesIndex].minY = y;
  21477. xMarkMap[seriesIndex].minX = x;
  21478. }
  21479. if (xMarkMap[seriesIndex].max < value) {
  21480. xMarkMap[seriesIndex].max = value;
  21481. xMarkMap[seriesIndex].maxY = y;
  21482. xMarkMap[seriesIndex].maxX = x;
  21483. }
  21484. xMarkMap[seriesIndex].sum += value;
  21485. xMarkMap[seriesIndex].counter++;
  21486. }
  21487. }
  21488. lastYP = this.component.grid.getY();
  21489. var symbolSize;
  21490. for (var j = 0, k = locationMap.length; j < k; j++) {
  21491. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21492. seriesIndex = locationMap[j][m];
  21493. serie = series[seriesIndex];
  21494. data = serie.data[i];
  21495. value = this.getDataFromOption(data, '-');
  21496. if (value != '-') {
  21497. continue;
  21498. }
  21499. if (this.deepQuery([
  21500. data,
  21501. serie,
  21502. this.option
  21503. ], 'calculable')) {
  21504. symbolSize = this.deepQuery([
  21505. data,
  21506. serie
  21507. ], 'symbolSize');
  21508. lastYP += symbolSize * 2 + 5;
  21509. y = lastYP;
  21510. this.shapeList.push(this._getCalculableItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y, 'horizontal'));
  21511. }
  21512. }
  21513. }
  21514. }
  21515. for (var sId in curPLMap) {
  21516. if (curPLMap[sId].length > 0) {
  21517. this.finalPLMap[sId] = this.finalPLMap[sId] || [];
  21518. this.finalPLMap[sId].push(curPLMap[sId]);
  21519. curPLMap[sId] = [];
  21520. }
  21521. }
  21522. this._calculMarkMapXY(xMarkMap, locationMap, 'y');
  21523. this._buildBorkenLine(seriesArray, this.finalPLMap, categoryAxis, 'horizontal');
  21524. },
  21525. _buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  21526. var series = this.series;
  21527. var seriesIndex = locationMap[0][0];
  21528. var serie = series[seriesIndex];
  21529. var categoryAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
  21530. var valueAxis;
  21531. var x;
  21532. var y;
  21533. var lastXP;
  21534. var baseXP;
  21535. var lastXN;
  21536. var baseXN;
  21537. var curPLMap = {};
  21538. var data;
  21539. var value;
  21540. for (var i = 0, l = maxDataLength; i < l; i++) {
  21541. if (categoryAxis.getNameByIndex(i) == null) {
  21542. break;
  21543. }
  21544. y = categoryAxis.getCoordByIndex(i);
  21545. for (var j = 0, k = locationMap.length; j < k; j++) {
  21546. valueAxis = this.component.xAxis.getAxis(series[locationMap[j][0]].xAxisIndex || 0);
  21547. baseXP = lastXP = baseXN = lastXN = valueAxis.getCoord(0);
  21548. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21549. seriesIndex = locationMap[j][m];
  21550. serie = series[seriesIndex];
  21551. data = serie.data[i];
  21552. value = this.getDataFromOption(data, '-');
  21553. curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
  21554. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  21555. min: Number.POSITIVE_INFINITY,
  21556. max: Number.NEGATIVE_INFINITY,
  21557. sum: 0,
  21558. counter: 0,
  21559. average: 0
  21560. };
  21561. if (value === '-') {
  21562. if (curPLMap[seriesIndex].length > 0) {
  21563. this.finalPLMap[seriesIndex] = this.finalPLMap[seriesIndex] || [];
  21564. this.finalPLMap[seriesIndex].push(curPLMap[seriesIndex]);
  21565. curPLMap[seriesIndex] = [];
  21566. }
  21567. continue;
  21568. }
  21569. if (value >= 0) {
  21570. lastXP += m > 0 ? valueAxis.getCoordSize(value) : valueAxis.getCoord(value) - baseXP;
  21571. x = lastXP;
  21572. } else if (value < 0) {
  21573. lastXN -= m > 0 ? valueAxis.getCoordSize(value) : baseXN - valueAxis.getCoord(value);
  21574. x = lastXN;
  21575. }
  21576. curPLMap[seriesIndex].push([
  21577. x,
  21578. y,
  21579. i,
  21580. categoryAxis.getNameByIndex(i),
  21581. baseXP,
  21582. y
  21583. ]);
  21584. if (xMarkMap[seriesIndex].min > value) {
  21585. xMarkMap[seriesIndex].min = value;
  21586. xMarkMap[seriesIndex].minX = x;
  21587. xMarkMap[seriesIndex].minY = y;
  21588. }
  21589. if (xMarkMap[seriesIndex].max < value) {
  21590. xMarkMap[seriesIndex].max = value;
  21591. xMarkMap[seriesIndex].maxX = x;
  21592. xMarkMap[seriesIndex].maxY = y;
  21593. }
  21594. xMarkMap[seriesIndex].sum += value;
  21595. xMarkMap[seriesIndex].counter++;
  21596. }
  21597. }
  21598. lastXP = this.component.grid.getXend();
  21599. var symbolSize;
  21600. for (var j = 0, k = locationMap.length; j < k; j++) {
  21601. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21602. seriesIndex = locationMap[j][m];
  21603. serie = series[seriesIndex];
  21604. data = serie.data[i];
  21605. value = this.getDataFromOption(data, '-');
  21606. if (value != '-') {
  21607. continue;
  21608. }
  21609. if (this.deepQuery([
  21610. data,
  21611. serie,
  21612. this.option
  21613. ], 'calculable')) {
  21614. symbolSize = this.deepQuery([
  21615. data,
  21616. serie
  21617. ], 'symbolSize');
  21618. lastXP -= symbolSize * 2 + 5;
  21619. x = lastXP;
  21620. this.shapeList.push(this._getCalculableItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y, 'vertical'));
  21621. }
  21622. }
  21623. }
  21624. }
  21625. for (var sId in curPLMap) {
  21626. if (curPLMap[sId].length > 0) {
  21627. this.finalPLMap[sId] = this.finalPLMap[sId] || [];
  21628. this.finalPLMap[sId].push(curPLMap[sId]);
  21629. curPLMap[sId] = [];
  21630. }
  21631. }
  21632. this._calculMarkMapXY(xMarkMap, locationMap, 'x');
  21633. this._buildBorkenLine(seriesArray, this.finalPLMap, categoryAxis, 'vertical');
  21634. },
  21635. _buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  21636. var series = this.series;
  21637. var curPLMap = {};
  21638. var xAxis;
  21639. for (var j = 0, k = locationMap.length; j < k; j++) {
  21640. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21641. var seriesIndex = locationMap[j][m];
  21642. var serie = series[seriesIndex];
  21643. xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
  21644. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
  21645. var baseY = yAxis.getCoord(0);
  21646. curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
  21647. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  21648. min0: Number.POSITIVE_INFINITY,
  21649. min1: Number.POSITIVE_INFINITY,
  21650. max0: Number.NEGATIVE_INFINITY,
  21651. max1: Number.NEGATIVE_INFINITY,
  21652. sum0: 0,
  21653. sum1: 0,
  21654. counter0: 0,
  21655. counter1: 0,
  21656. average0: 0,
  21657. average1: 0
  21658. };
  21659. for (var i = 0, l = serie.data.length; i < l; i++) {
  21660. var data = serie.data[i];
  21661. var value = this.getDataFromOption(data, '-');
  21662. if (!(value instanceof Array)) {
  21663. continue;
  21664. }
  21665. var x = xAxis.getCoord(value[0]);
  21666. var y = yAxis.getCoord(value[1]);
  21667. curPLMap[seriesIndex].push([
  21668. x,
  21669. y,
  21670. i,
  21671. value[0],
  21672. x,
  21673. baseY
  21674. ]);
  21675. if (xMarkMap[seriesIndex].min0 > value[0]) {
  21676. xMarkMap[seriesIndex].min0 = value[0];
  21677. xMarkMap[seriesIndex].minY0 = y;
  21678. xMarkMap[seriesIndex].minX0 = x;
  21679. }
  21680. if (xMarkMap[seriesIndex].max0 < value[0]) {
  21681. xMarkMap[seriesIndex].max0 = value[0];
  21682. xMarkMap[seriesIndex].maxY0 = y;
  21683. xMarkMap[seriesIndex].maxX0 = x;
  21684. }
  21685. xMarkMap[seriesIndex].sum0 += value[0];
  21686. xMarkMap[seriesIndex].counter0++;
  21687. if (xMarkMap[seriesIndex].min1 > value[1]) {
  21688. xMarkMap[seriesIndex].min1 = value[1];
  21689. xMarkMap[seriesIndex].minY1 = y;
  21690. xMarkMap[seriesIndex].minX1 = x;
  21691. }
  21692. if (xMarkMap[seriesIndex].max1 < value[1]) {
  21693. xMarkMap[seriesIndex].max1 = value[1];
  21694. xMarkMap[seriesIndex].maxY1 = y;
  21695. xMarkMap[seriesIndex].maxX1 = x;
  21696. }
  21697. xMarkMap[seriesIndex].sum1 += value[1];
  21698. xMarkMap[seriesIndex].counter1++;
  21699. }
  21700. }
  21701. }
  21702. for (var sId in curPLMap) {
  21703. if (curPLMap[sId].length > 0) {
  21704. this.finalPLMap[sId] = this.finalPLMap[sId] || [];
  21705. this.finalPLMap[sId].push(curPLMap[sId]);
  21706. curPLMap[sId] = [];
  21707. }
  21708. }
  21709. this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
  21710. this._buildBorkenLine(seriesArray, this.finalPLMap, xAxis, 'other');
  21711. },
  21712. _buildBorkenLine: function (seriesArray, pointList, categoryAxis, curOrient) {
  21713. var orient = curOrient == 'other' ? 'horizontal' : curOrient;
  21714. var series = this.series;
  21715. var data;
  21716. for (var sIdx = seriesArray.length - 1; sIdx >= 0; sIdx--) {
  21717. var seriesIndex = seriesArray[sIdx];
  21718. var serie = series[seriesIndex];
  21719. var seriesPL = pointList[seriesIndex];
  21720. if (serie.type === this.type && seriesPL != null) {
  21721. var bbox = this._getBbox(seriesIndex, orient);
  21722. var defaultColor = this._sIndex2ColorMap[seriesIndex];
  21723. var lineWidth = this.query(serie, 'itemStyle.normal.lineStyle.width');
  21724. var lineType = this.query(serie, 'itemStyle.normal.lineStyle.type');
  21725. var lineColor = this.query(serie, 'itemStyle.normal.lineStyle.color');
  21726. var normalColor = this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1);
  21727. var isFill = this.query(serie, 'itemStyle.normal.areaStyle') != null;
  21728. var fillNormalColor = this.query(serie, 'itemStyle.normal.areaStyle.color');
  21729. for (var i = 0, l = seriesPL.length; i < l; i++) {
  21730. var singlePL = seriesPL[i];
  21731. var isLarge = curOrient != 'other' && this._isLarge(orient, singlePL);
  21732. if (!isLarge) {
  21733. for (var j = 0, k = singlePL.length; j < k; j++) {
  21734. data = serie.data[singlePL[j][2]];
  21735. if (this.deepQuery([
  21736. data,
  21737. serie,
  21738. this.option
  21739. ], 'calculable') || this.deepQuery([
  21740. data,
  21741. serie
  21742. ], 'showAllSymbol') || categoryAxis.type === 'categoryAxis' && categoryAxis.isMainAxis(singlePL[j][2]) && this.deepQuery([
  21743. data,
  21744. serie
  21745. ], 'symbol') != 'none') {
  21746. this.shapeList.push(this._getSymbol(seriesIndex, singlePL[j][2], singlePL[j][3], singlePL[j][0], singlePL[j][1], orient));
  21747. }
  21748. }
  21749. } else {
  21750. singlePL = this._getLargePointList(orient, singlePL, serie.dataFilter);
  21751. }
  21752. var polylineShape = new PolylineShape({
  21753. zlevel: this.getZlevelBase(),
  21754. z: this.getZBase(),
  21755. style: {
  21756. miterLimit: lineWidth,
  21757. pointList: singlePL,
  21758. strokeColor: lineColor || normalColor || defaultColor,
  21759. lineWidth: lineWidth,
  21760. lineType: lineType,
  21761. smooth: this._getSmooth(serie.smooth),
  21762. smoothConstraint: bbox,
  21763. shadowColor: this.query(serie, 'itemStyle.normal.lineStyle.shadowColor'),
  21764. shadowBlur: this.query(serie, 'itemStyle.normal.lineStyle.shadowBlur'),
  21765. shadowOffsetX: this.query(serie, 'itemStyle.normal.lineStyle.shadowOffsetX'),
  21766. shadowOffsetY: this.query(serie, 'itemStyle.normal.lineStyle.shadowOffsetY')
  21767. },
  21768. hoverable: false,
  21769. _main: true,
  21770. _seriesIndex: seriesIndex,
  21771. _orient: orient
  21772. });
  21773. ecData.pack(polylineShape, series[seriesIndex], seriesIndex, 0, i, series[seriesIndex].name);
  21774. this.shapeList.push(polylineShape);
  21775. if (isFill) {
  21776. var halfSmoothPolygonShape = new HalfSmoothPolygonShape({
  21777. zlevel: this.getZlevelBase(),
  21778. z: this.getZBase(),
  21779. style: {
  21780. miterLimit: lineWidth,
  21781. pointList: zrUtil.clone(singlePL).concat([
  21782. [
  21783. singlePL[singlePL.length - 1][4],
  21784. singlePL[singlePL.length - 1][5]
  21785. ],
  21786. [
  21787. singlePL[0][4],
  21788. singlePL[0][5]
  21789. ]
  21790. ]),
  21791. brushType: 'fill',
  21792. smooth: this._getSmooth(serie.smooth),
  21793. smoothConstraint: bbox,
  21794. color: fillNormalColor ? fillNormalColor : zrColor.alpha(defaultColor, 0.5)
  21795. },
  21796. highlightStyle: { brushType: 'fill' },
  21797. hoverable: false,
  21798. _main: true,
  21799. _seriesIndex: seriesIndex,
  21800. _orient: orient
  21801. });
  21802. ecData.pack(halfSmoothPolygonShape, series[seriesIndex], seriesIndex, 0, i, series[seriesIndex].name);
  21803. this.shapeList.push(halfSmoothPolygonShape);
  21804. }
  21805. }
  21806. }
  21807. }
  21808. },
  21809. _getBbox: function (seriesIndex, orient) {
  21810. var bbox = this.component.grid.getBbox();
  21811. var xMarkMap = this.xMarkMap[seriesIndex];
  21812. if (xMarkMap.minX0 != null) {
  21813. return [
  21814. [
  21815. Math.min(xMarkMap.minX0, xMarkMap.maxX0, xMarkMap.minX1, xMarkMap.maxX1),
  21816. Math.min(xMarkMap.minY0, xMarkMap.maxY0, xMarkMap.minY1, xMarkMap.maxY1)
  21817. ],
  21818. [
  21819. Math.max(xMarkMap.minX0, xMarkMap.maxX0, xMarkMap.minX1, xMarkMap.maxX1),
  21820. Math.max(xMarkMap.minY0, xMarkMap.maxY0, xMarkMap.minY1, xMarkMap.maxY1)
  21821. ]
  21822. ];
  21823. } else if (orient === 'horizontal') {
  21824. bbox[0][1] = Math.min(xMarkMap.minY, xMarkMap.maxY);
  21825. bbox[1][1] = Math.max(xMarkMap.minY, xMarkMap.maxY);
  21826. } else {
  21827. bbox[0][0] = Math.min(xMarkMap.minX, xMarkMap.maxX);
  21828. bbox[1][0] = Math.max(xMarkMap.minX, xMarkMap.maxX);
  21829. }
  21830. return bbox;
  21831. },
  21832. _isLarge: function (orient, singlePL) {
  21833. if (singlePL.length < 2) {
  21834. return false;
  21835. } else {
  21836. return orient === 'horizontal' ? Math.abs(singlePL[0][0] - singlePL[1][0]) < 0.5 : Math.abs(singlePL[0][1] - singlePL[1][1]) < 0.5;
  21837. }
  21838. },
  21839. _getLargePointList: function (orient, singlePL, filter) {
  21840. var total;
  21841. if (orient === 'horizontal') {
  21842. total = this.component.grid.getWidth();
  21843. } else {
  21844. total = this.component.grid.getHeight();
  21845. }
  21846. var len = singlePL.length;
  21847. var newList = [];
  21848. if (typeof filter != 'function') {
  21849. switch (filter) {
  21850. case 'min':
  21851. filter = function (arr) {
  21852. return Math.max.apply(null, arr);
  21853. };
  21854. break;
  21855. case 'max':
  21856. filter = function (arr) {
  21857. return Math.min.apply(null, arr);
  21858. };
  21859. break;
  21860. case 'average':
  21861. filter = function (arr) {
  21862. var total = 0;
  21863. for (var i = 0; i < arr.length; i++) {
  21864. total += arr[i];
  21865. }
  21866. return total / arr.length;
  21867. };
  21868. break;
  21869. default:
  21870. filter = function (arr) {
  21871. return arr[0];
  21872. };
  21873. }
  21874. }
  21875. var windowData = [];
  21876. for (var i = 0; i < total; i++) {
  21877. var idx0 = Math.floor(len / total * i);
  21878. var idx1 = Math.min(Math.floor(len / total * (i + 1)), len);
  21879. if (idx1 <= idx0) {
  21880. continue;
  21881. }
  21882. for (var j = idx0; j < idx1; j++) {
  21883. windowData[j - idx0] = orient === 'horizontal' ? singlePL[j][1] : singlePL[j][0];
  21884. }
  21885. windowData.length = idx1 - idx0;
  21886. var filteredVal = filter(windowData);
  21887. var nearestIdx = -1;
  21888. var minDist = Infinity;
  21889. for (var j = idx0; j < idx1; j++) {
  21890. var val = orient === 'horizontal' ? singlePL[j][1] : singlePL[j][0];
  21891. var dist = Math.abs(val - filteredVal);
  21892. if (dist < minDist) {
  21893. nearestIdx = j;
  21894. minDist = dist;
  21895. }
  21896. }
  21897. var newItem = singlePL[nearestIdx].slice();
  21898. if (orient === 'horizontal') {
  21899. newItem[1] = filteredVal;
  21900. } else {
  21901. newItem[0] = filteredVal;
  21902. }
  21903. newList.push(newItem);
  21904. }
  21905. return newList;
  21906. },
  21907. _getSmooth: function (isSmooth) {
  21908. if (isSmooth) {
  21909. return 0.3;
  21910. } else {
  21911. return 0;
  21912. }
  21913. },
  21914. _getCalculableItem: function (seriesIndex, dataIndex, name, x, y, orient) {
  21915. var series = this.series;
  21916. var color = series[seriesIndex].calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor;
  21917. var itemShape = this._getSymbol(seriesIndex, dataIndex, name, x, y, orient);
  21918. itemShape.style.color = color;
  21919. itemShape.style.strokeColor = color;
  21920. itemShape.rotation = [
  21921. 0,
  21922. 0
  21923. ];
  21924. itemShape.hoverable = false;
  21925. itemShape.draggable = false;
  21926. itemShape.style.text = undefined;
  21927. return itemShape;
  21928. },
  21929. _getSymbol: function (seriesIndex, dataIndex, name, x, y, orient) {
  21930. var series = this.series;
  21931. var serie = series[seriesIndex];
  21932. var data = serie.data[dataIndex];
  21933. var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], this._sIndex2ColorMap[seriesIndex], '#fff', orient === 'vertical' ? 'horizontal' : 'vertical');
  21934. itemShape.zlevel = this.getZlevelBase();
  21935. itemShape.z = this.getZBase() + 1;
  21936. if (this.deepQuery([
  21937. data,
  21938. serie,
  21939. this.option
  21940. ], 'calculable')) {
  21941. this.setCalculable(itemShape);
  21942. itemShape.draggable = true;
  21943. }
  21944. return itemShape;
  21945. },
  21946. getMarkCoord: function (seriesIndex, mpData) {
  21947. var serie = this.series[seriesIndex];
  21948. var xMarkMap = this.xMarkMap[seriesIndex];
  21949. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  21950. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  21951. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
  21952. var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : xMarkMap.maxX0 != null ? '1' : '';
  21953. return [
  21954. xMarkMap[mpData.type + 'X' + valueIndex],
  21955. xMarkMap[mpData.type + 'Y' + valueIndex],
  21956. xMarkMap[mpData.type + 'Line' + valueIndex],
  21957. xMarkMap[mpData.type + valueIndex]
  21958. ];
  21959. }
  21960. return [
  21961. typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
  21962. typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
  21963. ];
  21964. },
  21965. refresh: function (newOption) {
  21966. if (newOption) {
  21967. this.option = newOption;
  21968. this.series = newOption.series;
  21969. }
  21970. this.backupShapeList();
  21971. this._buildShape();
  21972. },
  21973. ontooltipHover: function (param, tipShape) {
  21974. var seriesIndex = param.seriesIndex;
  21975. var dataIndex = param.dataIndex;
  21976. var seriesPL;
  21977. var singlePL;
  21978. var len = seriesIndex.length;
  21979. while (len--) {
  21980. seriesPL = this.finalPLMap[seriesIndex[len]];
  21981. if (seriesPL) {
  21982. for (var i = 0, l = seriesPL.length; i < l; i++) {
  21983. singlePL = seriesPL[i];
  21984. for (var j = 0, k = singlePL.length; j < k; j++) {
  21985. if (dataIndex === singlePL[j][2]) {
  21986. tipShape.push(this._getSymbol(seriesIndex[len], singlePL[j][2], singlePL[j][3], singlePL[j][0], singlePL[j][1], 'horizontal'));
  21987. }
  21988. }
  21989. }
  21990. }
  21991. }
  21992. },
  21993. addDataAnimation: function (params, done) {
  21994. var series = this.series;
  21995. var aniMap = {};
  21996. for (var i = 0, l = params.length; i < l; i++) {
  21997. aniMap[params[i][0]] = params[i];
  21998. }
  21999. var x;
  22000. var dx;
  22001. var y;
  22002. var dy;
  22003. var seriesIndex;
  22004. var pointList;
  22005. var isHorizontal;
  22006. var aniCount = 0;
  22007. function animationDone() {
  22008. aniCount--;
  22009. if (aniCount === 0) {
  22010. done && done();
  22011. }
  22012. }
  22013. function animationDuring(target) {
  22014. target.style.controlPointList = null;
  22015. }
  22016. for (var i = this.shapeList.length - 1; i >= 0; i--) {
  22017. seriesIndex = this.shapeList[i]._seriesIndex;
  22018. if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
  22019. if (this.shapeList[i]._main && this.shapeList[i].style.pointList.length > 1) {
  22020. pointList = this.shapeList[i].style.pointList;
  22021. dx = Math.abs(pointList[0][0] - pointList[1][0]);
  22022. dy = Math.abs(pointList[0][1] - pointList[1][1]);
  22023. isHorizontal = this.shapeList[i]._orient === 'horizontal';
  22024. if (aniMap[seriesIndex][2]) {
  22025. if (this.shapeList[i].type === 'half-smooth-polygon') {
  22026. var len = pointList.length;
  22027. this.shapeList[i].style.pointList[len - 3] = pointList[len - 2];
  22028. this.shapeList[i].style.pointList[len - 3][isHorizontal ? 0 : 1] = pointList[len - 4][isHorizontal ? 0 : 1];
  22029. this.shapeList[i].style.pointList[len - 2] = pointList[len - 1];
  22030. }
  22031. this.shapeList[i].style.pointList.pop();
  22032. isHorizontal ? (x = dx, y = 0) : (x = 0, y = -dy);
  22033. } else {
  22034. this.shapeList[i].style.pointList.shift();
  22035. if (this.shapeList[i].type === 'half-smooth-polygon') {
  22036. var targetPoint = this.shapeList[i].style.pointList.pop();
  22037. isHorizontal ? targetPoint[0] = pointList[0][0] : targetPoint[1] = pointList[0][1];
  22038. this.shapeList[i].style.pointList.push(targetPoint);
  22039. }
  22040. isHorizontal ? (x = -dx, y = 0) : (x = 0, y = dy);
  22041. }
  22042. this.shapeList[i].style.controlPointList = null;
  22043. this.zr.modShape(this.shapeList[i]);
  22044. } else {
  22045. if (aniMap[seriesIndex][2] && this.shapeList[i]._dataIndex === series[seriesIndex].data.length - 1) {
  22046. this.zr.delShape(this.shapeList[i].id);
  22047. continue;
  22048. } else if (!aniMap[seriesIndex][2] && this.shapeList[i]._dataIndex === 0) {
  22049. this.zr.delShape(this.shapeList[i].id);
  22050. continue;
  22051. }
  22052. }
  22053. this.shapeList[i].position = [
  22054. 0,
  22055. 0
  22056. ];
  22057. aniCount++;
  22058. this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
  22059. position: [
  22060. x,
  22061. y
  22062. ]
  22063. }).during(animationDuring).done(animationDone).start();
  22064. }
  22065. }
  22066. if (!aniCount) {
  22067. animationDone();
  22068. }
  22069. }
  22070. };
  22071. function legendLineIcon(ctx, style, refreshNextFrame) {
  22072. var x = style.x;
  22073. var y = style.y;
  22074. var width = style.width;
  22075. var height = style.height;
  22076. var dy = height / 2;
  22077. if (style.symbol.match('empty')) {
  22078. ctx.fillStyle = '#fff';
  22079. }
  22080. style.brushType = 'both';
  22081. var symbol = style.symbol.replace('empty', '').toLowerCase();
  22082. if (symbol.match('star')) {
  22083. dy = symbol.replace('star', '') - 0 || 5;
  22084. y -= 1;
  22085. symbol = 'star';
  22086. } else if (symbol === 'rectangle' || symbol === 'arrow') {
  22087. x += (width - height) / 2;
  22088. width = height;
  22089. }
  22090. var imageLocation = '';
  22091. if (symbol.match('image')) {
  22092. imageLocation = symbol.replace(new RegExp('^image:\\/\\/'), '');
  22093. symbol = 'image';
  22094. x += Math.round((width - height) / 2) - 1;
  22095. width = height = height + 2;
  22096. }
  22097. symbol = IconShape.prototype.iconLibrary[symbol];
  22098. if (symbol) {
  22099. var x2 = style.x;
  22100. var y2 = style.y;
  22101. ctx.moveTo(x2, y2 + dy);
  22102. ctx.lineTo(x2 + 5, y2 + dy);
  22103. ctx.moveTo(x2 + style.width - 5, y2 + dy);
  22104. ctx.lineTo(x2 + style.width, y2 + dy);
  22105. var self = this;
  22106. symbol(ctx, {
  22107. x: x + 4,
  22108. y: y + 4,
  22109. width: width - 8,
  22110. height: height - 8,
  22111. n: dy,
  22112. image: imageLocation
  22113. }, function () {
  22114. self.modSelf();
  22115. refreshNextFrame();
  22116. });
  22117. } else {
  22118. ctx.moveTo(x, y + dy);
  22119. ctx.lineTo(x + width, y + dy);
  22120. }
  22121. }
  22122. IconShape.prototype.iconLibrary['legendLineIcon'] = legendLineIcon;
  22123. zrUtil.inherits(Line, ChartBase);
  22124. require('../chart').define('line', Line);
  22125. return Line;
  22126. });define('echarts/util/shape/HalfSmoothPolygon', [
  22127. 'require',
  22128. 'zrender/shape/Base',
  22129. 'zrender/shape/util/smoothBezier',
  22130. 'zrender/tool/util',
  22131. 'zrender/shape/Polygon'
  22132. ], function (require) {
  22133. var Base = require('zrender/shape/Base');
  22134. var smoothBezier = require('zrender/shape/util/smoothBezier');
  22135. var zrUtil = require('zrender/tool/util');
  22136. function HalfSmoothPolygon(options) {
  22137. Base.call(this, options);
  22138. }
  22139. HalfSmoothPolygon.prototype = {
  22140. type: 'half-smooth-polygon',
  22141. buildPath: function (ctx, style) {
  22142. var pointList = style.pointList;
  22143. if (pointList.length < 2) {
  22144. return;
  22145. }
  22146. if (style.smooth) {
  22147. var controlPoints = smoothBezier(pointList.slice(0, -2), style.smooth, false, style.smoothConstraint);
  22148. ctx.moveTo(pointList[0][0], pointList[0][1]);
  22149. var cp1;
  22150. var cp2;
  22151. var p;
  22152. var l = pointList.length;
  22153. for (var i = 0; i < l - 3; i++) {
  22154. cp1 = controlPoints[i * 2];
  22155. cp2 = controlPoints[i * 2 + 1];
  22156. p = pointList[i + 1];
  22157. ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
  22158. }
  22159. ctx.lineTo(pointList[l - 2][0], pointList[l - 2][1]);
  22160. ctx.lineTo(pointList[l - 1][0], pointList[l - 1][1]);
  22161. ctx.lineTo(pointList[0][0], pointList[0][1]);
  22162. } else {
  22163. require('zrender/shape/Polygon').prototype.buildPath(ctx, style);
  22164. }
  22165. return;
  22166. }
  22167. };
  22168. zrUtil.inherits(HalfSmoothPolygon, Base);
  22169. return HalfSmoothPolygon;
  22170. });define('echarts/chart/bar', [
  22171. 'require',
  22172. './base',
  22173. 'zrender/shape/Rectangle',
  22174. '../component/axis',
  22175. '../component/grid',
  22176. '../component/dataZoom',
  22177. '../config',
  22178. '../util/ecData',
  22179. 'zrender/tool/util',
  22180. 'zrender/tool/color',
  22181. '../chart'
  22182. ], function (require) {
  22183. var ChartBase = require('./base');
  22184. var RectangleShape = require('zrender/shape/Rectangle');
  22185. require('../component/axis');
  22186. require('../component/grid');
  22187. require('../component/dataZoom');
  22188. var ecConfig = require('../config');
  22189. ecConfig.bar = {
  22190. zlevel: 0,
  22191. z: 2,
  22192. clickable: true,
  22193. legendHoverLink: true,
  22194. xAxisIndex: 0,
  22195. yAxisIndex: 0,
  22196. barMinHeight: 0,
  22197. barGap: '30%',
  22198. barCategoryGap: '20%',
  22199. itemStyle: {
  22200. normal: {
  22201. barBorderColor: '#fff',
  22202. barBorderRadius: 0,
  22203. barBorderWidth: 0,
  22204. label: { show: false }
  22205. },
  22206. emphasis: {
  22207. barBorderColor: '#fff',
  22208. barBorderRadius: 0,
  22209. barBorderWidth: 0,
  22210. label: { show: false }
  22211. }
  22212. }
  22213. };
  22214. var ecData = require('../util/ecData');
  22215. var zrUtil = require('zrender/tool/util');
  22216. var zrColor = require('zrender/tool/color');
  22217. function Bar(ecTheme, messageCenter, zr, option, myChart) {
  22218. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  22219. this.refresh(option);
  22220. }
  22221. Bar.prototype = {
  22222. type: ecConfig.CHART_TYPE_BAR,
  22223. _buildShape: function () {
  22224. this._buildPosition();
  22225. },
  22226. _buildNormal: function (seriesArray, maxDataLength, locationMap, xMarkMap, orient) {
  22227. var series = this.series;
  22228. var seriesIndex = locationMap[0][0];
  22229. var serie = series[seriesIndex];
  22230. var isHorizontal = orient == 'horizontal';
  22231. var xAxis = this.component.xAxis;
  22232. var yAxis = this.component.yAxis;
  22233. var categoryAxis = isHorizontal ? xAxis.getAxis(serie.xAxisIndex) : yAxis.getAxis(serie.yAxisIndex);
  22234. var valueAxis;
  22235. var size = this._mapSize(categoryAxis, locationMap);
  22236. var gap = size.gap;
  22237. var barGap = size.barGap;
  22238. var barWidthMap = size.barWidthMap;
  22239. var barMaxWidthMap = size.barMaxWidthMap;
  22240. var barWidth = size.barWidth;
  22241. var barMinHeightMap = size.barMinHeightMap;
  22242. var barHeight;
  22243. var curBarWidth;
  22244. var interval = size.interval;
  22245. var x;
  22246. var y;
  22247. var lastP;
  22248. var baseP;
  22249. var lastN;
  22250. var baseN;
  22251. var barShape;
  22252. var data;
  22253. var value;
  22254. var islandR = this.deepQuery([
  22255. this.ecTheme,
  22256. ecConfig
  22257. ], 'island.r');
  22258. for (var i = 0, l = maxDataLength; i < l; i++) {
  22259. if (categoryAxis.getNameByIndex(i) == null) {
  22260. break;
  22261. }
  22262. isHorizontal ? x = categoryAxis.getCoordByIndex(i) - gap / 2 : y = categoryAxis.getCoordByIndex(i) + gap / 2;
  22263. for (var j = 0, k = locationMap.length; j < k; j++) {
  22264. var yAxisIndex = series[locationMap[j][0]].yAxisIndex || 0;
  22265. var xAxisIndex = series[locationMap[j][0]].xAxisIndex || 0;
  22266. valueAxis = isHorizontal ? yAxis.getAxis(yAxisIndex) : xAxis.getAxis(xAxisIndex);
  22267. baseP = lastP = baseN = lastN = valueAxis.getCoord(0);
  22268. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22269. seriesIndex = locationMap[j][m];
  22270. serie = series[seriesIndex];
  22271. data = serie.data[i];
  22272. value = this.getDataFromOption(data, '-');
  22273. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  22274. min: Number.POSITIVE_INFINITY,
  22275. max: Number.NEGATIVE_INFINITY,
  22276. sum: 0,
  22277. counter: 0,
  22278. average: 0
  22279. };
  22280. curBarWidth = Math.min(barMaxWidthMap[seriesIndex] || Number.MAX_VALUE, barWidthMap[seriesIndex] || barWidth);
  22281. if (value === '-') {
  22282. continue;
  22283. }
  22284. if (value > 0) {
  22285. barHeight = m > 0 ? valueAxis.getCoordSize(value) : isHorizontal ? baseP - valueAxis.getCoord(value) : valueAxis.getCoord(value) - baseP;
  22286. if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
  22287. barHeight = barMinHeightMap[seriesIndex];
  22288. }
  22289. if (isHorizontal) {
  22290. lastP -= barHeight;
  22291. y = lastP;
  22292. } else {
  22293. x = lastP;
  22294. lastP += barHeight;
  22295. }
  22296. } else if (value < 0) {
  22297. barHeight = m > 0 ? valueAxis.getCoordSize(value) : isHorizontal ? valueAxis.getCoord(value) - baseN : baseN - valueAxis.getCoord(value);
  22298. if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
  22299. barHeight = barMinHeightMap[seriesIndex];
  22300. }
  22301. if (isHorizontal) {
  22302. y = lastN;
  22303. lastN += barHeight;
  22304. } else {
  22305. lastN -= barHeight;
  22306. x = lastN;
  22307. }
  22308. } else {
  22309. barHeight = 0;
  22310. if (isHorizontal) {
  22311. lastP -= barHeight;
  22312. y = lastP;
  22313. } else {
  22314. x = lastP;
  22315. lastP += barHeight;
  22316. }
  22317. }
  22318. xMarkMap[seriesIndex][i] = isHorizontal ? x + curBarWidth / 2 : y - curBarWidth / 2;
  22319. if (xMarkMap[seriesIndex].min > value) {
  22320. xMarkMap[seriesIndex].min = value;
  22321. if (isHorizontal) {
  22322. xMarkMap[seriesIndex].minY = y;
  22323. xMarkMap[seriesIndex].minX = xMarkMap[seriesIndex][i];
  22324. } else {
  22325. xMarkMap[seriesIndex].minX = x + barHeight;
  22326. xMarkMap[seriesIndex].minY = xMarkMap[seriesIndex][i];
  22327. }
  22328. }
  22329. if (xMarkMap[seriesIndex].max < value) {
  22330. xMarkMap[seriesIndex].max = value;
  22331. if (isHorizontal) {
  22332. xMarkMap[seriesIndex].maxY = y;
  22333. xMarkMap[seriesIndex].maxX = xMarkMap[seriesIndex][i];
  22334. } else {
  22335. xMarkMap[seriesIndex].maxX = x + barHeight;
  22336. xMarkMap[seriesIndex].maxY = xMarkMap[seriesIndex][i];
  22337. }
  22338. }
  22339. xMarkMap[seriesIndex].sum += value;
  22340. xMarkMap[seriesIndex].counter++;
  22341. if (i % interval === 0) {
  22342. barShape = this._getBarItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y - (isHorizontal ? 0 : curBarWidth), isHorizontal ? curBarWidth : barHeight, isHorizontal ? barHeight : curBarWidth, isHorizontal ? 'vertical' : 'horizontal');
  22343. this.shapeList.push(new RectangleShape(barShape));
  22344. }
  22345. }
  22346. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22347. seriesIndex = locationMap[j][m];
  22348. serie = series[seriesIndex];
  22349. data = serie.data[i];
  22350. value = this.getDataFromOption(data, '-');
  22351. curBarWidth = Math.min(barMaxWidthMap[seriesIndex] || Number.MAX_VALUE, barWidthMap[seriesIndex] || barWidth);
  22352. if (value != '-') {
  22353. continue;
  22354. }
  22355. if (this.deepQuery([
  22356. data,
  22357. serie,
  22358. this.option
  22359. ], 'calculable')) {
  22360. if (isHorizontal) {
  22361. lastP -= islandR;
  22362. y = lastP;
  22363. } else {
  22364. x = lastP;
  22365. lastP += islandR;
  22366. }
  22367. barShape = this._getBarItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y - (isHorizontal ? 0 : curBarWidth), isHorizontal ? curBarWidth : islandR, isHorizontal ? islandR : curBarWidth, isHorizontal ? 'vertical' : 'horizontal');
  22368. barShape.hoverable = false;
  22369. barShape.draggable = false;
  22370. barShape.style.lineWidth = 1;
  22371. barShape.style.brushType = 'stroke';
  22372. barShape.style.strokeColor = serie.calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor;
  22373. this.shapeList.push(new RectangleShape(barShape));
  22374. }
  22375. }
  22376. isHorizontal ? x += curBarWidth + barGap : y -= curBarWidth + barGap;
  22377. }
  22378. }
  22379. this._calculMarkMapXY(xMarkMap, locationMap, isHorizontal ? 'y' : 'x');
  22380. },
  22381. _buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  22382. return this._buildNormal(seriesArray, maxDataLength, locationMap, xMarkMap, 'horizontal');
  22383. },
  22384. _buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  22385. return this._buildNormal(seriesArray, maxDataLength, locationMap, xMarkMap, 'vertical');
  22386. },
  22387. _buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  22388. var series = this.series;
  22389. for (var j = 0, k = locationMap.length; j < k; j++) {
  22390. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22391. var seriesIndex = locationMap[j][m];
  22392. var serie = series[seriesIndex];
  22393. var xAxisIndex = serie.xAxisIndex || 0;
  22394. var xAxis = this.component.xAxis.getAxis(xAxisIndex);
  22395. var baseX = xAxis.getCoord(0);
  22396. var yAxisIndex = serie.yAxisIndex || 0;
  22397. var yAxis = this.component.yAxis.getAxis(yAxisIndex);
  22398. var baseY = yAxis.getCoord(0);
  22399. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  22400. min0: Number.POSITIVE_INFINITY,
  22401. min1: Number.POSITIVE_INFINITY,
  22402. max0: Number.NEGATIVE_INFINITY,
  22403. max1: Number.NEGATIVE_INFINITY,
  22404. sum0: 0,
  22405. sum1: 0,
  22406. counter0: 0,
  22407. counter1: 0,
  22408. average0: 0,
  22409. average1: 0
  22410. };
  22411. for (var i = 0, l = serie.data.length; i < l; i++) {
  22412. var data = serie.data[i];
  22413. var value = this.getDataFromOption(data, '-');
  22414. if (!(value instanceof Array)) {
  22415. continue;
  22416. }
  22417. var x = xAxis.getCoord(value[0]);
  22418. var y = yAxis.getCoord(value[1]);
  22419. var queryTarget = [
  22420. data,
  22421. serie
  22422. ];
  22423. var barWidth = this.deepQuery(queryTarget, 'barWidth') || 10;
  22424. var barHeight = this.deepQuery(queryTarget, 'barHeight');
  22425. var orient;
  22426. var barShape;
  22427. if (barHeight != null) {
  22428. orient = 'horizontal';
  22429. if (value[0] > 0) {
  22430. barWidth = x - baseX;
  22431. x -= barWidth;
  22432. } else if (value[0] < 0) {
  22433. barWidth = baseX - x;
  22434. } else {
  22435. barWidth = 0;
  22436. }
  22437. barShape = this._getBarItem(seriesIndex, i, value[0], x, y - barHeight / 2, barWidth, barHeight, orient);
  22438. } else {
  22439. orient = 'vertical';
  22440. if (value[1] > 0) {
  22441. barHeight = baseY - y;
  22442. } else if (value[1] < 0) {
  22443. barHeight = y - baseY;
  22444. y -= barHeight;
  22445. } else {
  22446. barHeight = 0;
  22447. }
  22448. barShape = this._getBarItem(seriesIndex, i, value[0], x - barWidth / 2, y, barWidth, barHeight, orient);
  22449. }
  22450. this.shapeList.push(new RectangleShape(barShape));
  22451. x = xAxis.getCoord(value[0]);
  22452. y = yAxis.getCoord(value[1]);
  22453. if (xMarkMap[seriesIndex].min0 > value[0]) {
  22454. xMarkMap[seriesIndex].min0 = value[0];
  22455. xMarkMap[seriesIndex].minY0 = y;
  22456. xMarkMap[seriesIndex].minX0 = x;
  22457. }
  22458. if (xMarkMap[seriesIndex].max0 < value[0]) {
  22459. xMarkMap[seriesIndex].max0 = value[0];
  22460. xMarkMap[seriesIndex].maxY0 = y;
  22461. xMarkMap[seriesIndex].maxX0 = x;
  22462. }
  22463. xMarkMap[seriesIndex].sum0 += value[0];
  22464. xMarkMap[seriesIndex].counter0++;
  22465. if (xMarkMap[seriesIndex].min1 > value[1]) {
  22466. xMarkMap[seriesIndex].min1 = value[1];
  22467. xMarkMap[seriesIndex].minY1 = y;
  22468. xMarkMap[seriesIndex].minX1 = x;
  22469. }
  22470. if (xMarkMap[seriesIndex].max1 < value[1]) {
  22471. xMarkMap[seriesIndex].max1 = value[1];
  22472. xMarkMap[seriesIndex].maxY1 = y;
  22473. xMarkMap[seriesIndex].maxX1 = x;
  22474. }
  22475. xMarkMap[seriesIndex].sum1 += value[1];
  22476. xMarkMap[seriesIndex].counter1++;
  22477. }
  22478. }
  22479. }
  22480. this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
  22481. },
  22482. _mapSize: function (categoryAxis, locationMap, ignoreUserDefined) {
  22483. var res = this._findSpecialBarSzie(locationMap, ignoreUserDefined);
  22484. var barWidthMap = res.barWidthMap;
  22485. var barMaxWidthMap = res.barMaxWidthMap;
  22486. var barMinHeightMap = res.barMinHeightMap;
  22487. var sBarWidthCounter = res.sBarWidthCounter;
  22488. var sBarWidthTotal = res.sBarWidthTotal;
  22489. var barGap = res.barGap;
  22490. var barCategoryGap = res.barCategoryGap;
  22491. var gap;
  22492. var barWidth;
  22493. var interval = 1;
  22494. if (locationMap.length != sBarWidthCounter) {
  22495. if (!ignoreUserDefined) {
  22496. gap = typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/) ? (categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) - 0 : categoryAxis.getGap() - barCategoryGap;
  22497. if (typeof barGap === 'string' && barGap.match(/%$/)) {
  22498. barGap = parseFloat(barGap) / 100;
  22499. barWidth = +((gap - sBarWidthTotal) / ((locationMap.length - 1) * barGap + locationMap.length - sBarWidthCounter)).toFixed(2);
  22500. barGap = barWidth * barGap;
  22501. } else {
  22502. barGap = parseFloat(barGap);
  22503. barWidth = +((gap - sBarWidthTotal - barGap * (locationMap.length - 1)) / (locationMap.length - sBarWidthCounter)).toFixed(2);
  22504. }
  22505. if (barWidth <= 0) {
  22506. return this._mapSize(categoryAxis, locationMap, true);
  22507. }
  22508. } else {
  22509. gap = categoryAxis.getGap();
  22510. barGap = 0;
  22511. barWidth = +(gap / locationMap.length).toFixed(2);
  22512. if (barWidth <= 0) {
  22513. interval = Math.floor(locationMap.length / gap);
  22514. barWidth = 1;
  22515. }
  22516. }
  22517. } else {
  22518. gap = sBarWidthCounter > 1 ? typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/) ? +(categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) : categoryAxis.getGap() - barCategoryGap : sBarWidthTotal;
  22519. barWidth = 0;
  22520. barGap = sBarWidthCounter > 1 ? +((gap - sBarWidthTotal) / (sBarWidthCounter - 1)).toFixed(2) : 0;
  22521. if (barGap < 0) {
  22522. return this._mapSize(categoryAxis, locationMap, true);
  22523. }
  22524. }
  22525. return this._recheckBarMaxWidth(locationMap, barWidthMap, barMaxWidthMap, barMinHeightMap, gap, barWidth, barGap, interval);
  22526. },
  22527. _findSpecialBarSzie: function (locationMap, ignoreUserDefined) {
  22528. var series = this.series;
  22529. var barWidthMap = {};
  22530. var barMaxWidthMap = {};
  22531. var barMinHeightMap = {};
  22532. var sBarWidth;
  22533. var sBarMaxWidth;
  22534. var sBarWidthCounter = 0;
  22535. var sBarWidthTotal = 0;
  22536. var barGap;
  22537. var barCategoryGap;
  22538. for (var j = 0, k = locationMap.length; j < k; j++) {
  22539. var hasFound = {
  22540. barWidth: false,
  22541. barMaxWidth: false
  22542. };
  22543. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22544. var seriesIndex = locationMap[j][m];
  22545. var queryTarget = series[seriesIndex];
  22546. if (!ignoreUserDefined) {
  22547. if (!hasFound.barWidth) {
  22548. sBarWidth = this.query(queryTarget, 'barWidth');
  22549. if (sBarWidth != null) {
  22550. barWidthMap[seriesIndex] = sBarWidth;
  22551. sBarWidthTotal += sBarWidth;
  22552. sBarWidthCounter++;
  22553. hasFound.barWidth = true;
  22554. for (var ii = 0, ll = m; ii < ll; ii++) {
  22555. var pSeriesIndex = locationMap[j][ii];
  22556. barWidthMap[pSeriesIndex] = sBarWidth;
  22557. }
  22558. }
  22559. } else {
  22560. barWidthMap[seriesIndex] = sBarWidth;
  22561. }
  22562. if (!hasFound.barMaxWidth) {
  22563. sBarMaxWidth = this.query(queryTarget, 'barMaxWidth');
  22564. if (sBarMaxWidth != null) {
  22565. barMaxWidthMap[seriesIndex] = sBarMaxWidth;
  22566. hasFound.barMaxWidth = true;
  22567. for (var ii = 0, ll = m; ii < ll; ii++) {
  22568. var pSeriesIndex = locationMap[j][ii];
  22569. barMaxWidthMap[pSeriesIndex] = sBarMaxWidth;
  22570. }
  22571. }
  22572. } else {
  22573. barMaxWidthMap[seriesIndex] = sBarMaxWidth;
  22574. }
  22575. }
  22576. barMinHeightMap[seriesIndex] = this.query(queryTarget, 'barMinHeight');
  22577. barGap = barGap != null ? barGap : this.query(queryTarget, 'barGap');
  22578. barCategoryGap = barCategoryGap != null ? barCategoryGap : this.query(queryTarget, 'barCategoryGap');
  22579. }
  22580. }
  22581. return {
  22582. barWidthMap: barWidthMap,
  22583. barMaxWidthMap: barMaxWidthMap,
  22584. barMinHeightMap: barMinHeightMap,
  22585. sBarWidth: sBarWidth,
  22586. sBarMaxWidth: sBarMaxWidth,
  22587. sBarWidthCounter: sBarWidthCounter,
  22588. sBarWidthTotal: sBarWidthTotal,
  22589. barGap: barGap,
  22590. barCategoryGap: barCategoryGap
  22591. };
  22592. },
  22593. _recheckBarMaxWidth: function (locationMap, barWidthMap, barMaxWidthMap, barMinHeightMap, gap, barWidth, barGap, interval) {
  22594. for (var j = 0, k = locationMap.length; j < k; j++) {
  22595. var seriesIndex = locationMap[j][0];
  22596. if (barMaxWidthMap[seriesIndex] && barMaxWidthMap[seriesIndex] < barWidth) {
  22597. gap -= barWidth - barMaxWidthMap[seriesIndex];
  22598. }
  22599. }
  22600. return {
  22601. barWidthMap: barWidthMap,
  22602. barMaxWidthMap: barMaxWidthMap,
  22603. barMinHeightMap: barMinHeightMap,
  22604. gap: gap,
  22605. barWidth: barWidth,
  22606. barGap: barGap,
  22607. interval: interval
  22608. };
  22609. },
  22610. _getBarItem: function (seriesIndex, dataIndex, name, x, y, width, height, orient) {
  22611. var series = this.series;
  22612. var barShape;
  22613. var serie = series[seriesIndex];
  22614. var data = serie.data[dataIndex];
  22615. var defaultColor = this._sIndex2ColorMap[seriesIndex];
  22616. var queryTarget = [
  22617. data,
  22618. serie
  22619. ];
  22620. var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
  22621. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
  22622. var normalBorderWidth = normal.barBorderWidth;
  22623. barShape = {
  22624. zlevel: this.getZlevelBase(),
  22625. z: this.getZBase(),
  22626. clickable: this.deepQuery(queryTarget, 'clickable'),
  22627. style: {
  22628. x: x,
  22629. y: y,
  22630. width: width,
  22631. height: height,
  22632. brushType: 'both',
  22633. color: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color') || defaultColor, seriesIndex, dataIndex, data),
  22634. radius: normal.barBorderRadius,
  22635. lineWidth: normalBorderWidth,
  22636. strokeColor: normal.barBorderColor
  22637. },
  22638. highlightStyle: {
  22639. color: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data),
  22640. radius: emphasis.barBorderRadius,
  22641. lineWidth: emphasis.barBorderWidth,
  22642. strokeColor: emphasis.barBorderColor
  22643. },
  22644. _orient: orient
  22645. };
  22646. var barShapeStyle = barShape.style;
  22647. barShape.highlightStyle.color = barShape.highlightStyle.color || (typeof barShapeStyle.color === 'string' ? zrColor.lift(barShapeStyle.color, -0.3) : barShapeStyle.color);
  22648. barShapeStyle.x = Math.floor(barShapeStyle.x);
  22649. barShapeStyle.y = Math.floor(barShapeStyle.y);
  22650. barShapeStyle.height = Math.ceil(barShapeStyle.height);
  22651. barShapeStyle.width = Math.ceil(barShapeStyle.width);
  22652. if (normalBorderWidth > 0 && barShapeStyle.height > normalBorderWidth && barShapeStyle.width > normalBorderWidth) {
  22653. barShapeStyle.y += normalBorderWidth / 2;
  22654. barShapeStyle.height -= normalBorderWidth;
  22655. barShapeStyle.x += normalBorderWidth / 2;
  22656. barShapeStyle.width -= normalBorderWidth;
  22657. } else {
  22658. barShapeStyle.brushType = 'fill';
  22659. }
  22660. barShape.highlightStyle.textColor = barShape.highlightStyle.color;
  22661. barShape = this.addLabel(barShape, serie, data, name, orient);
  22662. var barShapeStyleList = [
  22663. barShapeStyle,
  22664. barShape.highlightStyle
  22665. ];
  22666. for (var i = 0, l = barShapeStyleList.length; i < l; i++) {
  22667. var textPosition = barShapeStyleList[i].textPosition;
  22668. if (textPosition === 'insideLeft' || textPosition === 'insideRight' || textPosition === 'insideTop' || textPosition === 'insideBottom') {
  22669. var gap = 5;
  22670. switch (textPosition) {
  22671. case 'insideLeft':
  22672. barShapeStyleList[i].textX = barShapeStyle.x + gap;
  22673. barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
  22674. barShapeStyleList[i].textAlign = 'left';
  22675. barShapeStyleList[i].textBaseline = 'middle';
  22676. break;
  22677. case 'insideRight':
  22678. barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width - gap;
  22679. barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
  22680. barShapeStyleList[i].textAlign = 'right';
  22681. barShapeStyleList[i].textBaseline = 'middle';
  22682. break;
  22683. case 'insideTop':
  22684. barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
  22685. barShapeStyleList[i].textY = barShapeStyle.y + gap / 2;
  22686. barShapeStyleList[i].textAlign = 'center';
  22687. barShapeStyleList[i].textBaseline = 'top';
  22688. break;
  22689. case 'insideBottom':
  22690. barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
  22691. barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height - gap / 2;
  22692. barShapeStyleList[i].textAlign = 'center';
  22693. barShapeStyleList[i].textBaseline = 'bottom';
  22694. break;
  22695. }
  22696. barShapeStyleList[i].textPosition = 'specific';
  22697. barShapeStyleList[i].textColor = barShapeStyleList[i].textColor || '#fff';
  22698. }
  22699. }
  22700. if (this.deepQuery([
  22701. data,
  22702. serie,
  22703. this.option
  22704. ], 'calculable')) {
  22705. this.setCalculable(barShape);
  22706. barShape.draggable = true;
  22707. }
  22708. ecData.pack(barShape, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, name);
  22709. return barShape;
  22710. },
  22711. getMarkCoord: function (seriesIndex, mpData) {
  22712. var serie = this.series[seriesIndex];
  22713. var xMarkMap = this.xMarkMap[seriesIndex];
  22714. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  22715. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  22716. var dataIndex;
  22717. var pos;
  22718. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
  22719. var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : xMarkMap.maxX0 != null ? '1' : '';
  22720. pos = [
  22721. xMarkMap[mpData.type + 'X' + valueIndex],
  22722. xMarkMap[mpData.type + 'Y' + valueIndex],
  22723. xMarkMap[mpData.type + 'Line' + valueIndex],
  22724. xMarkMap[mpData.type + valueIndex]
  22725. ];
  22726. } else if (xMarkMap.isHorizontal) {
  22727. dataIndex = typeof mpData.xAxis === 'string' && xAxis.getIndexByName ? xAxis.getIndexByName(mpData.xAxis) : mpData.xAxis || 0;
  22728. var x = xMarkMap[dataIndex];
  22729. x = x != null ? x : typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0);
  22730. pos = [
  22731. x,
  22732. yAxis.getCoord(mpData.yAxis || 0)
  22733. ];
  22734. } else {
  22735. dataIndex = typeof mpData.yAxis === 'string' && yAxis.getIndexByName ? yAxis.getIndexByName(mpData.yAxis) : mpData.yAxis || 0;
  22736. var y = xMarkMap[dataIndex];
  22737. y = y != null ? y : typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0);
  22738. pos = [
  22739. xAxis.getCoord(mpData.xAxis || 0),
  22740. y
  22741. ];
  22742. }
  22743. return pos;
  22744. },
  22745. refresh: function (newOption) {
  22746. if (newOption) {
  22747. this.option = newOption;
  22748. this.series = newOption.series;
  22749. }
  22750. this.backupShapeList();
  22751. this._buildShape();
  22752. },
  22753. addDataAnimation: function (params, done) {
  22754. var series = this.series;
  22755. var aniMap = {};
  22756. for (var i = 0, l = params.length; i < l; i++) {
  22757. aniMap[params[i][0]] = params[i];
  22758. }
  22759. var x;
  22760. var dx;
  22761. var y;
  22762. var dy;
  22763. var serie;
  22764. var seriesIndex;
  22765. var dataIndex;
  22766. var aniCount = 0;
  22767. function animationDone() {
  22768. aniCount--;
  22769. if (aniCount === 0) {
  22770. done && done();
  22771. }
  22772. }
  22773. for (var i = this.shapeList.length - 1; i >= 0; i--) {
  22774. seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
  22775. if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
  22776. if (this.shapeList[i].type === 'rectangle') {
  22777. dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
  22778. serie = series[seriesIndex];
  22779. if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
  22780. this.zr.delShape(this.shapeList[i].id);
  22781. continue;
  22782. } else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
  22783. this.zr.delShape(this.shapeList[i].id);
  22784. continue;
  22785. }
  22786. if (this.shapeList[i]._orient === 'horizontal') {
  22787. dy = this.component.yAxis.getAxis(serie.yAxisIndex || 0).getGap();
  22788. y = aniMap[seriesIndex][2] ? -dy : dy;
  22789. x = 0;
  22790. } else {
  22791. dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
  22792. x = aniMap[seriesIndex][2] ? dx : -dx;
  22793. y = 0;
  22794. }
  22795. this.shapeList[i].position = [
  22796. 0,
  22797. 0
  22798. ];
  22799. aniCount++;
  22800. this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
  22801. position: [
  22802. x,
  22803. y
  22804. ]
  22805. }).done(animationDone).start();
  22806. }
  22807. }
  22808. }
  22809. if (!aniCount) {
  22810. animationDone();
  22811. }
  22812. }
  22813. };
  22814. zrUtil.inherits(Bar, ChartBase);
  22815. require('../chart').define('bar', Bar);
  22816. return Bar;
  22817. });define('echarts/chart/scatter', [
  22818. 'require',
  22819. './base',
  22820. '../util/shape/Symbol',
  22821. '../component/axis',
  22822. '../component/grid',
  22823. '../component/dataZoom',
  22824. '../component/dataRange',
  22825. '../config',
  22826. 'zrender/tool/util',
  22827. 'zrender/tool/color',
  22828. '../chart'
  22829. ], function (require) {
  22830. var ChartBase = require('./base');
  22831. var SymbolShape = require('../util/shape/Symbol');
  22832. require('../component/axis');
  22833. require('../component/grid');
  22834. require('../component/dataZoom');
  22835. require('../component/dataRange');
  22836. var ecConfig = require('../config');
  22837. ecConfig.scatter = {
  22838. zlevel: 0,
  22839. z: 2,
  22840. clickable: true,
  22841. legendHoverLink: true,
  22842. xAxisIndex: 0,
  22843. yAxisIndex: 0,
  22844. symbolSize: 4,
  22845. large: false,
  22846. largeThreshold: 2000,
  22847. itemStyle: {
  22848. normal: { label: { show: false } },
  22849. emphasis: { label: { show: false } }
  22850. }
  22851. };
  22852. var zrUtil = require('zrender/tool/util');
  22853. var zrColor = require('zrender/tool/color');
  22854. function Scatter(ecTheme, messageCenter, zr, option, myChart) {
  22855. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  22856. this.refresh(option);
  22857. }
  22858. Scatter.prototype = {
  22859. type: ecConfig.CHART_TYPE_SCATTER,
  22860. _buildShape: function () {
  22861. var series = this.series;
  22862. this._sIndex2ColorMap = {};
  22863. this._symbol = this.option.symbolList;
  22864. this._sIndex2ShapeMap = {};
  22865. this.selectedMap = {};
  22866. this.xMarkMap = {};
  22867. var legend = this.component.legend;
  22868. var seriesArray = [];
  22869. var serie;
  22870. var serieName;
  22871. var iconShape;
  22872. var iconType;
  22873. for (var i = 0, l = series.length; i < l; i++) {
  22874. serie = series[i];
  22875. serieName = serie.name;
  22876. if (serie.type === ecConfig.CHART_TYPE_SCATTER) {
  22877. series[i] = this.reformOption(series[i]);
  22878. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  22879. this._sIndex2ShapeMap[i] = this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
  22880. if (legend) {
  22881. this.selectedMap[serieName] = legend.isSelected(serieName);
  22882. this._sIndex2ColorMap[i] = zrColor.alpha(legend.getColor(serieName), 0.5);
  22883. iconShape = legend.getItemShape(serieName);
  22884. if (iconShape) {
  22885. var iconType = this._sIndex2ShapeMap[i];
  22886. iconShape.style.brushType = iconType.match('empty') ? 'stroke' : 'both';
  22887. iconType = iconType.replace('empty', '').toLowerCase();
  22888. if (iconType.match('rectangle')) {
  22889. iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
  22890. iconShape.style.width = iconShape.style.height;
  22891. }
  22892. if (iconType.match('star')) {
  22893. iconShape.style.n = iconType.replace('star', '') - 0 || 5;
  22894. iconType = 'star';
  22895. }
  22896. if (iconType.match('image')) {
  22897. iconShape.style.image = iconType.replace(new RegExp('^image:\\/\\/'), '');
  22898. iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
  22899. iconShape.style.width = iconShape.style.height;
  22900. iconType = 'image';
  22901. }
  22902. iconShape.style.iconType = iconType;
  22903. legend.setItemShape(serieName, iconShape);
  22904. }
  22905. } else {
  22906. this.selectedMap[serieName] = true;
  22907. this._sIndex2ColorMap[i] = zrColor.alpha(this.zr.getColor(i), 0.5);
  22908. }
  22909. if (this.selectedMap[serieName]) {
  22910. seriesArray.push(i);
  22911. }
  22912. }
  22913. }
  22914. this._buildSeries(seriesArray);
  22915. this.addShapeList();
  22916. },
  22917. _buildSeries: function (seriesArray) {
  22918. if (seriesArray.length === 0) {
  22919. return;
  22920. }
  22921. var series = this.series;
  22922. var seriesIndex;
  22923. var serie;
  22924. var data;
  22925. var value;
  22926. var xAxis;
  22927. var yAxis;
  22928. var pointList = {};
  22929. var x;
  22930. var y;
  22931. for (var j = 0, k = seriesArray.length; j < k; j++) {
  22932. seriesIndex = seriesArray[j];
  22933. serie = series[seriesIndex];
  22934. if (serie.data.length === 0) {
  22935. continue;
  22936. }
  22937. xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
  22938. yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
  22939. pointList[seriesIndex] = [];
  22940. for (var i = 0, l = serie.data.length; i < l; i++) {
  22941. data = serie.data[i];
  22942. value = this.getDataFromOption(data, '-');
  22943. if (value === '-' || value.length < 2) {
  22944. continue;
  22945. }
  22946. x = xAxis.getCoord(value[0]);
  22947. y = yAxis.getCoord(value[1]);
  22948. pointList[seriesIndex].push([
  22949. x,
  22950. y,
  22951. i,
  22952. data.name || ''
  22953. ]);
  22954. }
  22955. this.xMarkMap[seriesIndex] = this._markMap(xAxis, yAxis, serie.data, pointList[seriesIndex]);
  22956. this.buildMark(seriesIndex);
  22957. }
  22958. this._buildPointList(pointList);
  22959. },
  22960. _markMap: function (xAxis, yAxis, data, pointList) {
  22961. var xMarkMap = {
  22962. min0: Number.POSITIVE_INFINITY,
  22963. max0: Number.NEGATIVE_INFINITY,
  22964. sum0: 0,
  22965. counter0: 0,
  22966. average0: 0,
  22967. min1: Number.POSITIVE_INFINITY,
  22968. max1: Number.NEGATIVE_INFINITY,
  22969. sum1: 0,
  22970. counter1: 0,
  22971. average1: 0
  22972. };
  22973. var value;
  22974. for (var i = 0, l = pointList.length; i < l; i++) {
  22975. value = data[pointList[i][2]].value || data[pointList[i][2]];
  22976. if (xMarkMap.min0 > value[0]) {
  22977. xMarkMap.min0 = value[0];
  22978. xMarkMap.minY0 = pointList[i][1];
  22979. xMarkMap.minX0 = pointList[i][0];
  22980. }
  22981. if (xMarkMap.max0 < value[0]) {
  22982. xMarkMap.max0 = value[0];
  22983. xMarkMap.maxY0 = pointList[i][1];
  22984. xMarkMap.maxX0 = pointList[i][0];
  22985. }
  22986. xMarkMap.sum0 += value[0];
  22987. xMarkMap.counter0++;
  22988. if (xMarkMap.min1 > value[1]) {
  22989. xMarkMap.min1 = value[1];
  22990. xMarkMap.minY1 = pointList[i][1];
  22991. xMarkMap.minX1 = pointList[i][0];
  22992. }
  22993. if (xMarkMap.max1 < value[1]) {
  22994. xMarkMap.max1 = value[1];
  22995. xMarkMap.maxY1 = pointList[i][1];
  22996. xMarkMap.maxX1 = pointList[i][0];
  22997. }
  22998. xMarkMap.sum1 += value[1];
  22999. xMarkMap.counter1++;
  23000. }
  23001. var gridX = this.component.grid.getX();
  23002. var gridXend = this.component.grid.getXend();
  23003. var gridY = this.component.grid.getY();
  23004. var gridYend = this.component.grid.getYend();
  23005. xMarkMap.average0 = xMarkMap.sum0 / xMarkMap.counter0;
  23006. var x = xAxis.getCoord(xMarkMap.average0);
  23007. xMarkMap.averageLine0 = [
  23008. [
  23009. x,
  23010. gridYend
  23011. ],
  23012. [
  23013. x,
  23014. gridY
  23015. ]
  23016. ];
  23017. xMarkMap.minLine0 = [
  23018. [
  23019. xMarkMap.minX0,
  23020. gridYend
  23021. ],
  23022. [
  23023. xMarkMap.minX0,
  23024. gridY
  23025. ]
  23026. ];
  23027. xMarkMap.maxLine0 = [
  23028. [
  23029. xMarkMap.maxX0,
  23030. gridYend
  23031. ],
  23032. [
  23033. xMarkMap.maxX0,
  23034. gridY
  23035. ]
  23036. ];
  23037. xMarkMap.average1 = xMarkMap.sum1 / xMarkMap.counter1;
  23038. var y = yAxis.getCoord(xMarkMap.average1);
  23039. xMarkMap.averageLine1 = [
  23040. [
  23041. gridX,
  23042. y
  23043. ],
  23044. [
  23045. gridXend,
  23046. y
  23047. ]
  23048. ];
  23049. xMarkMap.minLine1 = [
  23050. [
  23051. gridX,
  23052. xMarkMap.minY1
  23053. ],
  23054. [
  23055. gridXend,
  23056. xMarkMap.minY1
  23057. ]
  23058. ];
  23059. xMarkMap.maxLine1 = [
  23060. [
  23061. gridX,
  23062. xMarkMap.maxY1
  23063. ],
  23064. [
  23065. gridXend,
  23066. xMarkMap.maxY1
  23067. ]
  23068. ];
  23069. return xMarkMap;
  23070. },
  23071. _buildPointList: function (pointList) {
  23072. var series = this.series;
  23073. var serie;
  23074. var seriesPL;
  23075. var singlePoint;
  23076. var shape;
  23077. for (var seriesIndex in pointList) {
  23078. serie = series[seriesIndex];
  23079. seriesPL = pointList[seriesIndex];
  23080. if (serie.large && serie.data.length > serie.largeThreshold) {
  23081. this.shapeList.push(this._getLargeSymbol(seriesPL, this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1) || this._sIndex2ColorMap[seriesIndex]));
  23082. continue;
  23083. }
  23084. for (var i = 0, l = seriesPL.length; i < l; i++) {
  23085. singlePoint = seriesPL[i];
  23086. shape = this._getSymbol(seriesIndex, singlePoint[2], singlePoint[3], singlePoint[0], singlePoint[1]);
  23087. shape && this.shapeList.push(shape);
  23088. }
  23089. }
  23090. },
  23091. _getSymbol: function (seriesIndex, dataIndex, name, x, y) {
  23092. var series = this.series;
  23093. var serie = series[seriesIndex];
  23094. var data = serie.data[dataIndex];
  23095. var dataRange = this.component.dataRange;
  23096. var rangColor;
  23097. if (dataRange) {
  23098. rangColor = isNaN(data[2]) ? this._sIndex2ColorMap[seriesIndex] : dataRange.getColor(data[2]);
  23099. if (!rangColor) {
  23100. return null;
  23101. }
  23102. } else {
  23103. rangColor = this._sIndex2ColorMap[seriesIndex];
  23104. }
  23105. var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], rangColor, 'rgba(0,0,0,0)', 'vertical');
  23106. itemShape.zlevel = this.getZlevelBase();
  23107. itemShape.z = this.getZBase();
  23108. itemShape._main = true;
  23109. return itemShape;
  23110. },
  23111. _getLargeSymbol: function (pointList, nColor) {
  23112. return new SymbolShape({
  23113. zlevel: this.getZlevelBase(),
  23114. z: this.getZBase(),
  23115. _main: true,
  23116. hoverable: false,
  23117. style: {
  23118. pointList: pointList,
  23119. color: nColor,
  23120. strokeColor: nColor
  23121. },
  23122. highlightStyle: { pointList: [] }
  23123. });
  23124. },
  23125. getMarkCoord: function (seriesIndex, mpData) {
  23126. var serie = this.series[seriesIndex];
  23127. var xMarkMap = this.xMarkMap[seriesIndex];
  23128. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  23129. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  23130. var pos;
  23131. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
  23132. var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : 1;
  23133. pos = [
  23134. xMarkMap[mpData.type + 'X' + valueIndex],
  23135. xMarkMap[mpData.type + 'Y' + valueIndex],
  23136. xMarkMap[mpData.type + 'Line' + valueIndex],
  23137. xMarkMap[mpData.type + valueIndex]
  23138. ];
  23139. } else {
  23140. pos = [
  23141. typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
  23142. typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
  23143. ];
  23144. }
  23145. return pos;
  23146. },
  23147. refresh: function (newOption) {
  23148. if (newOption) {
  23149. this.option = newOption;
  23150. this.series = newOption.series;
  23151. }
  23152. this.backupShapeList();
  23153. this._buildShape();
  23154. },
  23155. ondataRange: function (param, status) {
  23156. if (this.component.dataRange) {
  23157. this.refresh();
  23158. status.needRefresh = true;
  23159. }
  23160. return;
  23161. }
  23162. };
  23163. zrUtil.inherits(Scatter, ChartBase);
  23164. require('../chart').define('scatter', Scatter);
  23165. return Scatter;
  23166. });define('echarts/component/dataRange', [
  23167. 'require',
  23168. './base',
  23169. 'zrender/shape/Text',
  23170. 'zrender/shape/Rectangle',
  23171. '../util/shape/HandlePolygon',
  23172. '../config',
  23173. 'zrender/tool/util',
  23174. 'zrender/tool/event',
  23175. 'zrender/tool/area',
  23176. 'zrender/tool/color',
  23177. '../component'
  23178. ], function (require) {
  23179. var Base = require('./base');
  23180. var TextShape = require('zrender/shape/Text');
  23181. var RectangleShape = require('zrender/shape/Rectangle');
  23182. var HandlePolygonShape = require('../util/shape/HandlePolygon');
  23183. var ecConfig = require('../config');
  23184. ecConfig.dataRange = {
  23185. zlevel: 0,
  23186. z: 4,
  23187. show: true,
  23188. orient: 'vertical',
  23189. x: 'left',
  23190. y: 'bottom',
  23191. backgroundColor: 'rgba(0,0,0,0)',
  23192. borderColor: '#ccc',
  23193. borderWidth: 0,
  23194. padding: 5,
  23195. itemGap: 10,
  23196. itemWidth: 20,
  23197. itemHeight: 14,
  23198. precision: 0,
  23199. splitNumber: 5,
  23200. calculable: false,
  23201. selectedMode: true,
  23202. hoverLink: true,
  23203. realtime: true,
  23204. color: [
  23205. '#006edd',
  23206. '#e0ffff'
  23207. ],
  23208. textStyle: { color: '#333' }
  23209. };
  23210. var zrUtil = require('zrender/tool/util');
  23211. var zrEvent = require('zrender/tool/event');
  23212. var zrArea = require('zrender/tool/area');
  23213. var zrColor = require('zrender/tool/color');
  23214. function DataRange(ecTheme, messageCenter, zr, option, myChart) {
  23215. if (typeof this.query(option, 'dataRange.min') == 'undefined' || typeof this.query(option, 'dataRange.max') == 'undefined') {
  23216. console.error('option.dataRange.min or option.dataRange.max has not been defined.');
  23217. return;
  23218. }
  23219. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  23220. var self = this;
  23221. self._ondrift = function (dx, dy) {
  23222. return self.__ondrift(this, dx, dy);
  23223. };
  23224. self._ondragend = function () {
  23225. return self.__ondragend();
  23226. };
  23227. self._dataRangeSelected = function (param) {
  23228. return self.__dataRangeSelected(param);
  23229. };
  23230. self._dispatchHoverLink = function (param) {
  23231. return self.__dispatchHoverLink(param);
  23232. };
  23233. self._onhoverlink = function (params) {
  23234. return self.__onhoverlink(params);
  23235. };
  23236. this._selectedMap = {};
  23237. this._range = {};
  23238. this.refresh(option);
  23239. messageCenter.bind(ecConfig.EVENT.HOVER, this._onhoverlink);
  23240. }
  23241. DataRange.prototype = {
  23242. type: ecConfig.COMPONENT_TYPE_DATARANGE,
  23243. _textGap: 10,
  23244. _buildShape: function () {
  23245. this._itemGroupLocation = this._getItemGroupLocation();
  23246. this._buildBackground();
  23247. if (this.dataRangeOption.splitNumber <= 0 || this.dataRangeOption.calculable) {
  23248. this._buildGradient();
  23249. } else {
  23250. this._buildItem();
  23251. }
  23252. if (this.dataRangeOption.show) {
  23253. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  23254. this.zr.addShape(this.shapeList[i]);
  23255. }
  23256. }
  23257. this._syncShapeFromRange();
  23258. },
  23259. _buildItem: function () {
  23260. var data = this._valueTextList;
  23261. var dataLength = data.length;
  23262. var itemName;
  23263. var itemShape;
  23264. var textShape;
  23265. var font = this.getFont(this.dataRangeOption.textStyle);
  23266. var lastX = this._itemGroupLocation.x;
  23267. var lastY = this._itemGroupLocation.y;
  23268. var itemWidth = this.dataRangeOption.itemWidth;
  23269. var itemHeight = this.dataRangeOption.itemHeight;
  23270. var itemGap = this.dataRangeOption.itemGap;
  23271. var textHeight = zrArea.getTextHeight('国', font);
  23272. var color;
  23273. if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
  23274. lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
  23275. }
  23276. var needValueText = true;
  23277. if (this.dataRangeOption.text) {
  23278. needValueText = false;
  23279. if (this.dataRangeOption.text[0]) {
  23280. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
  23281. if (this.dataRangeOption.orient == 'horizontal') {
  23282. lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
  23283. } else {
  23284. lastY += textHeight + this._textGap;
  23285. textShape.style.y += textHeight / 2 + this._textGap;
  23286. textShape.style.textBaseline = 'bottom';
  23287. }
  23288. this.shapeList.push(new TextShape(textShape));
  23289. }
  23290. }
  23291. for (var i = 0; i < dataLength; i++) {
  23292. itemName = data[i];
  23293. color = this.getColorByIndex(i);
  23294. itemShape = this._getItemShape(lastX, lastY, itemWidth, itemHeight, this._selectedMap[i] ? color : '#ccc');
  23295. itemShape._idx = i;
  23296. itemShape.onmousemove = this._dispatchHoverLink;
  23297. if (this.dataRangeOption.selectedMode) {
  23298. itemShape.clickable = true;
  23299. itemShape.onclick = this._dataRangeSelected;
  23300. }
  23301. this.shapeList.push(new RectangleShape(itemShape));
  23302. if (needValueText) {
  23303. textShape = {
  23304. zlevel: this.getZlevelBase(),
  23305. z: this.getZBase(),
  23306. style: {
  23307. x: lastX + itemWidth + 5,
  23308. y: lastY,
  23309. color: this._selectedMap[i] ? this.dataRangeOption.textStyle.color : '#ccc',
  23310. text: data[i],
  23311. textFont: font,
  23312. textBaseline: 'top'
  23313. },
  23314. highlightStyle: { brushType: 'fill' }
  23315. };
  23316. if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
  23317. textShape.style.x -= itemWidth + 10;
  23318. textShape.style.textAlign = 'right';
  23319. }
  23320. textShape._idx = i;
  23321. textShape.onmousemove = this._dispatchHoverLink;
  23322. if (this.dataRangeOption.selectedMode) {
  23323. textShape.clickable = true;
  23324. textShape.onclick = this._dataRangeSelected;
  23325. }
  23326. this.shapeList.push(new TextShape(textShape));
  23327. }
  23328. if (this.dataRangeOption.orient == 'horizontal') {
  23329. lastX += itemWidth + (needValueText ? 5 : 0) + (needValueText ? zrArea.getTextWidth(itemName, font) : 0) + itemGap;
  23330. } else {
  23331. lastY += itemHeight + itemGap;
  23332. }
  23333. }
  23334. if (!needValueText && this.dataRangeOption.text[1]) {
  23335. if (this.dataRangeOption.orient == 'horizontal') {
  23336. lastX = lastX - itemGap + this._textGap;
  23337. } else {
  23338. lastY = lastY - itemGap + this._textGap;
  23339. }
  23340. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
  23341. if (this.dataRangeOption.orient != 'horizontal') {
  23342. textShape.style.y -= 5;
  23343. textShape.style.textBaseline = 'top';
  23344. }
  23345. this.shapeList.push(new TextShape(textShape));
  23346. }
  23347. },
  23348. _buildGradient: function () {
  23349. var itemShape;
  23350. var textShape;
  23351. var font = this.getFont(this.dataRangeOption.textStyle);
  23352. var lastX = this._itemGroupLocation.x;
  23353. var lastY = this._itemGroupLocation.y;
  23354. var itemWidth = this.dataRangeOption.itemWidth;
  23355. var itemHeight = this.dataRangeOption.itemHeight;
  23356. var textHeight = zrArea.getTextHeight('国', font);
  23357. var mSize = 10;
  23358. var needValueText = true;
  23359. if (this.dataRangeOption.text) {
  23360. needValueText = false;
  23361. if (this.dataRangeOption.text[0]) {
  23362. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
  23363. if (this.dataRangeOption.orient == 'horizontal') {
  23364. lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
  23365. } else {
  23366. lastY += textHeight + this._textGap;
  23367. textShape.style.y += textHeight / 2 + this._textGap;
  23368. textShape.style.textBaseline = 'bottom';
  23369. }
  23370. this.shapeList.push(new TextShape(textShape));
  23371. }
  23372. }
  23373. var zrColor = require('zrender/tool/color');
  23374. var per = 1 / (this.dataRangeOption.color.length - 1);
  23375. var colorList = [];
  23376. for (var i = 0, l = this.dataRangeOption.color.length; i < l; i++) {
  23377. colorList.push([
  23378. i * per,
  23379. this.dataRangeOption.color[i]
  23380. ]);
  23381. }
  23382. if (this.dataRangeOption.orient == 'horizontal') {
  23383. itemShape = {
  23384. zlevel: this.getZlevelBase(),
  23385. z: this.getZBase(),
  23386. style: {
  23387. x: lastX,
  23388. y: lastY,
  23389. width: itemWidth * mSize,
  23390. height: itemHeight,
  23391. color: zrColor.getLinearGradient(lastX, lastY, lastX + itemWidth * mSize, lastY, colorList)
  23392. },
  23393. hoverable: false
  23394. };
  23395. lastX += itemWidth * mSize + this._textGap;
  23396. } else {
  23397. itemShape = {
  23398. zlevel: this.getZlevelBase(),
  23399. z: this.getZBase(),
  23400. style: {
  23401. x: lastX,
  23402. y: lastY,
  23403. width: itemWidth,
  23404. height: itemHeight * mSize,
  23405. color: zrColor.getLinearGradient(lastX, lastY, lastX, lastY + itemHeight * mSize, colorList)
  23406. },
  23407. hoverable: false
  23408. };
  23409. lastY += itemHeight * mSize + this._textGap;
  23410. }
  23411. this.shapeList.push(new RectangleShape(itemShape));
  23412. this._calculableLocation = itemShape.style;
  23413. if (this.dataRangeOption.calculable) {
  23414. this._buildFiller();
  23415. this._bulidMask();
  23416. this._bulidHandle();
  23417. }
  23418. this._buildIndicator();
  23419. if (!needValueText && this.dataRangeOption.text[1]) {
  23420. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
  23421. this.shapeList.push(new TextShape(textShape));
  23422. }
  23423. },
  23424. _buildIndicator: function () {
  23425. var x = this._calculableLocation.x;
  23426. var y = this._calculableLocation.y;
  23427. var width = this._calculableLocation.width;
  23428. var height = this._calculableLocation.height;
  23429. var size = 5;
  23430. var pointList;
  23431. var textPosition;
  23432. if (this.dataRangeOption.orient == 'horizontal') {
  23433. if (this.dataRangeOption.y != 'bottom') {
  23434. pointList = [
  23435. [
  23436. x,
  23437. y + height
  23438. ],
  23439. [
  23440. x - size,
  23441. y + height + size
  23442. ],
  23443. [
  23444. x + size,
  23445. y + height + size
  23446. ]
  23447. ];
  23448. textPosition = 'bottom';
  23449. } else {
  23450. pointList = [
  23451. [
  23452. x,
  23453. y
  23454. ],
  23455. [
  23456. x - size,
  23457. y - size
  23458. ],
  23459. [
  23460. x + size,
  23461. y - size
  23462. ]
  23463. ];
  23464. textPosition = 'top';
  23465. }
  23466. } else {
  23467. if (this.dataRangeOption.x != 'right') {
  23468. pointList = [
  23469. [
  23470. x + width,
  23471. y
  23472. ],
  23473. [
  23474. x + width + size,
  23475. y - size
  23476. ],
  23477. [
  23478. x + width + size,
  23479. y + size
  23480. ]
  23481. ];
  23482. textPosition = 'right';
  23483. } else {
  23484. pointList = [
  23485. [
  23486. x,
  23487. y
  23488. ],
  23489. [
  23490. x - size,
  23491. y - size
  23492. ],
  23493. [
  23494. x - size,
  23495. y + size
  23496. ]
  23497. ];
  23498. textPosition = 'left';
  23499. }
  23500. }
  23501. this._indicatorShape = {
  23502. style: {
  23503. pointList: pointList,
  23504. color: '#fff',
  23505. __rect: {
  23506. x: Math.min(pointList[0][0], pointList[1][0]),
  23507. y: Math.min(pointList[0][1], pointList[1][1]),
  23508. width: size * (this.dataRangeOption.orient == 'horizontal' ? 2 : 1),
  23509. height: size * (this.dataRangeOption.orient == 'horizontal' ? 1 : 2)
  23510. }
  23511. },
  23512. highlightStyle: {
  23513. brushType: 'fill',
  23514. textPosition: textPosition,
  23515. textColor: this.dataRangeOption.textStyle.color
  23516. },
  23517. hoverable: false
  23518. };
  23519. this._indicatorShape = new HandlePolygonShape(this._indicatorShape);
  23520. },
  23521. _buildFiller: function () {
  23522. this._fillerShape = {
  23523. zlevel: this.getZlevelBase(),
  23524. z: this.getZBase() + 1,
  23525. style: {
  23526. x: this._calculableLocation.x,
  23527. y: this._calculableLocation.y,
  23528. width: this._calculableLocation.width,
  23529. height: this._calculableLocation.height,
  23530. color: 'rgba(255,255,255,0)'
  23531. },
  23532. highlightStyle: {
  23533. strokeColor: 'rgba(255,255,255,0.5)',
  23534. lineWidth: 1
  23535. },
  23536. draggable: true,
  23537. ondrift: this._ondrift,
  23538. ondragend: this._ondragend,
  23539. onmousemove: this._dispatchHoverLink,
  23540. _type: 'filler'
  23541. };
  23542. this._fillerShape = new RectangleShape(this._fillerShape);
  23543. this.shapeList.push(this._fillerShape);
  23544. },
  23545. _bulidHandle: function () {
  23546. var x = this._calculableLocation.x;
  23547. var y = this._calculableLocation.y;
  23548. var width = this._calculableLocation.width;
  23549. var height = this._calculableLocation.height;
  23550. var font = this.getFont(this.dataRangeOption.textStyle);
  23551. var textHeight = zrArea.getTextHeight('国', font);
  23552. var textWidth = Math.max(zrArea.getTextWidth(this._textFormat(this.dataRangeOption.max), font), zrArea.getTextWidth(this._textFormat(this.dataRangeOption.min), font)) + 2;
  23553. var pointListStart;
  23554. var textXStart;
  23555. var textYStart;
  23556. var coverRectStart;
  23557. var pointListEnd;
  23558. var textXEnd;
  23559. var textYEnd;
  23560. var coverRectEnd;
  23561. if (this.dataRangeOption.orient == 'horizontal') {
  23562. if (this.dataRangeOption.y != 'bottom') {
  23563. pointListStart = [
  23564. [
  23565. x,
  23566. y
  23567. ],
  23568. [
  23569. x,
  23570. y + height + textHeight
  23571. ],
  23572. [
  23573. x - textHeight,
  23574. y + height + textHeight
  23575. ],
  23576. [
  23577. x - 1,
  23578. y + height
  23579. ],
  23580. [
  23581. x - 1,
  23582. y
  23583. ]
  23584. ];
  23585. textXStart = x - textWidth / 2 - textHeight;
  23586. textYStart = y + height + textHeight / 2 + 2;
  23587. coverRectStart = {
  23588. x: x - textWidth - textHeight,
  23589. y: y + height,
  23590. width: textWidth + textHeight,
  23591. height: textHeight
  23592. };
  23593. pointListEnd = [
  23594. [
  23595. x + width,
  23596. y
  23597. ],
  23598. [
  23599. x + width,
  23600. y + height + textHeight
  23601. ],
  23602. [
  23603. x + width + textHeight,
  23604. y + height + textHeight
  23605. ],
  23606. [
  23607. x + width + 1,
  23608. y + height
  23609. ],
  23610. [
  23611. x + width + 1,
  23612. y
  23613. ]
  23614. ];
  23615. textXEnd = x + width + textWidth / 2 + textHeight;
  23616. textYEnd = textYStart;
  23617. coverRectEnd = {
  23618. x: x + width,
  23619. y: y + height,
  23620. width: textWidth + textHeight,
  23621. height: textHeight
  23622. };
  23623. } else {
  23624. pointListStart = [
  23625. [
  23626. x,
  23627. y + height
  23628. ],
  23629. [
  23630. x,
  23631. y - textHeight
  23632. ],
  23633. [
  23634. x - textHeight,
  23635. y - textHeight
  23636. ],
  23637. [
  23638. x - 1,
  23639. y
  23640. ],
  23641. [
  23642. x - 1,
  23643. y + height
  23644. ]
  23645. ];
  23646. textXStart = x - textWidth / 2 - textHeight;
  23647. textYStart = y - textHeight / 2 - 2;
  23648. coverRectStart = {
  23649. x: x - textWidth - textHeight,
  23650. y: y - textHeight,
  23651. width: textWidth + textHeight,
  23652. height: textHeight
  23653. };
  23654. pointListEnd = [
  23655. [
  23656. x + width,
  23657. y + height
  23658. ],
  23659. [
  23660. x + width,
  23661. y - textHeight
  23662. ],
  23663. [
  23664. x + width + textHeight,
  23665. y - textHeight
  23666. ],
  23667. [
  23668. x + width + 1,
  23669. y
  23670. ],
  23671. [
  23672. x + width + 1,
  23673. y + height
  23674. ]
  23675. ];
  23676. textXEnd = x + width + textWidth / 2 + textHeight;
  23677. textYEnd = textYStart;
  23678. coverRectEnd = {
  23679. x: x + width,
  23680. y: y - textHeight,
  23681. width: textWidth + textHeight,
  23682. height: textHeight
  23683. };
  23684. }
  23685. } else {
  23686. textWidth += textHeight;
  23687. if (this.dataRangeOption.x != 'right') {
  23688. pointListStart = [
  23689. [
  23690. x,
  23691. y
  23692. ],
  23693. [
  23694. x + width + textHeight,
  23695. y
  23696. ],
  23697. [
  23698. x + width + textHeight,
  23699. y - textHeight
  23700. ],
  23701. [
  23702. x + width,
  23703. y - 1
  23704. ],
  23705. [
  23706. x,
  23707. y - 1
  23708. ]
  23709. ];
  23710. textXStart = x + width + textWidth / 2 + textHeight / 2;
  23711. textYStart = y - textHeight / 2;
  23712. coverRectStart = {
  23713. x: x + width,
  23714. y: y - textHeight,
  23715. width: textWidth + textHeight,
  23716. height: textHeight
  23717. };
  23718. pointListEnd = [
  23719. [
  23720. x,
  23721. y + height
  23722. ],
  23723. [
  23724. x + width + textHeight,
  23725. y + height
  23726. ],
  23727. [
  23728. x + width + textHeight,
  23729. y + textHeight + height
  23730. ],
  23731. [
  23732. x + width,
  23733. y + 1 + height
  23734. ],
  23735. [
  23736. x,
  23737. y + height + 1
  23738. ]
  23739. ];
  23740. textXEnd = textXStart;
  23741. textYEnd = y + height + textHeight / 2;
  23742. coverRectEnd = {
  23743. x: x + width,
  23744. y: y + height,
  23745. width: textWidth + textHeight,
  23746. height: textHeight
  23747. };
  23748. } else {
  23749. pointListStart = [
  23750. [
  23751. x + width,
  23752. y
  23753. ],
  23754. [
  23755. x - textHeight,
  23756. y
  23757. ],
  23758. [
  23759. x - textHeight,
  23760. y - textHeight
  23761. ],
  23762. [
  23763. x,
  23764. y - 1
  23765. ],
  23766. [
  23767. x + width,
  23768. y - 1
  23769. ]
  23770. ];
  23771. textXStart = x - textWidth / 2 - textHeight / 2;
  23772. textYStart = y - textHeight / 2;
  23773. coverRectStart = {
  23774. x: x - textWidth - textHeight,
  23775. y: y - textHeight,
  23776. width: textWidth + textHeight,
  23777. height: textHeight
  23778. };
  23779. pointListEnd = [
  23780. [
  23781. x + width,
  23782. y + height
  23783. ],
  23784. [
  23785. x - textHeight,
  23786. y + height
  23787. ],
  23788. [
  23789. x - textHeight,
  23790. y + textHeight + height
  23791. ],
  23792. [
  23793. x,
  23794. y + 1 + height
  23795. ],
  23796. [
  23797. x + width,
  23798. y + height + 1
  23799. ]
  23800. ];
  23801. textXEnd = textXStart;
  23802. textYEnd = y + height + textHeight / 2;
  23803. coverRectEnd = {
  23804. x: x - textWidth - textHeight,
  23805. y: y + height,
  23806. width: textWidth + textHeight,
  23807. height: textHeight
  23808. };
  23809. }
  23810. }
  23811. this._startShape = {
  23812. style: {
  23813. pointList: pointListStart,
  23814. text: this._textFormat(this.dataRangeOption.max),
  23815. textX: textXStart,
  23816. textY: textYStart,
  23817. textFont: font,
  23818. color: this.getColor(this.dataRangeOption.max),
  23819. rect: coverRectStart,
  23820. x: pointListStart[0][0],
  23821. y: pointListStart[0][1],
  23822. _x: pointListStart[0][0],
  23823. _y: pointListStart[0][1]
  23824. }
  23825. };
  23826. this._startShape.highlightStyle = {
  23827. strokeColor: this._startShape.style.color,
  23828. lineWidth: 1
  23829. };
  23830. this._endShape = {
  23831. style: {
  23832. pointList: pointListEnd,
  23833. text: this._textFormat(this.dataRangeOption.min),
  23834. textX: textXEnd,
  23835. textY: textYEnd,
  23836. textFont: font,
  23837. color: this.getColor(this.dataRangeOption.min),
  23838. rect: coverRectEnd,
  23839. x: pointListEnd[0][0],
  23840. y: pointListEnd[0][1],
  23841. _x: pointListEnd[0][0],
  23842. _y: pointListEnd[0][1]
  23843. }
  23844. };
  23845. this._endShape.highlightStyle = {
  23846. strokeColor: this._endShape.style.color,
  23847. lineWidth: 1
  23848. };
  23849. this._startShape.zlevel = this._endShape.zlevel = this.getZlevelBase();
  23850. this._startShape.z = this._endShape.z = this.getZBase() + 1;
  23851. this._startShape.draggable = this._endShape.draggable = true;
  23852. this._startShape.ondrift = this._endShape.ondrift = this._ondrift;
  23853. this._startShape.ondragend = this._endShape.ondragend = this._ondragend;
  23854. this._startShape.style.textColor = this._endShape.style.textColor = this.dataRangeOption.textStyle.color;
  23855. this._startShape.style.textAlign = this._endShape.style.textAlign = 'center';
  23856. this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
  23857. this._startShape.style.textBaseline = this._endShape.style.textBaseline = 'middle';
  23858. this._startShape.style.width = this._endShape.style.width = 0;
  23859. this._startShape.style.height = this._endShape.style.height = 0;
  23860. this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
  23861. this._startShape = new HandlePolygonShape(this._startShape);
  23862. this._endShape = new HandlePolygonShape(this._endShape);
  23863. this.shapeList.push(this._startShape);
  23864. this.shapeList.push(this._endShape);
  23865. },
  23866. _bulidMask: function () {
  23867. var x = this._calculableLocation.x;
  23868. var y = this._calculableLocation.y;
  23869. var width = this._calculableLocation.width;
  23870. var height = this._calculableLocation.height;
  23871. this._startMask = {
  23872. zlevel: this.getZlevelBase(),
  23873. z: this.getZBase() + 1,
  23874. style: {
  23875. x: x,
  23876. y: y,
  23877. width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
  23878. height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
  23879. color: '#ccc'
  23880. },
  23881. hoverable: false
  23882. };
  23883. this._endMask = {
  23884. zlevel: this.getZlevelBase(),
  23885. z: this.getZBase() + 1,
  23886. style: {
  23887. x: this.dataRangeOption.orient == 'horizontal' ? x + width : x,
  23888. y: this.dataRangeOption.orient == 'horizontal' ? y : y + height,
  23889. width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
  23890. height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
  23891. color: '#ccc'
  23892. },
  23893. hoverable: false
  23894. };
  23895. this._startMask = new RectangleShape(this._startMask);
  23896. this._endMask = new RectangleShape(this._endMask);
  23897. this.shapeList.push(this._startMask);
  23898. this.shapeList.push(this._endMask);
  23899. },
  23900. _buildBackground: function () {
  23901. var padding = this.reformCssArray(this.dataRangeOption.padding);
  23902. this.shapeList.push(new RectangleShape({
  23903. zlevel: this.getZlevelBase(),
  23904. z: this.getZBase(),
  23905. hoverable: false,
  23906. style: {
  23907. x: this._itemGroupLocation.x - padding[3],
  23908. y: this._itemGroupLocation.y - padding[0],
  23909. width: this._itemGroupLocation.width + padding[3] + padding[1],
  23910. height: this._itemGroupLocation.height + padding[0] + padding[2],
  23911. brushType: this.dataRangeOption.borderWidth === 0 ? 'fill' : 'both',
  23912. color: this.dataRangeOption.backgroundColor,
  23913. strokeColor: this.dataRangeOption.borderColor,
  23914. lineWidth: this.dataRangeOption.borderWidth
  23915. }
  23916. }));
  23917. },
  23918. _getItemGroupLocation: function () {
  23919. var data = this._valueTextList;
  23920. var dataLength = data.length;
  23921. var itemGap = this.dataRangeOption.itemGap;
  23922. var itemWidth = this.dataRangeOption.itemWidth;
  23923. var itemHeight = this.dataRangeOption.itemHeight;
  23924. var totalWidth = 0;
  23925. var totalHeight = 0;
  23926. var font = this.getFont(this.dataRangeOption.textStyle);
  23927. var textHeight = zrArea.getTextHeight('国', font);
  23928. var mSize = 10;
  23929. if (this.dataRangeOption.orient == 'horizontal') {
  23930. if (this.dataRangeOption.text || this.dataRangeOption.splitNumber <= 0 || this.dataRangeOption.calculable) {
  23931. totalWidth = (this.dataRangeOption.splitNumber <= 0 || this.dataRangeOption.calculable ? 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);
  23932. } else {
  23933. itemWidth += 5;
  23934. for (var i = 0; i < dataLength; i++) {
  23935. totalWidth += itemWidth + zrArea.getTextWidth(data[i], font) + itemGap;
  23936. }
  23937. }
  23938. totalWidth -= itemGap;
  23939. totalHeight = Math.max(textHeight, itemHeight);
  23940. } else {
  23941. var maxWidth;
  23942. if (this.dataRangeOption.text || this.dataRangeOption.splitNumber <= 0 || this.dataRangeOption.calculable) {
  23943. totalHeight = (this.dataRangeOption.splitNumber <= 0 || this.dataRangeOption.calculable ? 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);
  23944. maxWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[0] || '', font), zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[1] || '', font));
  23945. totalWidth = Math.max(itemWidth, maxWidth);
  23946. } else {
  23947. totalHeight = (itemHeight + itemGap) * dataLength;
  23948. itemWidth += 5;
  23949. maxWidth = 0;
  23950. for (var i = 0; i < dataLength; i++) {
  23951. maxWidth = Math.max(maxWidth, zrArea.getTextWidth(data[i], font));
  23952. }
  23953. totalWidth = itemWidth + maxWidth;
  23954. }
  23955. totalHeight -= itemGap;
  23956. }
  23957. var padding = this.reformCssArray(this.dataRangeOption.padding);
  23958. var x;
  23959. var zrWidth = this.zr.getWidth();
  23960. switch (this.dataRangeOption.x) {
  23961. case 'center':
  23962. x = Math.floor((zrWidth - totalWidth) / 2);
  23963. break;
  23964. case 'left':
  23965. x = padding[3] + this.dataRangeOption.borderWidth;
  23966. break;
  23967. case 'right':
  23968. x = zrWidth - totalWidth - padding[1] - this.dataRangeOption.borderWidth;
  23969. break;
  23970. default:
  23971. x = this.parsePercent(this.dataRangeOption.x, zrWidth);
  23972. x = isNaN(x) ? 0 : x;
  23973. break;
  23974. }
  23975. var y;
  23976. var zrHeight = this.zr.getHeight();
  23977. switch (this.dataRangeOption.y) {
  23978. case 'top':
  23979. y = padding[0] + this.dataRangeOption.borderWidth;
  23980. break;
  23981. case 'bottom':
  23982. y = zrHeight - totalHeight - padding[2] - this.dataRangeOption.borderWidth;
  23983. break;
  23984. case 'center':
  23985. y = Math.floor((zrHeight - totalHeight) / 2);
  23986. break;
  23987. default:
  23988. y = this.parsePercent(this.dataRangeOption.y, zrHeight);
  23989. y = isNaN(y) ? 0 : y;
  23990. break;
  23991. }
  23992. if (this.dataRangeOption.calculable) {
  23993. var handlerWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.max, font), zrArea.getTextWidth(this.dataRangeOption.min, font)) + textHeight;
  23994. if (this.dataRangeOption.orient == 'horizontal') {
  23995. if (x < handlerWidth) {
  23996. x = handlerWidth;
  23997. }
  23998. if (x + totalWidth + handlerWidth > zrWidth) {
  23999. x -= handlerWidth;
  24000. }
  24001. } else {
  24002. if (y < textHeight) {
  24003. y = textHeight;
  24004. }
  24005. if (y + totalHeight + textHeight > zrHeight) {
  24006. y -= textHeight;
  24007. }
  24008. }
  24009. }
  24010. return {
  24011. x: x,
  24012. y: y,
  24013. width: totalWidth,
  24014. height: totalHeight
  24015. };
  24016. },
  24017. _getTextShape: function (x, y, text) {
  24018. return {
  24019. zlevel: this.getZlevelBase(),
  24020. z: this.getZBase(),
  24021. style: {
  24022. x: this.dataRangeOption.orient == 'horizontal' ? x : this._itemGroupLocation.x + this._itemGroupLocation.width / 2,
  24023. y: this.dataRangeOption.orient == 'horizontal' ? this._itemGroupLocation.y + this._itemGroupLocation.height / 2 : y,
  24024. color: this.dataRangeOption.textStyle.color,
  24025. text: text,
  24026. textFont: this.getFont(this.dataRangeOption.textStyle),
  24027. textBaseline: this.dataRangeOption.orient == 'horizontal' ? 'middle' : 'top',
  24028. textAlign: this.dataRangeOption.orient == 'horizontal' ? 'left' : 'center'
  24029. },
  24030. hoverable: false
  24031. };
  24032. },
  24033. _getItemShape: function (x, y, width, height, color) {
  24034. return {
  24035. zlevel: this.getZlevelBase(),
  24036. z: this.getZBase(),
  24037. style: {
  24038. x: x,
  24039. y: y + 1,
  24040. width: width,
  24041. height: height - 2,
  24042. color: color
  24043. },
  24044. highlightStyle: {
  24045. strokeColor: color,
  24046. lineWidth: 1
  24047. }
  24048. };
  24049. },
  24050. __ondrift: function (shape, dx, dy) {
  24051. var x = this._calculableLocation.x;
  24052. var y = this._calculableLocation.y;
  24053. var width = this._calculableLocation.width;
  24054. var height = this._calculableLocation.height;
  24055. if (this.dataRangeOption.orient == 'horizontal') {
  24056. if (shape.style.x + dx <= x) {
  24057. shape.style.x = x;
  24058. } else if (shape.style.x + dx + shape.style.width >= x + width) {
  24059. shape.style.x = x + width - shape.style.width;
  24060. } else {
  24061. shape.style.x += dx;
  24062. }
  24063. } else {
  24064. if (shape.style.y + dy <= y) {
  24065. shape.style.y = y;
  24066. } else if (shape.style.y + dy + shape.style.height >= y + height) {
  24067. shape.style.y = y + height - shape.style.height;
  24068. } else {
  24069. shape.style.y += dy;
  24070. }
  24071. }
  24072. if (shape._type == 'filler') {
  24073. this._syncHandleShape();
  24074. } else {
  24075. this._syncFillerShape(shape);
  24076. }
  24077. if (this.dataRangeOption.realtime) {
  24078. this._dispatchDataRange();
  24079. }
  24080. return true;
  24081. },
  24082. __ondragend: function () {
  24083. this.isDragend = true;
  24084. },
  24085. ondragend: function (param, status) {
  24086. if (!this.isDragend || !param.target) {
  24087. return;
  24088. }
  24089. status.dragOut = true;
  24090. status.dragIn = true;
  24091. if (!this.dataRangeOption.realtime) {
  24092. this._dispatchDataRange();
  24093. }
  24094. status.needRefresh = false;
  24095. this.isDragend = false;
  24096. return;
  24097. },
  24098. _syncShapeFromRange: function () {
  24099. var range = this.dataRangeOption.range || {};
  24100. this._range.end = typeof this._range.end != 'undefined' ? this._range.end : typeof range.start != 'undefined' ? range.start : 0;
  24101. this._range.start = typeof this._range.start != 'undefined' ? this._range.start : typeof range.end != 'undefined' ? range.end : 100;
  24102. if (this._range.start != 100 || this._range.end !== 0) {
  24103. if (this.dataRangeOption.orient == 'horizontal') {
  24104. var width = this._fillerShape.style.width;
  24105. this._fillerShape.style.x += width * (100 - this._range.start) / 100;
  24106. this._fillerShape.style.width = width * (this._range.start - this._range.end) / 100;
  24107. } else {
  24108. var height = this._fillerShape.style.height;
  24109. this._fillerShape.style.y += height * (100 - this._range.start) / 100;
  24110. this._fillerShape.style.height = height * (this._range.start - this._range.end) / 100;
  24111. }
  24112. this.zr.modShape(this._fillerShape.id);
  24113. this._syncHandleShape();
  24114. }
  24115. },
  24116. _syncHandleShape: function () {
  24117. var x = this._calculableLocation.x;
  24118. var y = this._calculableLocation.y;
  24119. var width = this._calculableLocation.width;
  24120. var height = this._calculableLocation.height;
  24121. if (this.dataRangeOption.orient == 'horizontal') {
  24122. this._startShape.style.x = this._fillerShape.style.x;
  24123. this._startMask.style.width = this._startShape.style.x - x;
  24124. this._endShape.style.x = this._fillerShape.style.x + this._fillerShape.style.width;
  24125. this._endMask.style.x = this._endShape.style.x;
  24126. this._endMask.style.width = x + width - this._endShape.style.x;
  24127. this._range.start = Math.ceil(100 - (this._startShape.style.x - x) / width * 100);
  24128. this._range.end = Math.floor(100 - (this._endShape.style.x - x) / width * 100);
  24129. } else {
  24130. this._startShape.style.y = this._fillerShape.style.y;
  24131. this._startMask.style.height = this._startShape.style.y - y;
  24132. this._endShape.style.y = this._fillerShape.style.y + this._fillerShape.style.height;
  24133. this._endMask.style.y = this._endShape.style.y;
  24134. this._endMask.style.height = y + height - this._endShape.style.y;
  24135. this._range.start = Math.ceil(100 - (this._startShape.style.y - y) / height * 100);
  24136. this._range.end = Math.floor(100 - (this._endShape.style.y - y) / height * 100);
  24137. }
  24138. this._syncShape();
  24139. },
  24140. _syncFillerShape: function (e) {
  24141. var x = this._calculableLocation.x;
  24142. var y = this._calculableLocation.y;
  24143. var width = this._calculableLocation.width;
  24144. var height = this._calculableLocation.height;
  24145. var a;
  24146. var b;
  24147. if (this.dataRangeOption.orient == 'horizontal') {
  24148. a = this._startShape.style.x;
  24149. b = this._endShape.style.x;
  24150. if (e.id == this._startShape.id && a >= b) {
  24151. b = a;
  24152. this._endShape.style.x = a;
  24153. } else if (e.id == this._endShape.id && a >= b) {
  24154. a = b;
  24155. this._startShape.style.x = a;
  24156. }
  24157. this._fillerShape.style.x = a;
  24158. this._fillerShape.style.width = b - a;
  24159. this._startMask.style.width = a - x;
  24160. this._endMask.style.x = b;
  24161. this._endMask.style.width = x + width - b;
  24162. this._range.start = Math.ceil(100 - (a - x) / width * 100);
  24163. this._range.end = Math.floor(100 - (b - x) / width * 100);
  24164. } else {
  24165. a = this._startShape.style.y;
  24166. b = this._endShape.style.y;
  24167. if (e.id == this._startShape.id && a >= b) {
  24168. b = a;
  24169. this._endShape.style.y = a;
  24170. } else if (e.id == this._endShape.id && a >= b) {
  24171. a = b;
  24172. this._startShape.style.y = a;
  24173. }
  24174. this._fillerShape.style.y = a;
  24175. this._fillerShape.style.height = b - a;
  24176. this._startMask.style.height = a - y;
  24177. this._endMask.style.y = b;
  24178. this._endMask.style.height = y + height - b;
  24179. this._range.start = Math.ceil(100 - (a - y) / height * 100);
  24180. this._range.end = Math.floor(100 - (b - y) / height * 100);
  24181. }
  24182. this._syncShape();
  24183. },
  24184. _syncShape: function () {
  24185. this._startShape.position = [
  24186. this._startShape.style.x - this._startShape.style._x,
  24187. this._startShape.style.y - this._startShape.style._y
  24188. ];
  24189. this._startShape.style.text = this._textFormat(this._gap * this._range.start + this.dataRangeOption.min);
  24190. this._startShape.style.color = this._startShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.start + this.dataRangeOption.min);
  24191. this._endShape.position = [
  24192. this._endShape.style.x - this._endShape.style._x,
  24193. this._endShape.style.y - this._endShape.style._y
  24194. ];
  24195. this._endShape.style.text = this._textFormat(this._gap * this._range.end + this.dataRangeOption.min);
  24196. this._endShape.style.color = this._endShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.end + this.dataRangeOption.min);
  24197. this.zr.modShape(this._startShape.id);
  24198. this.zr.modShape(this._endShape.id);
  24199. this.zr.modShape(this._startMask.id);
  24200. this.zr.modShape(this._endMask.id);
  24201. this.zr.modShape(this._fillerShape.id);
  24202. this.zr.refreshNextFrame();
  24203. },
  24204. _dispatchDataRange: function () {
  24205. this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE, null, {
  24206. range: {
  24207. start: this._range.end,
  24208. end: this._range.start
  24209. }
  24210. }, this.myChart);
  24211. },
  24212. __dataRangeSelected: function (param) {
  24213. if (this.dataRangeOption.selectedMode === 'single') {
  24214. for (var k in this._selectedMap) {
  24215. this._selectedMap[k] = false;
  24216. }
  24217. }
  24218. var idx = param.target._idx;
  24219. this._selectedMap[idx] = !this._selectedMap[idx];
  24220. var valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
  24221. this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_SELECTED, param.event, {
  24222. selected: this._selectedMap,
  24223. target: idx,
  24224. valueMax: valueMax,
  24225. valueMin: valueMax - this._gap
  24226. }, this.myChart);
  24227. this.messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this.myChart);
  24228. },
  24229. __dispatchHoverLink: function (param) {
  24230. var valueMin;
  24231. var valueMax;
  24232. if (this.dataRangeOption.calculable) {
  24233. var totalValue = this.dataRangeOption.max - this.dataRangeOption.min;
  24234. var curValue;
  24235. if (this.dataRangeOption.orient == 'horizontal') {
  24236. curValue = (1 - (zrEvent.getX(param.event) - this._calculableLocation.x) / this._calculableLocation.width) * totalValue;
  24237. } else {
  24238. curValue = (1 - (zrEvent.getY(param.event) - this._calculableLocation.y) / this._calculableLocation.height) * totalValue;
  24239. }
  24240. valueMin = curValue - totalValue * 0.05;
  24241. valueMax = curValue + totalValue * 0.05;
  24242. } else {
  24243. var idx = param.target._idx;
  24244. valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
  24245. valueMin = valueMax - this._gap;
  24246. }
  24247. this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_HOVERLINK, param.event, {
  24248. valueMin: valueMin,
  24249. valueMax: valueMax
  24250. }, this.myChart);
  24251. return;
  24252. },
  24253. __onhoverlink: function (param) {
  24254. if (this.dataRangeOption.show && this.dataRangeOption.hoverLink && this._indicatorShape && param && param.seriesIndex != null && param.dataIndex != null) {
  24255. var curValue = param.value;
  24256. if (curValue === '' || isNaN(curValue)) {
  24257. return;
  24258. }
  24259. if (curValue < this.dataRangeOption.min) {
  24260. curValue = this.dataRangeOption.min;
  24261. } else if (curValue > this.dataRangeOption.max) {
  24262. curValue = this.dataRangeOption.max;
  24263. }
  24264. if (this.dataRangeOption.orient == 'horizontal') {
  24265. this._indicatorShape.position = [
  24266. (this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.width,
  24267. 0
  24268. ];
  24269. } else {
  24270. this._indicatorShape.position = [
  24271. 0,
  24272. (this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.height
  24273. ];
  24274. }
  24275. this._indicatorShape.style.text = this._textFormat(param.value);
  24276. this._indicatorShape.style.color = this.getColor(curValue);
  24277. this.zr.addHoverShape(this._indicatorShape);
  24278. }
  24279. },
  24280. _textFormat: function (valueStart, valueEnd) {
  24281. valueStart = (+valueStart).toFixed(this.dataRangeOption.precision);
  24282. valueEnd = valueEnd != null ? (+valueEnd).toFixed(this.dataRangeOption.precision) : '';
  24283. if (this.dataRangeOption.formatter) {
  24284. if (typeof this.dataRangeOption.formatter == 'string') {
  24285. return this.dataRangeOption.formatter.replace('{value}', valueStart).replace('{value2}', valueEnd);
  24286. } else if (typeof this.dataRangeOption.formatter == 'function') {
  24287. return this.dataRangeOption.formatter.call(this.myChart, valueStart, valueEnd);
  24288. }
  24289. }
  24290. if (valueEnd !== '') {
  24291. return valueStart + ' - ' + valueEnd;
  24292. }
  24293. return valueStart;
  24294. },
  24295. refresh: function (newOption) {
  24296. if (newOption) {
  24297. this.option = newOption;
  24298. this.option.dataRange = this.reformOption(this.option.dataRange);
  24299. this.dataRangeOption = this.option.dataRange;
  24300. if (!this.myChart.canvasSupported) {
  24301. this.dataRangeOption.realtime = false;
  24302. }
  24303. var splitNumber = this.dataRangeOption.splitNumber <= 0 || this.dataRangeOption.calculable ? 100 : this.dataRangeOption.splitNumber;
  24304. this._colorList = zrColor.getGradientColors(this.dataRangeOption.color, Math.max((splitNumber - this.dataRangeOption.color.length) / (this.dataRangeOption.color.length - 1), 0) + 1);
  24305. if (this._colorList.length > splitNumber) {
  24306. var len = this._colorList.length;
  24307. var newColorList = [this._colorList[0]];
  24308. var step = len / (splitNumber - 1);
  24309. for (var i = 1; i < splitNumber - 1; i++) {
  24310. newColorList.push(this._colorList[Math.floor(i * step)]);
  24311. }
  24312. newColorList.push(this._colorList[len - 1]);
  24313. this._colorList = newColorList;
  24314. }
  24315. var precision = this.dataRangeOption.precision;
  24316. this._gap = (this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber;
  24317. while (this._gap.toFixed(precision) - 0 != this._gap && precision < 5) {
  24318. precision++;
  24319. }
  24320. this.dataRangeOption.precision = precision;
  24321. this._gap = ((this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber).toFixed(precision) - 0;
  24322. this._valueTextList = [];
  24323. for (var i = 0; i < splitNumber; i++) {
  24324. this._selectedMap[i] = true;
  24325. this._valueTextList.unshift(this._textFormat(i * this._gap + this.dataRangeOption.min, (i + 1) * this._gap + this.dataRangeOption.min));
  24326. }
  24327. }
  24328. this.clear();
  24329. this._buildShape();
  24330. },
  24331. getColor: function (value) {
  24332. if (isNaN(value)) {
  24333. return null;
  24334. }
  24335. if (this.dataRangeOption.min == this.dataRangeOption.max) {
  24336. return this._colorList[0];
  24337. }
  24338. if (value < this.dataRangeOption.min) {
  24339. value = this.dataRangeOption.min;
  24340. } else if (value > this.dataRangeOption.max) {
  24341. value = this.dataRangeOption.max;
  24342. }
  24343. if (this.dataRangeOption.calculable) {
  24344. if (value - (this._gap * this._range.start + this.dataRangeOption.min) > 0.00005 || value - (this._gap * this._range.end + this.dataRangeOption.min) < -0.00005) {
  24345. return null;
  24346. }
  24347. }
  24348. var idx = this._colorList.length - Math.ceil((value - this.dataRangeOption.min) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._colorList.length);
  24349. if (idx == this._colorList.length) {
  24350. idx--;
  24351. }
  24352. if (this._selectedMap[idx]) {
  24353. return this._colorList[idx];
  24354. } else {
  24355. return null;
  24356. }
  24357. },
  24358. getColorByIndex: function (idx) {
  24359. if (idx >= this._colorList.length) {
  24360. idx = this._colorList.length - 1;
  24361. } else if (idx < 0) {
  24362. idx = 0;
  24363. }
  24364. return this._colorList[idx];
  24365. },
  24366. onbeforDispose: function () {
  24367. this.messageCenter.unbind(ecConfig.EVENT.HOVER, this._onhoverlink);
  24368. }
  24369. };
  24370. zrUtil.inherits(DataRange, Base);
  24371. require('../component').define('dataRange', DataRange);
  24372. return DataRange;
  24373. });define('echarts/util/shape/HandlePolygon', [
  24374. 'require',
  24375. 'zrender/shape/Base',
  24376. 'zrender/shape/Polygon',
  24377. 'zrender/tool/util'
  24378. ], function (require) {
  24379. var Base = require('zrender/shape/Base');
  24380. var PolygonShape = require('zrender/shape/Polygon');
  24381. var zrUtil = require('zrender/tool/util');
  24382. function HandlePolygon(options) {
  24383. Base.call(this, options);
  24384. }
  24385. HandlePolygon.prototype = {
  24386. type: 'handle-polygon',
  24387. buildPath: function (ctx, style) {
  24388. PolygonShape.prototype.buildPath(ctx, style);
  24389. },
  24390. isCover: function (x, y) {
  24391. var originPos = this.transformCoordToLocal(x, y);
  24392. x = originPos[0];
  24393. y = originPos[1];
  24394. var rect = this.style.rect;
  24395. if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
  24396. return true;
  24397. } else {
  24398. return false;
  24399. }
  24400. }
  24401. };
  24402. zrUtil.inherits(HandlePolygon, Base);
  24403. return HandlePolygon;
  24404. });define('echarts/chart/k', [
  24405. 'require',
  24406. './base',
  24407. '../util/shape/Candle',
  24408. '../component/axis',
  24409. '../component/grid',
  24410. '../component/dataZoom',
  24411. '../config',
  24412. '../util/ecData',
  24413. 'zrender/tool/util',
  24414. '../chart'
  24415. ], function (require) {
  24416. var ChartBase = require('./base');
  24417. var CandleShape = require('../util/shape/Candle');
  24418. require('../component/axis');
  24419. require('../component/grid');
  24420. require('../component/dataZoom');
  24421. var ecConfig = require('../config');
  24422. ecConfig.k = {
  24423. zlevel: 0,
  24424. z: 2,
  24425. clickable: true,
  24426. hoverable: true,
  24427. legendHoverLink: false,
  24428. xAxisIndex: 0,
  24429. yAxisIndex: 0,
  24430. itemStyle: {
  24431. normal: {
  24432. color: '#fff',
  24433. color0: '#00aa11',
  24434. lineStyle: {
  24435. width: 1,
  24436. color: '#ff3200',
  24437. color0: '#00aa11'
  24438. },
  24439. label: { show: false }
  24440. },
  24441. emphasis: { label: { show: false } }
  24442. }
  24443. };
  24444. var ecData = require('../util/ecData');
  24445. var zrUtil = require('zrender/tool/util');
  24446. function K(ecTheme, messageCenter, zr, option, myChart) {
  24447. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  24448. this.refresh(option);
  24449. }
  24450. K.prototype = {
  24451. type: ecConfig.CHART_TYPE_K,
  24452. _buildShape: function () {
  24453. var series = this.series;
  24454. this.selectedMap = {};
  24455. var _position2sIndexMap = {
  24456. top: [],
  24457. bottom: []
  24458. };
  24459. var xAxis;
  24460. for (var i = 0, l = series.length; i < l; i++) {
  24461. if (series[i].type === ecConfig.CHART_TYPE_K) {
  24462. series[i] = this.reformOption(series[i]);
  24463. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  24464. xAxis = this.component.xAxis.getAxis(series[i].xAxisIndex);
  24465. if (xAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  24466. _position2sIndexMap[xAxis.getPosition()].push(i);
  24467. }
  24468. }
  24469. }
  24470. for (var position in _position2sIndexMap) {
  24471. if (_position2sIndexMap[position].length > 0) {
  24472. this._buildSinglePosition(position, _position2sIndexMap[position]);
  24473. }
  24474. }
  24475. this.addShapeList();
  24476. },
  24477. _buildSinglePosition: function (position, seriesArray) {
  24478. var mapData = this._mapData(seriesArray);
  24479. var locationMap = mapData.locationMap;
  24480. var maxDataLength = mapData.maxDataLength;
  24481. if (maxDataLength === 0 || locationMap.length === 0) {
  24482. return;
  24483. }
  24484. this._buildHorizontal(seriesArray, maxDataLength, locationMap);
  24485. for (var i = 0, l = seriesArray.length; i < l; i++) {
  24486. this.buildMark(seriesArray[i]);
  24487. }
  24488. },
  24489. _mapData: function (seriesArray) {
  24490. var series = this.series;
  24491. var serie;
  24492. var serieName;
  24493. var legend = this.component.legend;
  24494. var locationMap = [];
  24495. var maxDataLength = 0;
  24496. for (var i = 0, l = seriesArray.length; i < l; i++) {
  24497. serie = series[seriesArray[i]];
  24498. serieName = serie.name;
  24499. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  24500. if (this.selectedMap[serieName]) {
  24501. locationMap.push(seriesArray[i]);
  24502. }
  24503. maxDataLength = Math.max(maxDataLength, serie.data.length);
  24504. }
  24505. return {
  24506. locationMap: locationMap,
  24507. maxDataLength: maxDataLength
  24508. };
  24509. },
  24510. _buildHorizontal: function (seriesArray, maxDataLength, locationMap) {
  24511. var series = this.series;
  24512. var seriesIndex;
  24513. var serie;
  24514. var xAxisIndex;
  24515. var categoryAxis;
  24516. var yAxisIndex;
  24517. var valueAxis;
  24518. var pointList = {};
  24519. var candleWidth;
  24520. var data;
  24521. var value;
  24522. var barMaxWidth;
  24523. for (var j = 0, k = locationMap.length; j < k; j++) {
  24524. seriesIndex = locationMap[j];
  24525. serie = series[seriesIndex];
  24526. xAxisIndex = serie.xAxisIndex || 0;
  24527. categoryAxis = this.component.xAxis.getAxis(xAxisIndex);
  24528. candleWidth = serie.barWidth || Math.floor(categoryAxis.getGap() / 2);
  24529. barMaxWidth = serie.barMaxWidth;
  24530. if (barMaxWidth && barMaxWidth < candleWidth) {
  24531. candleWidth = barMaxWidth;
  24532. }
  24533. yAxisIndex = serie.yAxisIndex || 0;
  24534. valueAxis = this.component.yAxis.getAxis(yAxisIndex);
  24535. pointList[seriesIndex] = [];
  24536. for (var i = 0, l = maxDataLength; i < l; i++) {
  24537. if (categoryAxis.getNameByIndex(i) == null) {
  24538. break;
  24539. }
  24540. data = serie.data[i];
  24541. value = this.getDataFromOption(data, '-');
  24542. if (value === '-' || value.length != 4) {
  24543. continue;
  24544. }
  24545. pointList[seriesIndex].push([
  24546. categoryAxis.getCoordByIndex(i),
  24547. candleWidth,
  24548. valueAxis.getCoord(value[0]),
  24549. valueAxis.getCoord(value[1]),
  24550. valueAxis.getCoord(value[2]),
  24551. valueAxis.getCoord(value[3]),
  24552. i,
  24553. categoryAxis.getNameByIndex(i)
  24554. ]);
  24555. }
  24556. }
  24557. this._buildKLine(seriesArray, pointList);
  24558. },
  24559. _buildKLine: function (seriesArray, pointList) {
  24560. var series = this.series;
  24561. var nLineWidth;
  24562. var nLineColor;
  24563. var nLineColor0;
  24564. var nColor;
  24565. var nColor0;
  24566. var eLineWidth;
  24567. var eLineColor;
  24568. var eLineColor0;
  24569. var eColor;
  24570. var eColor0;
  24571. var serie;
  24572. var queryTarget;
  24573. var data;
  24574. var seriesPL;
  24575. var singlePoint;
  24576. var candleType;
  24577. var seriesIndex;
  24578. for (var sIdx = 0, len = seriesArray.length; sIdx < len; sIdx++) {
  24579. seriesIndex = seriesArray[sIdx];
  24580. serie = series[seriesIndex];
  24581. seriesPL = pointList[seriesIndex];
  24582. if (this._isLarge(seriesPL)) {
  24583. seriesPL = this._getLargePointList(seriesPL);
  24584. }
  24585. if (serie.type === ecConfig.CHART_TYPE_K && seriesPL != null) {
  24586. queryTarget = serie;
  24587. nLineWidth = this.query(queryTarget, 'itemStyle.normal.lineStyle.width');
  24588. nLineColor = this.query(queryTarget, 'itemStyle.normal.lineStyle.color');
  24589. nLineColor0 = this.query(queryTarget, 'itemStyle.normal.lineStyle.color0');
  24590. nColor = this.query(queryTarget, 'itemStyle.normal.color');
  24591. nColor0 = this.query(queryTarget, 'itemStyle.normal.color0');
  24592. eLineWidth = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.width');
  24593. eLineColor = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color');
  24594. eLineColor0 = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color0');
  24595. eColor = this.query(queryTarget, 'itemStyle.emphasis.color');
  24596. eColor0 = this.query(queryTarget, 'itemStyle.emphasis.color0');
  24597. for (var i = 0, l = seriesPL.length; i < l; i++) {
  24598. singlePoint = seriesPL[i];
  24599. data = serie.data[singlePoint[6]];
  24600. queryTarget = data;
  24601. candleType = singlePoint[3] < singlePoint[2];
  24602. 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));
  24603. }
  24604. }
  24605. }
  24606. },
  24607. _isLarge: function (singlePL) {
  24608. return singlePL[0][1] < 0.5;
  24609. },
  24610. _getLargePointList: function (singlePL) {
  24611. var total = this.component.grid.getWidth();
  24612. var len = singlePL.length;
  24613. var newList = [];
  24614. for (var i = 0; i < total; i++) {
  24615. newList[i] = singlePL[Math.floor(len / total * i)];
  24616. }
  24617. return newList;
  24618. },
  24619. _getCandle: function (seriesIndex, dataIndex, name, x, width, y0, y1, y2, y3, nColor, nLinewidth, nLineColor, eColor, eLinewidth, eLineColor) {
  24620. var series = this.series;
  24621. var serie = series[seriesIndex];
  24622. var data = serie.data[dataIndex];
  24623. var queryTarget = [
  24624. data,
  24625. serie
  24626. ];
  24627. var itemShape = {
  24628. zlevel: this.getZlevelBase(),
  24629. z: this.getZBase(),
  24630. clickable: this.deepQuery(queryTarget, 'clickable'),
  24631. hoverable: this.deepQuery(queryTarget, 'hoverable'),
  24632. style: {
  24633. x: x,
  24634. y: [
  24635. y0,
  24636. y1,
  24637. y2,
  24638. y3
  24639. ],
  24640. width: width,
  24641. color: nColor,
  24642. strokeColor: nLineColor,
  24643. lineWidth: nLinewidth,
  24644. brushType: 'both'
  24645. },
  24646. highlightStyle: {
  24647. color: eColor,
  24648. strokeColor: eLineColor,
  24649. lineWidth: eLinewidth
  24650. },
  24651. _seriesIndex: seriesIndex
  24652. };
  24653. itemShape = this.addLabel(itemShape, serie, data, name);
  24654. ecData.pack(itemShape, serie, seriesIndex, data, dataIndex, name);
  24655. itemShape = new CandleShape(itemShape);
  24656. return itemShape;
  24657. },
  24658. getMarkCoord: function (seriesIndex, mpData) {
  24659. var serie = this.series[seriesIndex];
  24660. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  24661. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  24662. return [
  24663. typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
  24664. typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
  24665. ];
  24666. },
  24667. refresh: function (newOption) {
  24668. if (newOption) {
  24669. this.option = newOption;
  24670. this.series = newOption.series;
  24671. }
  24672. this.backupShapeList();
  24673. this._buildShape();
  24674. },
  24675. addDataAnimation: function (params, done) {
  24676. var series = this.series;
  24677. var aniMap = {};
  24678. for (var i = 0, l = params.length; i < l; i++) {
  24679. aniMap[params[i][0]] = params[i];
  24680. }
  24681. var x;
  24682. var dx;
  24683. var y;
  24684. var serie;
  24685. var seriesIndex;
  24686. var dataIndex;
  24687. var aniCount = 0;
  24688. function animationDone() {
  24689. aniCount--;
  24690. if (aniCount === 0) {
  24691. done && done();
  24692. }
  24693. }
  24694. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  24695. seriesIndex = this.shapeList[i]._seriesIndex;
  24696. if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
  24697. if (this.shapeList[i].type === 'candle') {
  24698. dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
  24699. serie = series[seriesIndex];
  24700. if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
  24701. this.zr.delShape(this.shapeList[i].id);
  24702. continue;
  24703. } else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
  24704. this.zr.delShape(this.shapeList[i].id);
  24705. continue;
  24706. }
  24707. dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
  24708. x = aniMap[seriesIndex][2] ? dx : -dx;
  24709. y = 0;
  24710. aniCount++;
  24711. this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
  24712. position: [
  24713. x,
  24714. y
  24715. ]
  24716. }).done(animationDone).start();
  24717. }
  24718. }
  24719. }
  24720. if (!aniCount) {
  24721. animationDone();
  24722. }
  24723. }
  24724. };
  24725. zrUtil.inherits(K, ChartBase);
  24726. require('../chart').define('k', K);
  24727. return K;
  24728. });define('echarts/chart/pie', [
  24729. 'require',
  24730. './base',
  24731. 'zrender/shape/Text',
  24732. 'zrender/shape/Ring',
  24733. 'zrender/shape/Circle',
  24734. 'zrender/shape/Sector',
  24735. 'zrender/shape/Polyline',
  24736. '../config',
  24737. '../util/ecData',
  24738. 'zrender/tool/util',
  24739. 'zrender/tool/math',
  24740. 'zrender/tool/color',
  24741. '../chart'
  24742. ], function (require) {
  24743. var ChartBase = require('./base');
  24744. var TextShape = require('zrender/shape/Text');
  24745. var RingShape = require('zrender/shape/Ring');
  24746. var CircleShape = require('zrender/shape/Circle');
  24747. var SectorShape = require('zrender/shape/Sector');
  24748. var PolylineShape = require('zrender/shape/Polyline');
  24749. var ecConfig = require('../config');
  24750. ecConfig.pie = {
  24751. zlevel: 0,
  24752. z: 2,
  24753. clickable: true,
  24754. legendHoverLink: true,
  24755. center: [
  24756. '50%',
  24757. '50%'
  24758. ],
  24759. radius: [
  24760. 0,
  24761. '75%'
  24762. ],
  24763. clockWise: true,
  24764. startAngle: 90,
  24765. minAngle: 0,
  24766. selectedOffset: 10,
  24767. itemStyle: {
  24768. normal: {
  24769. borderColor: 'rgba(0,0,0,0)',
  24770. borderWidth: 1,
  24771. label: {
  24772. show: true,
  24773. position: 'outer'
  24774. },
  24775. labelLine: {
  24776. show: true,
  24777. length: 20,
  24778. lineStyle: {
  24779. width: 1,
  24780. type: 'solid'
  24781. }
  24782. }
  24783. },
  24784. emphasis: {
  24785. borderColor: 'rgba(0,0,0,0)',
  24786. borderWidth: 1,
  24787. label: { show: false },
  24788. labelLine: {
  24789. show: false,
  24790. length: 20,
  24791. lineStyle: {
  24792. width: 1,
  24793. type: 'solid'
  24794. }
  24795. }
  24796. }
  24797. }
  24798. };
  24799. var ecData = require('../util/ecData');
  24800. var zrUtil = require('zrender/tool/util');
  24801. var zrMath = require('zrender/tool/math');
  24802. var zrColor = require('zrender/tool/color');
  24803. function Pie(ecTheme, messageCenter, zr, option, myChart) {
  24804. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  24805. var self = this;
  24806. self.shapeHandler.onmouseover = function (param) {
  24807. var shape = param.target;
  24808. var seriesIndex = ecData.get(shape, 'seriesIndex');
  24809. var dataIndex = ecData.get(shape, 'dataIndex');
  24810. var percent = ecData.get(shape, 'special');
  24811. var center = [
  24812. shape.style.x,
  24813. shape.style.y
  24814. ];
  24815. var startAngle = shape.style.startAngle;
  24816. var endAngle = shape.style.endAngle;
  24817. var midAngle = ((endAngle + startAngle) / 2 + 360) % 360;
  24818. var defaultColor = shape.highlightStyle.color;
  24819. var label = self.getLabel(seriesIndex, dataIndex, percent, center, midAngle, defaultColor, true);
  24820. if (label) {
  24821. self.zr.addHoverShape(label);
  24822. }
  24823. var labelLine = self.getLabelLine(seriesIndex, dataIndex, center, shape.style.r0, shape.style.r, midAngle, defaultColor, true);
  24824. if (labelLine) {
  24825. self.zr.addHoverShape(labelLine);
  24826. }
  24827. };
  24828. this.refresh(option);
  24829. }
  24830. Pie.prototype = {
  24831. type: ecConfig.CHART_TYPE_PIE,
  24832. _buildShape: function () {
  24833. var series = this.series;
  24834. var legend = this.component.legend;
  24835. this.selectedMap = {};
  24836. this._selected = {};
  24837. var center;
  24838. var radius;
  24839. var pieCase;
  24840. this._selectedMode = false;
  24841. var serieName;
  24842. for (var i = 0, l = series.length; i < l; i++) {
  24843. if (series[i].type === ecConfig.CHART_TYPE_PIE) {
  24844. series[i] = this.reformOption(series[i]);
  24845. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  24846. serieName = series[i].name || '';
  24847. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  24848. if (!this.selectedMap[serieName]) {
  24849. continue;
  24850. }
  24851. center = this.parseCenter(this.zr, series[i].center);
  24852. radius = this.parseRadius(this.zr, series[i].radius);
  24853. this._selectedMode = this._selectedMode || series[i].selectedMode;
  24854. this._selected[i] = [];
  24855. if (this.deepQuery([
  24856. series[i],
  24857. this.option
  24858. ], 'calculable')) {
  24859. pieCase = {
  24860. zlevel: this.getZlevelBase(),
  24861. z: this.getZBase(),
  24862. hoverable: false,
  24863. style: {
  24864. x: center[0],
  24865. y: center[1],
  24866. r0: radius[0] <= 10 ? 0 : radius[0] - 10,
  24867. r: radius[1] + 10,
  24868. brushType: 'stroke',
  24869. lineWidth: 1,
  24870. strokeColor: series[i].calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor
  24871. }
  24872. };
  24873. ecData.pack(pieCase, series[i], i, undefined, -1);
  24874. this.setCalculable(pieCase);
  24875. pieCase = radius[0] <= 10 ? new CircleShape(pieCase) : new RingShape(pieCase);
  24876. this.shapeList.push(pieCase);
  24877. }
  24878. this._buildSinglePie(i);
  24879. this.buildMark(i);
  24880. }
  24881. }
  24882. this.addShapeList();
  24883. },
  24884. _buildSinglePie: function (seriesIndex) {
  24885. var series = this.series;
  24886. var serie = series[seriesIndex];
  24887. var data = serie.data;
  24888. var legend = this.component.legend;
  24889. var itemName;
  24890. var totalSelected = 0;
  24891. var totalSelectedValue0 = 0;
  24892. var totalValue = 0;
  24893. var maxValue = Number.NEGATIVE_INFINITY;
  24894. var singleShapeList = [];
  24895. for (var i = 0, l = data.length; i < l; i++) {
  24896. itemName = data[i].name;
  24897. this.selectedMap[itemName] = legend ? legend.isSelected(itemName) : true;
  24898. if (this.selectedMap[itemName] && !isNaN(data[i].value)) {
  24899. if (+data[i].value !== 0) {
  24900. totalSelected++;
  24901. } else {
  24902. totalSelectedValue0++;
  24903. }
  24904. totalValue += +data[i].value;
  24905. maxValue = Math.max(maxValue, +data[i].value);
  24906. }
  24907. }
  24908. if (totalValue === 0) {
  24909. return;
  24910. }
  24911. var percent = 100;
  24912. var clockWise = serie.clockWise;
  24913. var startAngle = (serie.startAngle.toFixed(2) - 0 + 360) % 360;
  24914. var endAngle;
  24915. var minAngle = serie.minAngle || 0.01;
  24916. var totalAngle = 360 - minAngle * totalSelected - 0.01 * totalSelectedValue0;
  24917. var defaultColor;
  24918. var roseType = serie.roseType;
  24919. var center;
  24920. var radius;
  24921. var r0;
  24922. var r1;
  24923. for (var i = 0, l = data.length; i < l; i++) {
  24924. itemName = data[i].name;
  24925. if (!this.selectedMap[itemName] || isNaN(data[i].value)) {
  24926. continue;
  24927. }
  24928. defaultColor = legend ? legend.getColor(itemName) : this.zr.getColor(i);
  24929. percent = data[i].value / totalValue;
  24930. if (roseType != 'area') {
  24931. endAngle = clockWise ? startAngle - percent * totalAngle - (percent !== 0 ? minAngle : 0.01) : percent * totalAngle + startAngle + (percent !== 0 ? minAngle : 0.01);
  24932. } else {
  24933. endAngle = clockWise ? startAngle - 360 / l : 360 / l + startAngle;
  24934. }
  24935. endAngle = endAngle.toFixed(2) - 0;
  24936. percent = (percent * 100).toFixed(2);
  24937. center = this.parseCenter(this.zr, serie.center);
  24938. radius = this.parseRadius(this.zr, serie.radius);
  24939. r0 = +radius[0];
  24940. r1 = +radius[1];
  24941. if (roseType === 'radius') {
  24942. r1 = data[i].value / maxValue * (r1 - r0) * 0.8 + (r1 - r0) * 0.2 + r0;
  24943. } else if (roseType === 'area') {
  24944. r1 = Math.sqrt(data[i].value / maxValue) * (r1 - r0) + r0;
  24945. }
  24946. if (clockWise) {
  24947. var temp;
  24948. temp = startAngle;
  24949. startAngle = endAngle;
  24950. endAngle = temp;
  24951. }
  24952. this._buildItem(singleShapeList, seriesIndex, i, percent, data[i].selected, center, r0, r1, startAngle, endAngle, defaultColor);
  24953. if (!clockWise) {
  24954. startAngle = endAngle;
  24955. }
  24956. }
  24957. this._autoLabelLayout(singleShapeList, center, r1);
  24958. for (var i = 0, l = singleShapeList.length; i < l; i++) {
  24959. this.shapeList.push(singleShapeList[i]);
  24960. }
  24961. singleShapeList = null;
  24962. },
  24963. _buildItem: function (singleShapeList, seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor) {
  24964. var series = this.series;
  24965. var midAngle = ((endAngle + startAngle) / 2 + 360) % 360;
  24966. var sector = this.getSector(seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor);
  24967. ecData.pack(sector, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
  24968. singleShapeList.push(sector);
  24969. var label = this.getLabel(seriesIndex, dataIndex, percent, center, midAngle, defaultColor, false);
  24970. var labelLine = this.getLabelLine(seriesIndex, dataIndex, center, r0, r1, midAngle, defaultColor, false);
  24971. if (labelLine) {
  24972. ecData.pack(labelLine, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
  24973. singleShapeList.push(labelLine);
  24974. }
  24975. if (label) {
  24976. ecData.pack(label, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
  24977. label._labelLine = labelLine;
  24978. singleShapeList.push(label);
  24979. }
  24980. },
  24981. getSector: function (seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor) {
  24982. var series = this.series;
  24983. var serie = series[seriesIndex];
  24984. var data = serie.data[dataIndex];
  24985. var queryTarget = [
  24986. data,
  24987. serie
  24988. ];
  24989. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  24990. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  24991. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  24992. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  24993. var sector = {
  24994. zlevel: this.getZlevelBase(),
  24995. z: this.getZBase(),
  24996. clickable: this.deepQuery(queryTarget, 'clickable'),
  24997. style: {
  24998. x: center[0],
  24999. y: center[1],
  25000. r0: r0,
  25001. r: r1,
  25002. startAngle: startAngle,
  25003. endAngle: endAngle,
  25004. brushType: 'both',
  25005. color: normalColor,
  25006. lineWidth: normal.borderWidth,
  25007. strokeColor: normal.borderColor,
  25008. lineJoin: 'round'
  25009. },
  25010. highlightStyle: {
  25011. color: emphasisColor,
  25012. lineWidth: emphasis.borderWidth,
  25013. strokeColor: emphasis.borderColor,
  25014. lineJoin: 'round'
  25015. },
  25016. _seriesIndex: seriesIndex,
  25017. _dataIndex: dataIndex
  25018. };
  25019. if (isSelected) {
  25020. var midAngle = ((sector.style.startAngle + sector.style.endAngle) / 2).toFixed(2) - 0;
  25021. sector.style._hasSelected = true;
  25022. sector.style._x = sector.style.x;
  25023. sector.style._y = sector.style.y;
  25024. var offset = this.query(serie, 'selectedOffset');
  25025. sector.style.x += zrMath.cos(midAngle, true) * offset;
  25026. sector.style.y -= zrMath.sin(midAngle, true) * offset;
  25027. this._selected[seriesIndex][dataIndex] = true;
  25028. } else {
  25029. this._selected[seriesIndex][dataIndex] = false;
  25030. }
  25031. if (this._selectedMode) {
  25032. sector.onclick = this.shapeHandler.onclick;
  25033. }
  25034. if (this.deepQuery([
  25035. data,
  25036. serie,
  25037. this.option
  25038. ], 'calculable')) {
  25039. this.setCalculable(sector);
  25040. sector.draggable = true;
  25041. }
  25042. if (this._needLabel(serie, data, true) || this._needLabelLine(serie, data, true)) {
  25043. sector.onmouseover = this.shapeHandler.onmouseover;
  25044. }
  25045. sector = new SectorShape(sector);
  25046. return sector;
  25047. },
  25048. getLabel: function (seriesIndex, dataIndex, percent, center, midAngle, defaultColor, isEmphasis) {
  25049. var series = this.series;
  25050. var serie = series[seriesIndex];
  25051. var data = serie.data[dataIndex];
  25052. if (!this._needLabel(serie, data, isEmphasis)) {
  25053. return;
  25054. }
  25055. var status = isEmphasis ? 'emphasis' : 'normal';
  25056. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  25057. var labelControl = itemStyle[status].label;
  25058. var textStyle = labelControl.textStyle || {};
  25059. var centerX = center[0];
  25060. var centerY = center[1];
  25061. var x;
  25062. var y;
  25063. var radius = this.parseRadius(this.zr, serie.radius);
  25064. var textAlign;
  25065. var textBaseline = 'middle';
  25066. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  25067. if (labelControl.position === 'center') {
  25068. x = centerX;
  25069. y = centerY;
  25070. textAlign = 'center';
  25071. } else if (labelControl.position === 'inner' || labelControl.position === 'inside') {
  25072. radius = (radius[0] + radius[1]) * (labelControl.distance || 0.5);
  25073. x = Math.round(centerX + radius * zrMath.cos(midAngle, true));
  25074. y = Math.round(centerY - radius * zrMath.sin(midAngle, true));
  25075. defaultColor = '#fff';
  25076. textAlign = 'center';
  25077. } else {
  25078. radius = radius[1] - -itemStyle[status].labelLine.length;
  25079. x = Math.round(centerX + radius * zrMath.cos(midAngle, true));
  25080. y = Math.round(centerY - radius * zrMath.sin(midAngle, true));
  25081. textAlign = midAngle >= 90 && midAngle <= 270 ? 'right' : 'left';
  25082. }
  25083. if (labelControl.position != 'center' && labelControl.position != 'inner' && labelControl.position != 'inside') {
  25084. x += textAlign === 'left' ? 20 : -20;
  25085. }
  25086. data.__labelX = x - (textAlign === 'left' ? 5 : -5);
  25087. data.__labelY = y;
  25088. var ts = new TextShape({
  25089. zlevel: this.getZlevelBase(),
  25090. z: this.getZBase() + 1,
  25091. hoverable: false,
  25092. style: {
  25093. x: x,
  25094. y: y,
  25095. color: textStyle.color || defaultColor,
  25096. text: this.getLabelText(seriesIndex, dataIndex, percent, status),
  25097. textAlign: textStyle.align || textAlign,
  25098. textBaseline: textStyle.baseline || textBaseline,
  25099. textFont: this.getFont(textStyle)
  25100. },
  25101. highlightStyle: { brushType: 'fill' }
  25102. });
  25103. ts._radius = radius;
  25104. ts._labelPosition = labelControl.position || 'outer';
  25105. ts._rect = ts.getRect(ts.style);
  25106. ts._seriesIndex = seriesIndex;
  25107. ts._dataIndex = dataIndex;
  25108. return ts;
  25109. },
  25110. getLabelText: function (seriesIndex, dataIndex, percent, status) {
  25111. var series = this.series;
  25112. var serie = series[seriesIndex];
  25113. var data = serie.data[dataIndex];
  25114. var formatter = this.deepQuery([
  25115. data,
  25116. serie
  25117. ], 'itemStyle.' + status + '.label.formatter');
  25118. if (formatter) {
  25119. if (typeof formatter === 'function') {
  25120. return formatter.call(this.myChart, {
  25121. seriesIndex: seriesIndex,
  25122. seriesName: serie.name || '',
  25123. series: serie,
  25124. dataIndex: dataIndex,
  25125. data: data,
  25126. name: data.name,
  25127. value: data.value,
  25128. percent: percent
  25129. });
  25130. } else if (typeof formatter === 'string') {
  25131. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}');
  25132. formatter = formatter.replace('{a0}', serie.name).replace('{b0}', data.name).replace('{c0}', data.value).replace('{d0}', percent);
  25133. return formatter;
  25134. }
  25135. } else {
  25136. return data.name;
  25137. }
  25138. },
  25139. getLabelLine: function (seriesIndex, dataIndex, center, r0, r1, midAngle, defaultColor, isEmphasis) {
  25140. var series = this.series;
  25141. var serie = series[seriesIndex];
  25142. var data = serie.data[dataIndex];
  25143. if (this._needLabelLine(serie, data, isEmphasis)) {
  25144. var status = isEmphasis ? 'emphasis' : 'normal';
  25145. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  25146. var labelLineControl = itemStyle[status].labelLine;
  25147. var lineStyle = labelLineControl.lineStyle || {};
  25148. var centerX = center[0];
  25149. var centerY = center[1];
  25150. var minRadius = r1;
  25151. var maxRadius = this.parseRadius(this.zr, serie.radius)[1] - -labelLineControl.length;
  25152. var cosValue = zrMath.cos(midAngle, true);
  25153. var sinValue = zrMath.sin(midAngle, true);
  25154. return new PolylineShape({
  25155. zlevel: this.getZlevelBase(),
  25156. z: this.getZBase() + 1,
  25157. hoverable: false,
  25158. style: {
  25159. pointList: [
  25160. [
  25161. centerX + minRadius * cosValue,
  25162. centerY - minRadius * sinValue
  25163. ],
  25164. [
  25165. centerX + maxRadius * cosValue,
  25166. centerY - maxRadius * sinValue
  25167. ],
  25168. [
  25169. data.__labelX,
  25170. data.__labelY
  25171. ]
  25172. ],
  25173. strokeColor: lineStyle.color || defaultColor,
  25174. lineType: lineStyle.type,
  25175. lineWidth: lineStyle.width
  25176. },
  25177. _seriesIndex: seriesIndex,
  25178. _dataIndex: dataIndex
  25179. });
  25180. } else {
  25181. return;
  25182. }
  25183. },
  25184. _needLabel: function (serie, data, isEmphasis) {
  25185. return this.deepQuery([
  25186. data,
  25187. serie
  25188. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.label.show');
  25189. },
  25190. _needLabelLine: function (serie, data, isEmphasis) {
  25191. return this.deepQuery([
  25192. data,
  25193. serie
  25194. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.labelLine.show');
  25195. },
  25196. _autoLabelLayout: function (sList, center, r) {
  25197. var leftList = [];
  25198. var rightList = [];
  25199. for (var i = 0, l = sList.length; i < l; i++) {
  25200. if (sList[i]._labelPosition === 'outer' || sList[i]._labelPosition === 'outside') {
  25201. sList[i]._rect._y = sList[i]._rect.y;
  25202. if (sList[i]._rect.x < center[0]) {
  25203. leftList.push(sList[i]);
  25204. } else {
  25205. rightList.push(sList[i]);
  25206. }
  25207. }
  25208. }
  25209. this._layoutCalculate(leftList, center, r, -1);
  25210. this._layoutCalculate(rightList, center, r, 1);
  25211. },
  25212. _layoutCalculate: function (tList, center, r, direction) {
  25213. tList.sort(function (a, b) {
  25214. return a._rect.y - b._rect.y;
  25215. });
  25216. function _changeDown(start, end, delta, direction) {
  25217. for (var j = start; j < end; j++) {
  25218. tList[j]._rect.y += delta;
  25219. tList[j].style.y += delta;
  25220. if (tList[j]._labelLine) {
  25221. tList[j]._labelLine.style.pointList[1][1] += delta;
  25222. tList[j]._labelLine.style.pointList[2][1] += delta;
  25223. }
  25224. if (j > start && j + 1 < end && tList[j + 1]._rect.y > tList[j]._rect.y + tList[j]._rect.height) {
  25225. _changeUp(j, delta / 2);
  25226. return;
  25227. }
  25228. }
  25229. _changeUp(end - 1, delta / 2);
  25230. }
  25231. function _changeUp(end, delta) {
  25232. for (var j = end; j >= 0; j--) {
  25233. tList[j]._rect.y -= delta;
  25234. tList[j].style.y -= delta;
  25235. if (tList[j]._labelLine) {
  25236. tList[j]._labelLine.style.pointList[1][1] -= delta;
  25237. tList[j]._labelLine.style.pointList[2][1] -= delta;
  25238. }
  25239. if (j > 0 && tList[j]._rect.y > tList[j - 1]._rect.y + tList[j - 1]._rect.height) {
  25240. break;
  25241. }
  25242. }
  25243. }
  25244. function _changeX(sList, isDownList, center, r, direction) {
  25245. var x = center[0];
  25246. var y = center[1];
  25247. var deltaX;
  25248. var deltaY;
  25249. var length;
  25250. var lastDeltaX = direction > 0 ? isDownList ? Number.MAX_VALUE : 0 : isDownList ? Number.MAX_VALUE : 0;
  25251. for (var i = 0, l = sList.length; i < l; i++) {
  25252. deltaY = Math.abs(sList[i]._rect.y - y);
  25253. length = sList[i]._radius - r;
  25254. 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);
  25255. if (isDownList && deltaX >= lastDeltaX) {
  25256. deltaX = lastDeltaX - 10;
  25257. }
  25258. if (!isDownList && deltaX <= lastDeltaX) {
  25259. deltaX = lastDeltaX + 10;
  25260. }
  25261. sList[i]._rect.x = sList[i].style.x = x + deltaX * direction;
  25262. if (sList[i]._labelLine) {
  25263. sList[i]._labelLine.style.pointList[2][0] = x + (deltaX - 5) * direction;
  25264. sList[i]._labelLine.style.pointList[1][0] = x + (deltaX - 20) * direction;
  25265. }
  25266. lastDeltaX = deltaX;
  25267. }
  25268. }
  25269. var lastY = 0;
  25270. var delta;
  25271. var len = tList.length;
  25272. var upList = [];
  25273. var downList = [];
  25274. for (var i = 0; i < len; i++) {
  25275. delta = tList[i]._rect.y - lastY;
  25276. if (delta < 0) {
  25277. _changeDown(i, len, -delta, direction);
  25278. }
  25279. lastY = tList[i]._rect.y + tList[i]._rect.height;
  25280. }
  25281. if (this.zr.getHeight() - lastY < 0) {
  25282. _changeUp(len - 1, lastY - this.zr.getHeight());
  25283. }
  25284. for (var i = 0; i < len; i++) {
  25285. if (tList[i]._rect.y >= center[1]) {
  25286. downList.push(tList[i]);
  25287. } else {
  25288. upList.push(tList[i]);
  25289. }
  25290. }
  25291. _changeX(downList, true, center, r, direction);
  25292. _changeX(upList, false, center, r, direction);
  25293. },
  25294. reformOption: function (opt) {
  25295. var _merge = zrUtil.merge;
  25296. opt = _merge(_merge(opt || {}, zrUtil.clone(this.ecTheme.pie || {})), zrUtil.clone(ecConfig.pie));
  25297. opt.itemStyle.normal.label.textStyle = this.getTextStyle(opt.itemStyle.normal.label.textStyle);
  25298. opt.itemStyle.emphasis.label.textStyle = this.getTextStyle(opt.itemStyle.emphasis.label.textStyle);
  25299. this.z = opt.z;
  25300. this.zlevel = opt.zlevel;
  25301. return opt;
  25302. },
  25303. refresh: function (newOption) {
  25304. if (newOption) {
  25305. this.option = newOption;
  25306. this.series = newOption.series;
  25307. }
  25308. this.backupShapeList();
  25309. this._buildShape();
  25310. },
  25311. addDataAnimation: function (params, done) {
  25312. var series = this.series;
  25313. var aniMap = {};
  25314. for (var i = 0, l = params.length; i < l; i++) {
  25315. aniMap[params[i][0]] = params[i];
  25316. }
  25317. var aniCount = 0;
  25318. function animationDone() {
  25319. aniCount--;
  25320. if (aniCount === 0) {
  25321. done && done();
  25322. }
  25323. }
  25324. var sectorMap = {};
  25325. var textMap = {};
  25326. var lineMap = {};
  25327. var backupShapeList = this.shapeList;
  25328. this.shapeList = [];
  25329. var seriesIndex;
  25330. var isHead;
  25331. var dataGrow;
  25332. var deltaIdxMap = {};
  25333. for (var i = 0, l = params.length; i < l; i++) {
  25334. seriesIndex = params[i][0];
  25335. isHead = params[i][2];
  25336. dataGrow = params[i][3];
  25337. if (series[seriesIndex] && series[seriesIndex].type === ecConfig.CHART_TYPE_PIE) {
  25338. if (isHead) {
  25339. if (!dataGrow) {
  25340. sectorMap[seriesIndex + '_' + series[seriesIndex].data.length] = 'delete';
  25341. }
  25342. deltaIdxMap[seriesIndex] = 1;
  25343. } else {
  25344. if (!dataGrow) {
  25345. sectorMap[seriesIndex + '_-1'] = 'delete';
  25346. deltaIdxMap[seriesIndex] = -1;
  25347. } else {
  25348. deltaIdxMap[seriesIndex] = 0;
  25349. }
  25350. }
  25351. this._buildSinglePie(seriesIndex);
  25352. }
  25353. }
  25354. var dataIndex;
  25355. var key;
  25356. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  25357. seriesIndex = this.shapeList[i]._seriesIndex;
  25358. dataIndex = this.shapeList[i]._dataIndex;
  25359. key = seriesIndex + '_' + dataIndex;
  25360. switch (this.shapeList[i].type) {
  25361. case 'sector':
  25362. sectorMap[key] = this.shapeList[i];
  25363. break;
  25364. case 'text':
  25365. textMap[key] = this.shapeList[i];
  25366. break;
  25367. case 'polyline':
  25368. lineMap[key] = this.shapeList[i];
  25369. break;
  25370. }
  25371. }
  25372. this.shapeList = [];
  25373. var targeSector;
  25374. for (var i = 0, l = backupShapeList.length; i < l; i++) {
  25375. seriesIndex = backupShapeList[i]._seriesIndex;
  25376. if (aniMap[seriesIndex]) {
  25377. dataIndex = backupShapeList[i]._dataIndex + deltaIdxMap[seriesIndex];
  25378. key = seriesIndex + '_' + dataIndex;
  25379. targeSector = sectorMap[key];
  25380. if (!targeSector) {
  25381. continue;
  25382. }
  25383. if (backupShapeList[i].type === 'sector') {
  25384. if (targeSector != 'delete') {
  25385. aniCount++;
  25386. this.zr.animate(backupShapeList[i].id, 'style').when(400, {
  25387. startAngle: targeSector.style.startAngle,
  25388. endAngle: targeSector.style.endAngle
  25389. }).done(animationDone).start();
  25390. } else {
  25391. aniCount++;
  25392. 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();
  25393. }
  25394. } else if (backupShapeList[i].type === 'text' || backupShapeList[i].type === 'polyline') {
  25395. if (targeSector === 'delete') {
  25396. this.zr.delShape(backupShapeList[i].id);
  25397. } else {
  25398. switch (backupShapeList[i].type) {
  25399. case 'text':
  25400. aniCount++;
  25401. targeSector = textMap[key];
  25402. this.zr.animate(backupShapeList[i].id, 'style').when(400, {
  25403. x: targeSector.style.x,
  25404. y: targeSector.style.y
  25405. }).done(animationDone).start();
  25406. break;
  25407. case 'polyline':
  25408. aniCount++;
  25409. targeSector = lineMap[key];
  25410. this.zr.animate(backupShapeList[i].id, 'style').when(400, { pointList: targeSector.style.pointList }).done(animationDone).start();
  25411. break;
  25412. }
  25413. }
  25414. }
  25415. }
  25416. }
  25417. this.shapeList = backupShapeList;
  25418. if (!aniCount) {
  25419. animationDone();
  25420. }
  25421. },
  25422. onclick: function (param) {
  25423. var series = this.series;
  25424. if (!this.isClick || !param.target) {
  25425. return;
  25426. }
  25427. this.isClick = false;
  25428. var offset;
  25429. var target = param.target;
  25430. var style = target.style;
  25431. var seriesIndex = ecData.get(target, 'seriesIndex');
  25432. var dataIndex = ecData.get(target, 'dataIndex');
  25433. for (var i = 0, len = this.shapeList.length; i < len; i++) {
  25434. if (this.shapeList[i].id === target.id) {
  25435. seriesIndex = ecData.get(target, 'seriesIndex');
  25436. dataIndex = ecData.get(target, 'dataIndex');
  25437. if (!style._hasSelected) {
  25438. var midAngle = ((style.startAngle + style.endAngle) / 2).toFixed(2) - 0;
  25439. target.style._hasSelected = true;
  25440. this._selected[seriesIndex][dataIndex] = true;
  25441. target.style._x = target.style.x;
  25442. target.style._y = target.style.y;
  25443. offset = this.query(series[seriesIndex], 'selectedOffset');
  25444. target.style.x += zrMath.cos(midAngle, true) * offset;
  25445. target.style.y -= zrMath.sin(midAngle, true) * offset;
  25446. } else {
  25447. target.style.x = target.style._x;
  25448. target.style.y = target.style._y;
  25449. target.style._hasSelected = false;
  25450. this._selected[seriesIndex][dataIndex] = false;
  25451. }
  25452. this.zr.modShape(target.id, target);
  25453. } else if (this.shapeList[i].style._hasSelected && this._selectedMode === 'single') {
  25454. seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
  25455. dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
  25456. this.shapeList[i].style.x = this.shapeList[i].style._x;
  25457. this.shapeList[i].style.y = this.shapeList[i].style._y;
  25458. this.shapeList[i].style._hasSelected = false;
  25459. this._selected[seriesIndex][dataIndex] = false;
  25460. this.zr.modShape(this.shapeList[i].id, this.shapeList[i]);
  25461. }
  25462. }
  25463. this.messageCenter.dispatch(ecConfig.EVENT.PIE_SELECTED, param.event, {
  25464. selected: this._selected,
  25465. target: ecData.get(target, 'name')
  25466. }, this.myChart);
  25467. this.zr.refreshNextFrame();
  25468. }
  25469. };
  25470. zrUtil.inherits(Pie, ChartBase);
  25471. require('../chart').define('pie', Pie);
  25472. return Pie;
  25473. });define('echarts/chart/radar', [
  25474. 'require',
  25475. './base',
  25476. 'zrender/shape/Polygon',
  25477. '../component/polar',
  25478. '../config',
  25479. '../util/ecData',
  25480. 'zrender/tool/util',
  25481. 'zrender/tool/color',
  25482. '../util/accMath',
  25483. '../chart'
  25484. ], function (require) {
  25485. var ChartBase = require('./base');
  25486. var PolygonShape = require('zrender/shape/Polygon');
  25487. require('../component/polar');
  25488. var ecConfig = require('../config');
  25489. ecConfig.radar = {
  25490. zlevel: 0,
  25491. z: 2,
  25492. clickable: true,
  25493. legendHoverLink: true,
  25494. polarIndex: 0,
  25495. itemStyle: {
  25496. normal: {
  25497. label: { show: false },
  25498. lineStyle: {
  25499. width: 2,
  25500. type: 'solid'
  25501. }
  25502. },
  25503. emphasis: { label: { show: false } }
  25504. },
  25505. symbolSize: 2
  25506. };
  25507. var ecData = require('../util/ecData');
  25508. var zrUtil = require('zrender/tool/util');
  25509. var zrColor = require('zrender/tool/color');
  25510. function Radar(ecTheme, messageCenter, zr, option, myChart) {
  25511. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  25512. this.refresh(option);
  25513. }
  25514. Radar.prototype = {
  25515. type: ecConfig.CHART_TYPE_RADAR,
  25516. _buildShape: function () {
  25517. this.selectedMap = {};
  25518. this._symbol = this.option.symbolList;
  25519. this._queryTarget;
  25520. this._dropBoxList = [];
  25521. this._radarDataCounter = 0;
  25522. var series = this.series;
  25523. var legend = this.component.legend;
  25524. var serieName;
  25525. for (var i = 0, l = series.length; i < l; i++) {
  25526. if (series[i].type === ecConfig.CHART_TYPE_RADAR) {
  25527. this.serie = this.reformOption(series[i]);
  25528. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  25529. serieName = this.serie.name || '';
  25530. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  25531. if (this.selectedMap[serieName]) {
  25532. this._queryTarget = [
  25533. this.serie,
  25534. this.option
  25535. ];
  25536. if (this.deepQuery(this._queryTarget, 'calculable')) {
  25537. this._addDropBox(i);
  25538. }
  25539. this._buildSingleRadar(i);
  25540. this.buildMark(i);
  25541. }
  25542. }
  25543. }
  25544. this.addShapeList();
  25545. },
  25546. _buildSingleRadar: function (index) {
  25547. var legend = this.component.legend;
  25548. var iconShape;
  25549. var data = this.serie.data;
  25550. var defaultColor;
  25551. var name;
  25552. var pointList;
  25553. var calculable = this.deepQuery(this._queryTarget, 'calculable');
  25554. for (var i = 0; i < data.length; i++) {
  25555. name = data[i].name || '';
  25556. this.selectedMap[name] = legend ? legend.isSelected(name) : true;
  25557. if (!this.selectedMap[name]) {
  25558. continue;
  25559. }
  25560. if (legend) {
  25561. defaultColor = legend.getColor(name);
  25562. iconShape = legend.getItemShape(name);
  25563. if (iconShape) {
  25564. iconShape.style.brushType = this.deepQuery([
  25565. data[i],
  25566. this.serie
  25567. ], 'itemStyle.normal.areaStyle') ? 'both' : 'stroke';
  25568. legend.setItemShape(name, iconShape);
  25569. }
  25570. } else {
  25571. defaultColor = this.zr.getColor(i);
  25572. }
  25573. pointList = this._getPointList(this.serie.polarIndex, data[i]);
  25574. this._addSymbol(pointList, defaultColor, i, index, this.serie.polarIndex);
  25575. this._addDataShape(pointList, defaultColor, data[i], index, i, calculable);
  25576. this._radarDataCounter++;
  25577. }
  25578. },
  25579. _getPointList: function (polarIndex, dataArr) {
  25580. var pointList = [];
  25581. var vector;
  25582. var polar = this.component.polar;
  25583. var value;
  25584. for (var i = 0, l = dataArr.value.length; i < l; i++) {
  25585. value = this.getDataFromOption(dataArr.value[i]);
  25586. vector = value != '-' ? polar.getVector(polarIndex, i, value) : false;
  25587. if (vector) {
  25588. pointList.push(vector);
  25589. }
  25590. }
  25591. return pointList;
  25592. },
  25593. _addSymbol: function (pointList, defaultColor, dataIndex, seriesIndex, polarIndex) {
  25594. var series = this.series;
  25595. var itemShape;
  25596. var polar = this.component.polar;
  25597. for (var i = 0, l = pointList.length; i < l; i++) {
  25598. itemShape = this.getSymbolShape(this.deepMerge([
  25599. series[seriesIndex].data[dataIndex],
  25600. series[seriesIndex]
  25601. ]), 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');
  25602. itemShape.zlevel = this.getZlevelBase();
  25603. itemShape.z = this.getZBase() + 1;
  25604. ecData.set(itemShape, 'data', series[seriesIndex].data[dataIndex]);
  25605. ecData.set(itemShape, 'value', series[seriesIndex].data[dataIndex].value);
  25606. ecData.set(itemShape, 'dataIndex', dataIndex);
  25607. ecData.set(itemShape, 'special', i);
  25608. this.shapeList.push(itemShape);
  25609. }
  25610. },
  25611. _addDataShape: function (pointList, defaultColor, data, seriesIndex, dataIndex, calculable) {
  25612. var series = this.series;
  25613. var queryTarget = [
  25614. data,
  25615. this.serie
  25616. ];
  25617. var nColor = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), seriesIndex, dataIndex, data);
  25618. var nLineWidth = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.width');
  25619. var nLineType = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.type');
  25620. var nAreaColor = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');
  25621. var nIsAreaFill = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle');
  25622. var shape = {
  25623. zlevel: this.getZlevelBase(),
  25624. z: this.getZBase(),
  25625. style: {
  25626. pointList: pointList,
  25627. brushType: nIsAreaFill ? 'both' : 'stroke',
  25628. color: nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),
  25629. strokeColor: nColor || defaultColor,
  25630. lineWidth: nLineWidth,
  25631. lineType: nLineType
  25632. },
  25633. highlightStyle: {
  25634. brushType: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle') || nIsAreaFill ? 'both' : 'stroke',
  25635. color: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),
  25636. strokeColor: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data) || nColor || defaultColor,
  25637. lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.width') || nLineWidth,
  25638. lineType: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.type') || nLineType
  25639. }
  25640. };
  25641. ecData.pack(shape, series[seriesIndex], seriesIndex, data, dataIndex, data.name, this.component.polar.getIndicator(series[seriesIndex].polarIndex));
  25642. if (calculable) {
  25643. shape.draggable = true;
  25644. this.setCalculable(shape);
  25645. }
  25646. shape = new PolygonShape(shape);
  25647. this.shapeList.push(shape);
  25648. },
  25649. _addDropBox: function (index) {
  25650. var series = this.series;
  25651. var polarIndex = this.deepQuery(this._queryTarget, 'polarIndex');
  25652. if (!this._dropBoxList[polarIndex]) {
  25653. var shape = this.component.polar.getDropBox(polarIndex);
  25654. shape.zlevel = this.getZlevelBase();
  25655. shape.z = this.getZBase();
  25656. this.setCalculable(shape);
  25657. ecData.pack(shape, series, index, undefined, -1);
  25658. this.shapeList.push(shape);
  25659. this._dropBoxList[polarIndex] = true;
  25660. }
  25661. },
  25662. ondragend: function (param, status) {
  25663. var series = this.series;
  25664. if (!this.isDragend || !param.target) {
  25665. return;
  25666. }
  25667. var target = param.target;
  25668. var seriesIndex = ecData.get(target, 'seriesIndex');
  25669. var dataIndex = ecData.get(target, 'dataIndex');
  25670. this.component.legend && this.component.legend.del(series[seriesIndex].data[dataIndex].name);
  25671. series[seriesIndex].data.splice(dataIndex, 1);
  25672. status.dragOut = true;
  25673. status.needRefresh = true;
  25674. this.isDragend = false;
  25675. return;
  25676. },
  25677. ondrop: function (param, status) {
  25678. var series = this.series;
  25679. if (!this.isDrop || !param.target) {
  25680. return;
  25681. }
  25682. var target = param.target;
  25683. var dragged = param.dragged;
  25684. var seriesIndex = ecData.get(target, 'seriesIndex');
  25685. var dataIndex = ecData.get(target, 'dataIndex');
  25686. var data;
  25687. var legend = this.component.legend;
  25688. var value;
  25689. if (dataIndex === -1) {
  25690. data = {
  25691. value: ecData.get(dragged, 'value'),
  25692. name: ecData.get(dragged, 'name')
  25693. };
  25694. series[seriesIndex].data.push(data);
  25695. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  25696. } else {
  25697. var accMath = require('../util/accMath');
  25698. data = series[seriesIndex].data[dataIndex];
  25699. legend && legend.del(data.name);
  25700. data.name += this.option.nameConnector + ecData.get(dragged, 'name');
  25701. value = ecData.get(dragged, 'value');
  25702. for (var i = 0; i < value.length; i++) {
  25703. data.value[i] = accMath.accAdd(data.value[i], value[i]);
  25704. }
  25705. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  25706. }
  25707. status.dragIn = status.dragIn || true;
  25708. this.isDrop = false;
  25709. return;
  25710. },
  25711. refresh: function (newOption) {
  25712. if (newOption) {
  25713. this.option = newOption;
  25714. this.series = newOption.series;
  25715. }
  25716. this.backupShapeList();
  25717. this._buildShape();
  25718. }
  25719. };
  25720. zrUtil.inherits(Radar, ChartBase);
  25721. require('../chart').define('radar', Radar);
  25722. return Radar;
  25723. });define('echarts/component/polar', [
  25724. 'require',
  25725. './base',
  25726. 'zrender/shape/Text',
  25727. 'zrender/shape/Line',
  25728. 'zrender/shape/Polygon',
  25729. 'zrender/shape/Circle',
  25730. 'zrender/shape/Ring',
  25731. '../config',
  25732. 'zrender/tool/util',
  25733. '../util/coordinates',
  25734. '../util/accMath',
  25735. '../util/smartSteps',
  25736. '../component'
  25737. ], function (require) {
  25738. var Base = require('./base');
  25739. var TextShape = require('zrender/shape/Text');
  25740. var LineShape = require('zrender/shape/Line');
  25741. var PolygonShape = require('zrender/shape/Polygon');
  25742. var Circle = require('zrender/shape/Circle');
  25743. var Ring = require('zrender/shape/Ring');
  25744. var ecConfig = require('../config');
  25745. ecConfig.polar = {
  25746. zlevel: 0,
  25747. z: 0,
  25748. center: [
  25749. '50%',
  25750. '50%'
  25751. ],
  25752. radius: '75%',
  25753. startAngle: 90,
  25754. boundaryGap: [
  25755. 0,
  25756. 0
  25757. ],
  25758. splitNumber: 5,
  25759. name: {
  25760. show: true,
  25761. textStyle: { color: '#333' }
  25762. },
  25763. axisLine: {
  25764. show: true,
  25765. lineStyle: {
  25766. color: '#ccc',
  25767. width: 1,
  25768. type: 'solid'
  25769. }
  25770. },
  25771. axisLabel: {
  25772. show: false,
  25773. textStyle: { color: '#333' }
  25774. },
  25775. splitArea: {
  25776. show: true,
  25777. areaStyle: {
  25778. color: [
  25779. 'rgba(250,250,250,0.3)',
  25780. 'rgba(200,200,200,0.3)'
  25781. ]
  25782. }
  25783. },
  25784. splitLine: {
  25785. show: true,
  25786. lineStyle: {
  25787. width: 1,
  25788. color: '#ccc'
  25789. }
  25790. },
  25791. type: 'polygon'
  25792. };
  25793. var zrUtil = require('zrender/tool/util');
  25794. var ecCoordinates = require('../util/coordinates');
  25795. function Polar(ecTheme, messageCenter, zr, option, myChart) {
  25796. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  25797. this.refresh(option);
  25798. }
  25799. Polar.prototype = {
  25800. type: ecConfig.COMPONENT_TYPE_POLAR,
  25801. _buildShape: function () {
  25802. for (var i = 0; i < this.polar.length; i++) {
  25803. this._index = i;
  25804. this.reformOption(this.polar[i]);
  25805. this._queryTarget = [
  25806. this.polar[i],
  25807. this.option
  25808. ];
  25809. this._createVector(i);
  25810. this._buildSpiderWeb(i);
  25811. this._buildText(i);
  25812. this._adjustIndicatorValue(i);
  25813. this._addAxisLabel(i);
  25814. }
  25815. for (var i = 0; i < this.shapeList.length; i++) {
  25816. this.zr.addShape(this.shapeList[i]);
  25817. }
  25818. },
  25819. _createVector: function (index) {
  25820. var item = this.polar[index];
  25821. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  25822. var length = indicator.length;
  25823. var startAngle = item.startAngle;
  25824. var dStep = 2 * Math.PI / length;
  25825. var radius = this._getRadius();
  25826. var __ecIndicator = item.__ecIndicator = [];
  25827. var vector;
  25828. for (var i = 0; i < length; i++) {
  25829. vector = ecCoordinates.polar2cartesian(radius, startAngle * Math.PI / 180 + dStep * i);
  25830. __ecIndicator.push({
  25831. vector: [
  25832. vector[1],
  25833. -vector[0]
  25834. ]
  25835. });
  25836. }
  25837. },
  25838. _getRadius: function () {
  25839. var item = this.polar[this._index];
  25840. return this.parsePercent(item.radius, Math.min(this.zr.getWidth(), this.zr.getHeight()) / 2);
  25841. },
  25842. _buildSpiderWeb: function (index) {
  25843. var item = this.polar[index];
  25844. var __ecIndicator = item.__ecIndicator;
  25845. var splitArea = item.splitArea;
  25846. var splitLine = item.splitLine;
  25847. var center = this.getCenter(index);
  25848. var splitNumber = item.splitNumber;
  25849. var strokeColor = splitLine.lineStyle.color;
  25850. var lineWidth = splitLine.lineStyle.width;
  25851. var show = splitLine.show;
  25852. var axisLine = this.deepQuery(this._queryTarget, 'axisLine');
  25853. this._addArea(__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show);
  25854. axisLine.show && this._addLine(__ecIndicator, center, axisLine);
  25855. },
  25856. _addAxisLabel: function (index) {
  25857. var accMath = require('../util/accMath');
  25858. var item = this.polar[index];
  25859. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  25860. var __ecIndicator = item.__ecIndicator;
  25861. var axisLabel;
  25862. var vector;
  25863. var style;
  25864. var newStyle;
  25865. var splitNumber = this.deepQuery(this._queryTarget, 'splitNumber');
  25866. var center = this.getCenter(index);
  25867. var vector;
  25868. var value;
  25869. var text;
  25870. var theta;
  25871. var offset;
  25872. var interval;
  25873. for (var i = 0; i < indicator.length; i++) {
  25874. axisLabel = this.deepQuery([
  25875. indicator[i],
  25876. item,
  25877. this.option
  25878. ], 'axisLabel');
  25879. if (axisLabel.show) {
  25880. var textStyle = this.deepQuery([
  25881. axisLabel,
  25882. item,
  25883. this.option
  25884. ], 'textStyle');
  25885. var formatter = this.deepQuery([
  25886. axisLabel,
  25887. item
  25888. ], 'formatter');
  25889. style = {};
  25890. style.textFont = this.getFont(textStyle);
  25891. style.color = textStyle.color;
  25892. style = zrUtil.merge(style, axisLabel);
  25893. style.lineWidth = style.width;
  25894. vector = __ecIndicator[i].vector;
  25895. value = __ecIndicator[i].value;
  25896. theta = i / indicator.length * 2 * Math.PI;
  25897. offset = axisLabel.offset || 10;
  25898. interval = axisLabel.interval || 0;
  25899. if (!value) {
  25900. return;
  25901. }
  25902. for (var j = 1; j <= splitNumber; j += interval + 1) {
  25903. newStyle = zrUtil.merge({}, style);
  25904. text = accMath.accAdd(value.min, accMath.accMul(value.step, j));
  25905. if (typeof formatter === 'function') {
  25906. text = formatter(text);
  25907. } else if (typeof formatter === 'string') {
  25908. text = formatter.replace('{a}', '{a0}').replace('{a0}', text);
  25909. } else {
  25910. text = this.numAddCommas(text);
  25911. }
  25912. newStyle.text = text;
  25913. newStyle.x = j * vector[0] / splitNumber + Math.cos(theta) * offset + center[0];
  25914. newStyle.y = j * vector[1] / splitNumber + Math.sin(theta) * offset + center[1];
  25915. this.shapeList.push(new TextShape({
  25916. zlevel: this.getZlevelBase(),
  25917. z: this.getZBase(),
  25918. style: newStyle,
  25919. draggable: false,
  25920. hoverable: false
  25921. }));
  25922. }
  25923. }
  25924. }
  25925. },
  25926. _buildText: function (index) {
  25927. var item = this.polar[index];
  25928. var __ecIndicator = item.__ecIndicator;
  25929. var vector;
  25930. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  25931. var center = this.getCenter(index);
  25932. var style;
  25933. var textAlign;
  25934. var name;
  25935. var rotation;
  25936. var x = 0;
  25937. var y = 0;
  25938. var margin;
  25939. var textStyle;
  25940. for (var i = 0; i < indicator.length; i++) {
  25941. name = this.deepQuery([
  25942. indicator[i],
  25943. item,
  25944. this.option
  25945. ], 'name');
  25946. if (!name.show) {
  25947. continue;
  25948. }
  25949. textStyle = this.deepQuery([
  25950. name,
  25951. item,
  25952. this.option
  25953. ], 'textStyle');
  25954. style = {};
  25955. style.textFont = this.getFont(textStyle);
  25956. style.color = textStyle.color;
  25957. if (typeof name.formatter == 'function') {
  25958. style.text = name.formatter.call(this.myChart, indicator[i].text, i);
  25959. } else if (typeof name.formatter == 'string') {
  25960. style.text = name.formatter.replace('{value}', indicator[i].text);
  25961. } else {
  25962. style.text = indicator[i].text;
  25963. }
  25964. __ecIndicator[i].text = style.text;
  25965. vector = __ecIndicator[i].vector;
  25966. if (Math.round(vector[0]) > 0) {
  25967. textAlign = 'left';
  25968. } else if (Math.round(vector[0]) < 0) {
  25969. textAlign = 'right';
  25970. } else {
  25971. textAlign = 'center';
  25972. }
  25973. if (name.margin == null) {
  25974. vector = this._mapVector(vector, center, 1.1);
  25975. } else {
  25976. margin = name.margin;
  25977. x = vector[0] > 0 ? margin : -margin;
  25978. y = vector[1] > 0 ? margin : -margin;
  25979. x = vector[0] === 0 ? 0 : x;
  25980. y = vector[1] === 0 ? 0 : y;
  25981. vector = this._mapVector(vector, center, 1);
  25982. }
  25983. style.textAlign = textAlign;
  25984. style.x = vector[0] + x;
  25985. style.y = vector[1] + y;
  25986. if (name.rotate) {
  25987. rotation = [
  25988. name.rotate / 180 * Math.PI,
  25989. vector[0],
  25990. vector[1]
  25991. ];
  25992. } else {
  25993. rotation = [
  25994. 0,
  25995. 0,
  25996. 0
  25997. ];
  25998. }
  25999. this.shapeList.push(new TextShape({
  26000. zlevel: this.getZlevelBase(),
  26001. z: this.getZBase(),
  26002. style: style,
  26003. draggable: false,
  26004. hoverable: false,
  26005. rotation: rotation
  26006. }));
  26007. }
  26008. },
  26009. getIndicatorText: function (polarIndex, indicatorIndex) {
  26010. return this.polar[polarIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex].text;
  26011. },
  26012. getDropBox: function (index) {
  26013. var index = index || 0;
  26014. var item = this.polar[index];
  26015. var center = this.getCenter(index);
  26016. var __ecIndicator = item.__ecIndicator;
  26017. var len = __ecIndicator.length;
  26018. var pointList = [];
  26019. var vector;
  26020. var shape;
  26021. var type = item.type;
  26022. if (type == 'polygon') {
  26023. for (var i = 0; i < len; i++) {
  26024. vector = __ecIndicator[i].vector;
  26025. pointList.push(this._mapVector(vector, center, 1.2));
  26026. }
  26027. shape = this._getShape(pointList, 'fill', 'rgba(0,0,0,0)', '', 1);
  26028. } else if (type == 'circle') {
  26029. shape = this._getCircle('', 1, 1.2, center, 'fill', 'rgba(0,0,0,0)');
  26030. }
  26031. return shape;
  26032. },
  26033. _addArea: function (__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show) {
  26034. var shape;
  26035. var scale;
  26036. var scale1;
  26037. var pointList;
  26038. var type = this.deepQuery(this._queryTarget, 'type');
  26039. for (var i = 0; i < splitNumber; i++) {
  26040. scale = (splitNumber - i) / splitNumber;
  26041. if (show) {
  26042. if (type == 'polygon') {
  26043. pointList = this._getPointList(__ecIndicator, scale, center);
  26044. shape = this._getShape(pointList, 'stroke', '', strokeColor, lineWidth);
  26045. } else if (type == 'circle') {
  26046. shape = this._getCircle(strokeColor, lineWidth, scale, center, 'stroke');
  26047. }
  26048. this.shapeList.push(shape);
  26049. }
  26050. if (splitArea.show) {
  26051. scale1 = (splitNumber - i - 1) / splitNumber;
  26052. this._addSplitArea(__ecIndicator, splitArea, scale, scale1, center, i);
  26053. }
  26054. }
  26055. },
  26056. _getCircle: function (strokeColor, lineWidth, scale, center, brushType, color) {
  26057. var radius = this._getRadius();
  26058. return new Circle({
  26059. zlevel: this.getZlevelBase(),
  26060. z: this.getZBase(),
  26061. style: {
  26062. x: center[0],
  26063. y: center[1],
  26064. r: radius * scale,
  26065. brushType: brushType,
  26066. strokeColor: strokeColor,
  26067. lineWidth: lineWidth,
  26068. color: color
  26069. },
  26070. hoverable: false,
  26071. draggable: false
  26072. });
  26073. },
  26074. _getRing: function (color, scale0, scale1, center) {
  26075. var radius = this._getRadius();
  26076. return new Ring({
  26077. zlevel: this.getZlevelBase(),
  26078. z: this.getZBase(),
  26079. style: {
  26080. x: center[0],
  26081. y: center[1],
  26082. r: scale0 * radius,
  26083. r0: scale1 * radius,
  26084. color: color,
  26085. brushType: 'fill'
  26086. },
  26087. hoverable: false,
  26088. draggable: false
  26089. });
  26090. },
  26091. _getPointList: function (__ecIndicator, scale, center) {
  26092. var pointList = [];
  26093. var len = __ecIndicator.length;
  26094. var vector;
  26095. for (var i = 0; i < len; i++) {
  26096. vector = __ecIndicator[i].vector;
  26097. pointList.push(this._mapVector(vector, center, scale));
  26098. }
  26099. return pointList;
  26100. },
  26101. _getShape: function (pointList, brushType, color, strokeColor, lineWidth) {
  26102. return new PolygonShape({
  26103. zlevel: this.getZlevelBase(),
  26104. z: this.getZBase(),
  26105. style: {
  26106. pointList: pointList,
  26107. brushType: brushType,
  26108. color: color,
  26109. strokeColor: strokeColor,
  26110. lineWidth: lineWidth
  26111. },
  26112. hoverable: false,
  26113. draggable: false
  26114. });
  26115. },
  26116. _addSplitArea: function (__ecIndicator, splitArea, scale, scale1, center, colorInd) {
  26117. var indLen = __ecIndicator.length;
  26118. var color;
  26119. var colorArr = splitArea.areaStyle.color;
  26120. var colorLen;
  26121. var vector;
  26122. var vector1;
  26123. var pointList = [];
  26124. var indLen = __ecIndicator.length;
  26125. var shape;
  26126. var type = this.deepQuery(this._queryTarget, 'type');
  26127. if (typeof colorArr == 'string') {
  26128. colorArr = [colorArr];
  26129. }
  26130. colorLen = colorArr.length;
  26131. color = colorArr[colorInd % colorLen];
  26132. if (type == 'polygon') {
  26133. for (var i = 0; i < indLen; i++) {
  26134. pointList = [];
  26135. vector = __ecIndicator[i].vector;
  26136. vector1 = __ecIndicator[(i + 1) % indLen].vector;
  26137. pointList.push(this._mapVector(vector, center, scale));
  26138. pointList.push(this._mapVector(vector, center, scale1));
  26139. pointList.push(this._mapVector(vector1, center, scale1));
  26140. pointList.push(this._mapVector(vector1, center, scale));
  26141. shape = this._getShape(pointList, 'fill', color, '', 1);
  26142. this.shapeList.push(shape);
  26143. }
  26144. } else if (type == 'circle') {
  26145. shape = this._getRing(color, scale, scale1, center);
  26146. this.shapeList.push(shape);
  26147. }
  26148. },
  26149. _mapVector: function (vector, center, scale) {
  26150. return [
  26151. vector[0] * scale + center[0],
  26152. vector[1] * scale + center[1]
  26153. ];
  26154. },
  26155. getCenter: function (index) {
  26156. var index = index || 0;
  26157. return this.parseCenter(this.zr, this.polar[index].center);
  26158. },
  26159. _addLine: function (__ecIndicator, center, axisLine) {
  26160. var indLen = __ecIndicator.length;
  26161. var line;
  26162. var vector;
  26163. var lineStyle = axisLine.lineStyle;
  26164. var strokeColor = lineStyle.color;
  26165. var lineWidth = lineStyle.width;
  26166. var lineType = lineStyle.type;
  26167. for (var i = 0; i < indLen; i++) {
  26168. vector = __ecIndicator[i].vector;
  26169. line = this._getLine(center[0], center[1], vector[0] + center[0], vector[1] + center[1], strokeColor, lineWidth, lineType);
  26170. this.shapeList.push(line);
  26171. }
  26172. },
  26173. _getLine: function (xStart, yStart, xEnd, yEnd, strokeColor, lineWidth, lineType) {
  26174. return new LineShape({
  26175. zlevel: this.getZlevelBase(),
  26176. z: this.getZBase(),
  26177. style: {
  26178. xStart: xStart,
  26179. yStart: yStart,
  26180. xEnd: xEnd,
  26181. yEnd: yEnd,
  26182. strokeColor: strokeColor,
  26183. lineWidth: lineWidth,
  26184. lineType: lineType
  26185. },
  26186. hoverable: false
  26187. });
  26188. },
  26189. _adjustIndicatorValue: function (index) {
  26190. var item = this.polar[index];
  26191. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  26192. var len = indicator.length;
  26193. var __ecIndicator = item.__ecIndicator;
  26194. var max;
  26195. var min;
  26196. var data = this._getSeriesData(index);
  26197. var boundaryGap = item.boundaryGap;
  26198. var splitNumber = item.splitNumber;
  26199. var scale = item.scale;
  26200. var opts;
  26201. var smartSteps = require('../util/smartSteps');
  26202. for (var i = 0; i < len; i++) {
  26203. if (typeof indicator[i].max == 'number') {
  26204. max = indicator[i].max;
  26205. min = indicator[i].min || 0;
  26206. opts = {
  26207. max: max,
  26208. min: min
  26209. };
  26210. } else {
  26211. var value = this._findValue(data, i, splitNumber, boundaryGap);
  26212. min = value.min;
  26213. max = value.max;
  26214. }
  26215. if (!scale && min >= 0 && max >= 0) {
  26216. min = 0;
  26217. }
  26218. if (!scale && min <= 0 && max <= 0) {
  26219. max = 0;
  26220. }
  26221. var stepOpt = smartSteps(min, max, splitNumber, opts);
  26222. __ecIndicator[i].value = {
  26223. min: stepOpt.min,
  26224. max: stepOpt.max,
  26225. step: stepOpt.step
  26226. };
  26227. }
  26228. },
  26229. _getSeriesData: function (index) {
  26230. var data = [];
  26231. var serie;
  26232. var serieData;
  26233. var legend = this.component.legend;
  26234. var polarIndex;
  26235. for (var i = 0; i < this.series.length; i++) {
  26236. serie = this.series[i];
  26237. if (serie.type != ecConfig.CHART_TYPE_RADAR) {
  26238. continue;
  26239. }
  26240. serieData = serie.data || [];
  26241. for (var j = 0; j < serieData.length; j++) {
  26242. polarIndex = this.deepQuery([
  26243. serieData[j],
  26244. serie,
  26245. this.option
  26246. ], 'polarIndex') || 0;
  26247. if (polarIndex == index && (!legend || legend.isSelected(serieData[j].name))) {
  26248. data.push(serieData[j]);
  26249. }
  26250. }
  26251. }
  26252. return data;
  26253. },
  26254. _findValue: function (data, index, splitNumber, boundaryGap) {
  26255. var max;
  26256. var min;
  26257. var one;
  26258. if (!data || data.length === 0) {
  26259. return;
  26260. }
  26261. function _compare(item) {
  26262. (item > max || max === undefined) && (max = item);
  26263. (item < min || min === undefined) && (min = item);
  26264. }
  26265. if (data.length == 1) {
  26266. min = 0;
  26267. }
  26268. if (data.length != 1) {
  26269. for (var i = 0; i < data.length; i++) {
  26270. _compare(this.getDataFromOption(data[i].value[index]));
  26271. }
  26272. } else {
  26273. one = data[0];
  26274. for (var i = 0; i < one.value.length; i++) {
  26275. _compare(this.getDataFromOption(one.value[i]));
  26276. }
  26277. }
  26278. var gap = Math.abs(max - min);
  26279. min = min - Math.abs(gap * boundaryGap[0]);
  26280. max = max + Math.abs(gap * boundaryGap[1]);
  26281. if (min === max) {
  26282. if (max === 0) {
  26283. max = 1;
  26284. } else if (max > 0) {
  26285. min = max / splitNumber;
  26286. } else {
  26287. max = max / splitNumber;
  26288. }
  26289. }
  26290. return {
  26291. max: max,
  26292. min: min
  26293. };
  26294. },
  26295. getVector: function (polarIndex, indicatorIndex, value) {
  26296. polarIndex = polarIndex || 0;
  26297. indicatorIndex = indicatorIndex || 0;
  26298. var __ecIndicator = this.polar[polarIndex].__ecIndicator;
  26299. if (indicatorIndex >= __ecIndicator.length) {
  26300. return;
  26301. }
  26302. var indicator = this.polar[polarIndex].__ecIndicator[indicatorIndex];
  26303. var center = this.getCenter(polarIndex);
  26304. var vector = indicator.vector;
  26305. var max = indicator.value.max;
  26306. var min = indicator.value.min;
  26307. var alpha;
  26308. if (typeof value == 'undefined') {
  26309. return center;
  26310. }
  26311. switch (value) {
  26312. case 'min':
  26313. value = min;
  26314. break;
  26315. case 'max':
  26316. value = max;
  26317. break;
  26318. case 'center':
  26319. value = (max + min) / 2;
  26320. break;
  26321. }
  26322. if (max != min) {
  26323. alpha = (value - min) / (max - min);
  26324. } else {
  26325. alpha = 0.5;
  26326. }
  26327. return this._mapVector(vector, center, alpha);
  26328. },
  26329. isInside: function (vector) {
  26330. var polar = this.getNearestIndex(vector);
  26331. if (polar) {
  26332. return polar.polarIndex;
  26333. }
  26334. return -1;
  26335. },
  26336. getNearestIndex: function (vector) {
  26337. var item;
  26338. var center;
  26339. var radius;
  26340. var polarVector;
  26341. var startAngle;
  26342. var indicator;
  26343. var len;
  26344. var angle;
  26345. var finalAngle;
  26346. for (var i = 0; i < this.polar.length; i++) {
  26347. item = this.polar[i];
  26348. center = this.getCenter(i);
  26349. if (vector[0] == center[0] && vector[1] == center[1]) {
  26350. return {
  26351. polarIndex: i,
  26352. valueIndex: 0
  26353. };
  26354. }
  26355. radius = this._getRadius();
  26356. startAngle = item.startAngle;
  26357. indicator = item.indicator;
  26358. len = indicator.length;
  26359. angle = 2 * Math.PI / len;
  26360. polarVector = ecCoordinates.cartesian2polar(vector[0] - center[0], center[1] - vector[1]);
  26361. if (vector[0] - center[0] < 0) {
  26362. polarVector[1] += Math.PI;
  26363. }
  26364. if (polarVector[1] < 0) {
  26365. polarVector[1] += 2 * Math.PI;
  26366. }
  26367. finalAngle = polarVector[1] - startAngle / 180 * Math.PI + Math.PI * 2;
  26368. if (Math.abs(Math.cos(finalAngle % (angle / 2))) * radius > polarVector[0]) {
  26369. return {
  26370. polarIndex: i,
  26371. valueIndex: Math.floor((finalAngle + angle / 2) / angle) % len
  26372. };
  26373. }
  26374. }
  26375. },
  26376. getIndicator: function (index) {
  26377. var index = index || 0;
  26378. return this.polar[index].indicator;
  26379. },
  26380. refresh: function (newOption) {
  26381. if (newOption) {
  26382. this.option = newOption;
  26383. this.polar = this.option.polar;
  26384. this.series = this.option.series;
  26385. }
  26386. this.clear();
  26387. this._buildShape();
  26388. }
  26389. };
  26390. zrUtil.inherits(Polar, Base);
  26391. require('../component').define('polar', Polar);
  26392. return Polar;
  26393. });define('echarts/util/coordinates', [
  26394. 'require',
  26395. 'zrender/tool/math'
  26396. ], function (require) {
  26397. var zrMath = require('zrender/tool/math');
  26398. function polar2cartesian(r, theta) {
  26399. return [
  26400. r * zrMath.sin(theta),
  26401. r * zrMath.cos(theta)
  26402. ];
  26403. }
  26404. function cartesian2polar(x, y) {
  26405. return [
  26406. Math.sqrt(x * x + y * y),
  26407. Math.atan(y / x)
  26408. ];
  26409. }
  26410. return {
  26411. polar2cartesian: polar2cartesian,
  26412. cartesian2polar: cartesian2polar
  26413. };
  26414. });define('echarts/chart/chord', [
  26415. 'require',
  26416. './base',
  26417. 'zrender/shape/Text',
  26418. 'zrender/shape/Line',
  26419. 'zrender/shape/Sector',
  26420. '../util/shape/Ribbon',
  26421. '../util/shape/Icon',
  26422. 'zrender/shape/BezierCurve',
  26423. '../config',
  26424. '../util/ecData',
  26425. 'zrender/tool/util',
  26426. 'zrender/tool/vector',
  26427. '../data/Graph',
  26428. '../layout/Chord',
  26429. '../chart'
  26430. ], function (require) {
  26431. 'use strict';
  26432. var ChartBase = require('./base');
  26433. var TextShape = require('zrender/shape/Text');
  26434. var LineShape = require('zrender/shape/Line');
  26435. var SectorShape = require('zrender/shape/Sector');
  26436. var RibbonShape = require('../util/shape/Ribbon');
  26437. var IconShape = require('../util/shape/Icon');
  26438. var BezierCurveShape = require('zrender/shape/BezierCurve');
  26439. var ecConfig = require('../config');
  26440. ecConfig.chord = {
  26441. zlevel: 0,
  26442. z: 2,
  26443. clickable: true,
  26444. radius: [
  26445. '65%',
  26446. '75%'
  26447. ],
  26448. center: [
  26449. '50%',
  26450. '50%'
  26451. ],
  26452. padding: 2,
  26453. sort: 'none',
  26454. sortSub: 'none',
  26455. startAngle: 90,
  26456. clockWise: true,
  26457. ribbonType: true,
  26458. minRadius: 10,
  26459. maxRadius: 20,
  26460. symbol: 'circle',
  26461. showScale: false,
  26462. showScaleText: false,
  26463. itemStyle: {
  26464. normal: {
  26465. borderWidth: 0,
  26466. borderColor: '#000',
  26467. label: {
  26468. show: true,
  26469. rotate: false,
  26470. distance: 5
  26471. },
  26472. chordStyle: {
  26473. width: 1,
  26474. color: 'black',
  26475. borderWidth: 1,
  26476. borderColor: '#999',
  26477. opacity: 0.5
  26478. }
  26479. },
  26480. emphasis: {
  26481. borderWidth: 0,
  26482. borderColor: '#000',
  26483. chordStyle: {
  26484. width: 1,
  26485. color: 'black',
  26486. borderWidth: 1,
  26487. borderColor: '#999'
  26488. }
  26489. }
  26490. }
  26491. };
  26492. var ecData = require('../util/ecData');
  26493. var zrUtil = require('zrender/tool/util');
  26494. var vec2 = require('zrender/tool/vector');
  26495. var Graph = require('../data/Graph');
  26496. var ChordLayout = require('../layout/Chord');
  26497. function Chord(ecTheme, messageCenter, zr, option, myChart) {
  26498. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  26499. this.scaleLineLength = 4;
  26500. this.scaleUnitAngle = 4;
  26501. this.refresh(option);
  26502. }
  26503. Chord.prototype = {
  26504. type: ecConfig.CHART_TYPE_CHORD,
  26505. _init: function () {
  26506. var series = this.series;
  26507. this.selectedMap = {};
  26508. var chordSeriesMap = {};
  26509. var chordSeriesGroups = {};
  26510. for (var i = 0, l = series.length; i < l; i++) {
  26511. if (series[i].type === this.type) {
  26512. var _isSelected = this.isSelected(series[i].name);
  26513. this.selectedMap[series[i].name] = _isSelected;
  26514. if (_isSelected) {
  26515. this.buildMark(i);
  26516. }
  26517. this.reformOption(series[i]);
  26518. chordSeriesMap[series[i].name] = series[i];
  26519. }
  26520. }
  26521. for (var i = 0, l = series.length; i < l; i++) {
  26522. if (series[i].type === this.type) {
  26523. if (series[i].insertToSerie) {
  26524. var referenceSerie = chordSeriesMap[series[i].insertToSerie];
  26525. series[i]._referenceSerie = referenceSerie;
  26526. } else {
  26527. chordSeriesGroups[series[i].name] = [series[i]];
  26528. }
  26529. }
  26530. }
  26531. for (var i = 0, l = series.length; i < l; i++) {
  26532. if (series[i].type === this.type) {
  26533. if (series[i].insertToSerie) {
  26534. var mainSerie = series[i]._referenceSerie;
  26535. while (mainSerie && mainSerie._referenceSerie) {
  26536. mainSerie = mainSerie._referenceSerie;
  26537. }
  26538. if (chordSeriesGroups[mainSerie.name] && this.selectedMap[series[i].name]) {
  26539. chordSeriesGroups[mainSerie.name].push(series[i]);
  26540. }
  26541. }
  26542. }
  26543. }
  26544. for (var name in chordSeriesGroups) {
  26545. this._buildChords(chordSeriesGroups[name]);
  26546. }
  26547. this.addShapeList();
  26548. },
  26549. _getNodeCategory: function (serie, group) {
  26550. return serie.categories && serie.categories[group.category || 0];
  26551. },
  26552. _getNodeQueryTarget: function (serie, group) {
  26553. var category = this._getNodeCategory(serie, group);
  26554. return [
  26555. group,
  26556. category,
  26557. serie
  26558. ];
  26559. },
  26560. _getEdgeQueryTarget: function (serie, edge, type) {
  26561. type = type || 'normal';
  26562. return [
  26563. edge.itemStyle && edge.itemStyle[type],
  26564. serie.itemStyle[type].chordStyle
  26565. ];
  26566. },
  26567. _buildChords: function (series) {
  26568. var graphs = [];
  26569. var mainSerie = series[0];
  26570. var nodeFilter = function (n) {
  26571. return n.layout.size > 0;
  26572. };
  26573. var createEdgeFilter = function (graph) {
  26574. return function (e) {
  26575. return graph.getEdge(e.node2, e.node1);
  26576. };
  26577. };
  26578. for (var i = 0; i < series.length; i++) {
  26579. var serie = series[i];
  26580. if (this.selectedMap[serie.name]) {
  26581. var graph;
  26582. if (serie.data && serie.matrix) {
  26583. graph = this._getSerieGraphFromDataMatrix(serie, mainSerie);
  26584. } else if (serie.nodes && serie.links) {
  26585. graph = this._getSerieGraphFromNodeLinks(serie, mainSerie);
  26586. }
  26587. graph.filterNode(nodeFilter, this);
  26588. if (serie.ribbonType) {
  26589. graph.filterEdge(createEdgeFilter(graph));
  26590. }
  26591. graphs.push(graph);
  26592. graph.__serie = serie;
  26593. }
  26594. }
  26595. if (!graphs.length) {
  26596. return;
  26597. }
  26598. var mainGraph = graphs[0];
  26599. if (!mainSerie.ribbonType) {
  26600. var minRadius = mainSerie.minRadius;
  26601. var maxRadius = mainSerie.maxRadius;
  26602. var min = Infinity, max = -Infinity;
  26603. mainGraph.eachNode(function (node) {
  26604. max = Math.max(node.layout.size, max);
  26605. min = Math.min(node.layout.size, min);
  26606. });
  26607. var multiplier = (maxRadius - minRadius) / (max - min);
  26608. mainGraph.eachNode(function (node) {
  26609. var queryTarget = this._getNodeQueryTarget(mainSerie, node);
  26610. var symbolSize = this.query(queryTarget, 'symbolSize');
  26611. if (max === min) {
  26612. node.layout.size = symbolSize || min;
  26613. } else {
  26614. node.layout.size = symbolSize || (node.layout.size - min) * multiplier + minRadius;
  26615. }
  26616. }, this);
  26617. }
  26618. var layout = new ChordLayout();
  26619. layout.clockWise = mainSerie.clockWise;
  26620. layout.startAngle = mainSerie.startAngle * Math.PI / 180;
  26621. if (!layout.clockWise) {
  26622. layout.startAngle = -layout.startAngle;
  26623. }
  26624. layout.padding = mainSerie.padding * Math.PI / 180;
  26625. layout.sort = mainSerie.sort;
  26626. layout.sortSub = mainSerie.sortSub;
  26627. layout.directed = mainSerie.ribbonType;
  26628. layout.run(graphs);
  26629. var showLabel = this.query(mainSerie, 'itemStyle.normal.label.show');
  26630. if (mainSerie.ribbonType) {
  26631. this._buildSectors(mainSerie, 0, mainGraph, mainSerie, graphs);
  26632. if (showLabel) {
  26633. this._buildLabels(mainSerie, 0, mainGraph, mainSerie, graphs);
  26634. }
  26635. for (var i = 0, j = 0; i < series.length; i++) {
  26636. if (this.selectedMap[series[i].name]) {
  26637. this._buildRibbons(series, i, graphs[j++], mainSerie);
  26638. }
  26639. }
  26640. if (mainSerie.showScale) {
  26641. this._buildScales(mainSerie, 0, mainGraph);
  26642. }
  26643. } else {
  26644. this._buildNodeIcons(mainSerie, 0, mainGraph, mainSerie, graphs);
  26645. if (showLabel) {
  26646. this._buildLabels(mainSerie, 0, mainGraph, mainSerie, graphs);
  26647. }
  26648. for (var i = 0, j = 0; i < series.length; i++) {
  26649. if (this.selectedMap[series[i].name]) {
  26650. this._buildEdgeCurves(series, i, graphs[j++], mainSerie, mainGraph);
  26651. }
  26652. }
  26653. }
  26654. this._initHoverHandler(series, graphs);
  26655. },
  26656. _getSerieGraphFromDataMatrix: function (serie, mainSerie) {
  26657. var nodesData = [];
  26658. var count = 0;
  26659. var matrix = [];
  26660. for (var i = 0; i < serie.matrix.length; i++) {
  26661. matrix[i] = serie.matrix[i].slice();
  26662. }
  26663. var data = serie.data || serie.nodes;
  26664. for (var i = 0; i < data.length; i++) {
  26665. var node = {};
  26666. var group = data[i];
  26667. group.rawIndex = i;
  26668. for (var key in group) {
  26669. if (key === 'name') {
  26670. node['id'] = group['name'];
  26671. } else {
  26672. node[key] = group[key];
  26673. }
  26674. }
  26675. var category = this._getNodeCategory(mainSerie, group);
  26676. var name = category ? category.name : group.name;
  26677. this.selectedMap[name] = this.isSelected(name);
  26678. if (this.selectedMap[name]) {
  26679. nodesData.push(node);
  26680. count++;
  26681. } else {
  26682. matrix.splice(count, 1);
  26683. for (var j = 0; j < matrix.length; j++) {
  26684. matrix[j].splice(count, 1);
  26685. }
  26686. }
  26687. }
  26688. var graph = Graph.fromMatrix(nodesData, matrix, true);
  26689. graph.eachNode(function (n, idx) {
  26690. n.layout = { size: n.data.outValue };
  26691. n.rawIndex = n.data.rawIndex;
  26692. });
  26693. graph.eachEdge(function (e) {
  26694. e.layout = { weight: e.data.weight };
  26695. });
  26696. return graph;
  26697. },
  26698. _getSerieGraphFromNodeLinks: function (serie, mainSerie) {
  26699. var graph = new Graph(true);
  26700. var nodes = serie.data || serie.nodes;
  26701. for (var i = 0, len = nodes.length; i < len; i++) {
  26702. var n = nodes[i];
  26703. if (!n || n.ignore) {
  26704. continue;
  26705. }
  26706. var category = this._getNodeCategory(mainSerie, n);
  26707. var name = category ? category.name : n.name;
  26708. this.selectedMap[name] = this.isSelected(name);
  26709. if (this.selectedMap[name]) {
  26710. var node = graph.addNode(n.name, n);
  26711. node.rawIndex = i;
  26712. }
  26713. }
  26714. for (var i = 0, len = serie.links.length; i < len; i++) {
  26715. var e = serie.links[i];
  26716. var n1 = e.source;
  26717. var n2 = e.target;
  26718. if (typeof n1 === 'number') {
  26719. n1 = nodes[n1];
  26720. if (n1) {
  26721. n1 = n1.name;
  26722. }
  26723. }
  26724. if (typeof n2 === 'number') {
  26725. n2 = nodes[n2];
  26726. if (n2) {
  26727. n2 = n2.name;
  26728. }
  26729. }
  26730. var edge = graph.addEdge(n1, n2, e);
  26731. if (edge) {
  26732. edge.rawIndex = i;
  26733. }
  26734. }
  26735. graph.eachNode(function (n) {
  26736. var value = n.data.value;
  26737. if (value == null) {
  26738. value = 0;
  26739. if (mainSerie.ribbonType) {
  26740. for (var i = 0; i < n.outEdges.length; i++) {
  26741. value += n.outEdges[i].data.weight || 0;
  26742. }
  26743. } else {
  26744. for (var i = 0; i < n.edges.length; i++) {
  26745. value += n.edges[i].data.weight || 0;
  26746. }
  26747. }
  26748. }
  26749. n.layout = { size: value };
  26750. });
  26751. graph.eachEdge(function (e) {
  26752. e.layout = { weight: e.data.weight == null ? 1 : e.data.weight };
  26753. });
  26754. return graph;
  26755. },
  26756. _initHoverHandler: function (series, graphs) {
  26757. var mainSerie = series[0];
  26758. var mainGraph = graphs[0];
  26759. var self = this;
  26760. mainGraph.eachNode(function (node) {
  26761. node.shape.onmouseover = function () {
  26762. mainGraph.eachNode(function (n) {
  26763. n.shape.style.opacity = 0.1;
  26764. if (n.labelShape) {
  26765. n.labelShape.style.opacity = 0.1;
  26766. n.labelShape.modSelf();
  26767. }
  26768. n.shape.modSelf();
  26769. });
  26770. for (var i = 0; i < graphs.length; i++) {
  26771. for (var j = 0; j < graphs[i].edges.length; j++) {
  26772. var e = graphs[i].edges[j];
  26773. var queryTarget = self._getEdgeQueryTarget(graphs[i].__serie, e.data);
  26774. e.shape.style.opacity = self.deepQuery(queryTarget, 'opacity') * 0.1;
  26775. e.shape.modSelf();
  26776. }
  26777. }
  26778. node.shape.style.opacity = 1;
  26779. if (node.labelShape) {
  26780. node.labelShape.style.opacity = 1;
  26781. }
  26782. for (var i = 0; i < graphs.length; i++) {
  26783. var n = graphs[i].getNodeById(node.id);
  26784. if (n) {
  26785. for (var j = 0; j < n.outEdges.length; j++) {
  26786. var e = n.outEdges[j];
  26787. var queryTarget = self._getEdgeQueryTarget(graphs[i].__serie, e.data);
  26788. e.shape.style.opacity = self.deepQuery(queryTarget, 'opacity');
  26789. var other = graphs[0].getNodeById(e.node2.id);
  26790. if (other) {
  26791. if (other.shape) {
  26792. other.shape.style.opacity = 1;
  26793. }
  26794. if (other.labelShape) {
  26795. other.labelShape.style.opacity = 1;
  26796. }
  26797. }
  26798. }
  26799. }
  26800. }
  26801. self.zr.refreshNextFrame();
  26802. };
  26803. node.shape.onmouseout = function () {
  26804. mainGraph.eachNode(function (n) {
  26805. n.shape.style.opacity = 1;
  26806. if (n.labelShape) {
  26807. n.labelShape.style.opacity = 1;
  26808. n.labelShape.modSelf();
  26809. }
  26810. n.shape.modSelf();
  26811. });
  26812. for (var i = 0; i < graphs.length; i++) {
  26813. for (var j = 0; j < graphs[i].edges.length; j++) {
  26814. var e = graphs[i].edges[j];
  26815. var queryTarget = [
  26816. e.data,
  26817. mainSerie
  26818. ];
  26819. e.shape.style.opacity = self.deepQuery(queryTarget, 'itemStyle.normal.chordStyle.opacity');
  26820. e.shape.modSelf();
  26821. }
  26822. }
  26823. self.zr.refreshNextFrame();
  26824. };
  26825. });
  26826. },
  26827. _buildSectors: function (serie, serieIdx, graph, mainSerie) {
  26828. var center = this.parseCenter(this.zr, mainSerie.center);
  26829. var radius = this.parseRadius(this.zr, mainSerie.radius);
  26830. var clockWise = mainSerie.clockWise;
  26831. var sign = clockWise ? 1 : -1;
  26832. graph.eachNode(function (node) {
  26833. var category = this._getNodeCategory(mainSerie, node.data);
  26834. var color = category ? this.getColor(category.name) : this.getColor(node.id);
  26835. var startAngle = node.layout.startAngle / Math.PI * 180 * sign;
  26836. var endAngle = node.layout.endAngle / Math.PI * 180 * sign;
  26837. var sector = new SectorShape({
  26838. zlevel: this.getZlevelBase(),
  26839. z: this.getZBase(),
  26840. style: {
  26841. x: center[0],
  26842. y: center[1],
  26843. r0: radius[0],
  26844. r: radius[1],
  26845. startAngle: startAngle,
  26846. endAngle: endAngle,
  26847. brushType: 'fill',
  26848. opacity: 1,
  26849. color: color,
  26850. clockWise: clockWise
  26851. },
  26852. clickable: mainSerie.clickable,
  26853. highlightStyle: { brushType: 'fill' }
  26854. });
  26855. sector.style.lineWidth = this.deepQuery([
  26856. node.data,
  26857. mainSerie
  26858. ], 'itemStyle.normal.borderWidth');
  26859. sector.highlightStyle.lineWidth = this.deepQuery([
  26860. node.data,
  26861. mainSerie
  26862. ], 'itemStyle.emphasis.borderWidth');
  26863. sector.style.strokeColor = this.deepQuery([
  26864. node.data,
  26865. mainSerie
  26866. ], 'itemStyle.normal.borderColor');
  26867. sector.highlightStyle.strokeColor = this.deepQuery([
  26868. node.data,
  26869. mainSerie
  26870. ], 'itemStyle.emphasis.borderColor');
  26871. if (sector.style.lineWidth > 0) {
  26872. sector.style.brushType = 'both';
  26873. }
  26874. if (sector.highlightStyle.lineWidth > 0) {
  26875. sector.highlightStyle.brushType = 'both';
  26876. }
  26877. ecData.pack(sector, serie, serieIdx, node.data, node.rawIndex, node.id, node.category);
  26878. this.shapeList.push(sector);
  26879. node.shape = sector;
  26880. }, this);
  26881. },
  26882. _buildNodeIcons: function (serie, serieIdx, graph, mainSerie) {
  26883. var center = this.parseCenter(this.zr, mainSerie.center);
  26884. var radius = this.parseRadius(this.zr, mainSerie.radius);
  26885. var r = radius[1];
  26886. graph.eachNode(function (node) {
  26887. var startAngle = node.layout.startAngle;
  26888. var endAngle = node.layout.endAngle;
  26889. var angle = (startAngle + endAngle) / 2;
  26890. var x = r * Math.cos(angle);
  26891. var y = r * Math.sin(angle);
  26892. var queryTarget = this._getNodeQueryTarget(mainSerie, node.data);
  26893. var category = this._getNodeCategory(mainSerie, node.data);
  26894. var color = this.deepQuery(queryTarget, 'itemStyle.normal.color');
  26895. if (!color) {
  26896. color = category ? this.getColor(category.name) : this.getColor(node.id);
  26897. }
  26898. var iconShape = new IconShape({
  26899. zlevel: this.getZlevelBase(),
  26900. z: this.getZBase() + 1,
  26901. style: {
  26902. x: -node.layout.size,
  26903. y: -node.layout.size,
  26904. width: node.layout.size * 2,
  26905. height: node.layout.size * 2,
  26906. iconType: this.deepQuery(queryTarget, 'symbol'),
  26907. color: color,
  26908. brushType: 'both',
  26909. lineWidth: this.deepQuery(queryTarget, 'itemStyle.normal.borderWidth'),
  26910. strokeColor: this.deepQuery(queryTarget, 'itemStyle.normal.borderColor')
  26911. },
  26912. highlightStyle: {
  26913. color: this.deepQuery(queryTarget, 'itemStyle.emphasis.color'),
  26914. lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.borderWidth'),
  26915. strokeColor: this.deepQuery(queryTarget, 'itemStyle.emphasis.borderColor')
  26916. },
  26917. clickable: mainSerie.clickable,
  26918. position: [
  26919. x + center[0],
  26920. y + center[1]
  26921. ]
  26922. });
  26923. ecData.pack(iconShape, serie, serieIdx, node.data, node.rawIndex, node.id, node.category);
  26924. this.shapeList.push(iconShape);
  26925. node.shape = iconShape;
  26926. }, this);
  26927. },
  26928. _buildLabels: function (serie, serieIdx, graph, mainSerie) {
  26929. var labelColor = this.query(mainSerie, 'itemStyle.normal.label.color');
  26930. var rotateLabel = this.query(mainSerie, 'itemStyle.normal.label.rotate');
  26931. var labelDistance = this.query(mainSerie, 'itemStyle.normal.label.distance');
  26932. var center = this.parseCenter(this.zr, mainSerie.center);
  26933. var radius = this.parseRadius(this.zr, mainSerie.radius);
  26934. var clockWise = mainSerie.clockWise;
  26935. var sign = clockWise ? 1 : -1;
  26936. graph.eachNode(function (node) {
  26937. var startAngle = node.layout.startAngle / Math.PI * 180 * sign;
  26938. var endAngle = node.layout.endAngle / Math.PI * 180 * sign;
  26939. var angle = (startAngle * -sign + endAngle * -sign) / 2;
  26940. angle %= 360;
  26941. if (angle < 0) {
  26942. angle += 360;
  26943. }
  26944. var isRightSide = angle <= 90 || angle >= 270;
  26945. angle = angle * Math.PI / 180;
  26946. var v = [
  26947. Math.cos(angle),
  26948. -Math.sin(angle)
  26949. ];
  26950. var distance = 0;
  26951. if (mainSerie.ribbonType) {
  26952. distance = mainSerie.showScaleText ? 35 + labelDistance : labelDistance;
  26953. } else {
  26954. distance = labelDistance + node.layout.size;
  26955. }
  26956. var start = vec2.scale([], v, radius[1] + distance);
  26957. vec2.add(start, start, center);
  26958. var labelShape = {
  26959. zlevel: this.getZlevelBase(),
  26960. z: this.getZBase() + 1,
  26961. hoverable: false,
  26962. style: {
  26963. text: node.data.label == null ? node.id : node.data.label,
  26964. textAlign: isRightSide ? 'left' : 'right',
  26965. color: labelColor || '#000000'
  26966. }
  26967. };
  26968. if (rotateLabel) {
  26969. labelShape.rotation = isRightSide ? angle : Math.PI + angle;
  26970. if (isRightSide) {
  26971. labelShape.style.x = radius[1] + distance;
  26972. } else {
  26973. labelShape.style.x = -radius[1] - distance;
  26974. }
  26975. labelShape.style.y = 0;
  26976. labelShape.position = center.slice();
  26977. } else {
  26978. labelShape.style.x = start[0];
  26979. labelShape.style.y = start[1];
  26980. }
  26981. labelShape.style.textColor = this.deepQuery([
  26982. node.data,
  26983. mainSerie
  26984. ], 'itemStyle.normal.label.textStyle.color') || '#fff';
  26985. labelShape.style.textFont = this.getFont(this.deepQuery([
  26986. node.data,
  26987. mainSerie
  26988. ], 'itemStyle.normal.label.textStyle'));
  26989. labelShape = new TextShape(labelShape);
  26990. this.shapeList.push(labelShape);
  26991. node.labelShape = labelShape;
  26992. }, this);
  26993. },
  26994. _buildRibbons: function (series, serieIdx, graph, mainSerie) {
  26995. var serie = series[serieIdx];
  26996. var center = this.parseCenter(this.zr, mainSerie.center);
  26997. var radius = this.parseRadius(this.zr, mainSerie.radius);
  26998. graph.eachEdge(function (edge, idx) {
  26999. var color;
  27000. var other = graph.getEdge(edge.node2, edge.node1);
  27001. if (!other || edge.shape) {
  27002. return;
  27003. }
  27004. if (other.shape) {
  27005. edge.shape = other.shape;
  27006. return;
  27007. }
  27008. var s0 = edge.layout.startAngle / Math.PI * 180;
  27009. var s1 = edge.layout.endAngle / Math.PI * 180;
  27010. var t0 = other.layout.startAngle / Math.PI * 180;
  27011. var t1 = other.layout.endAngle / Math.PI * 180;
  27012. if (series.length === 1) {
  27013. if (edge.layout.weight <= other.layout.weight) {
  27014. color = this.getColor(edge.node1.id);
  27015. } else {
  27016. color = this.getColor(edge.node2.id);
  27017. }
  27018. } else {
  27019. color = this.getColor(serie.name);
  27020. }
  27021. var queryTarget = this._getEdgeQueryTarget(serie, edge.data);
  27022. var queryTargetEmphasis = this._getEdgeQueryTarget(serie, edge.data, 'emphasis');
  27023. var ribbon = new RibbonShape({
  27024. zlevel: this.getZlevelBase(),
  27025. z: this.getZBase(),
  27026. style: {
  27027. x: center[0],
  27028. y: center[1],
  27029. r: radius[0],
  27030. source0: s0,
  27031. source1: s1,
  27032. target0: t0,
  27033. target1: t1,
  27034. brushType: 'both',
  27035. opacity: this.deepQuery(queryTarget, 'opacity'),
  27036. color: color,
  27037. lineWidth: this.deepQuery(queryTarget, 'borderWidth'),
  27038. strokeColor: this.deepQuery(queryTarget, 'borderColor'),
  27039. clockWise: mainSerie.clockWise
  27040. },
  27041. clickable: mainSerie.clickable,
  27042. highlightStyle: {
  27043. brushType: 'both',
  27044. opacity: this.deepQuery(queryTargetEmphasis, 'opacity'),
  27045. lineWidth: this.deepQuery(queryTargetEmphasis, 'borderWidth'),
  27046. strokeColor: this.deepQuery(queryTargetEmphasis, 'borderColor')
  27047. }
  27048. });
  27049. var node1, node2;
  27050. if (edge.layout.weight <= other.layout.weight) {
  27051. node1 = other.node1;
  27052. node2 = other.node2;
  27053. } else {
  27054. node1 = edge.node1;
  27055. node2 = edge.node2;
  27056. }
  27057. ecData.pack(ribbon, serie, serieIdx, edge.data, edge.rawIndex == null ? idx : edge.rawIndex, edge.data.name || node1.id + '-' + node2.id, node1.id, node2.id);
  27058. this.shapeList.push(ribbon);
  27059. edge.shape = ribbon;
  27060. }, this);
  27061. },
  27062. _buildEdgeCurves: function (series, serieIdx, graph, mainSerie, mainGraph) {
  27063. var serie = series[serieIdx];
  27064. var center = this.parseCenter(this.zr, mainSerie.center);
  27065. graph.eachEdge(function (e, idx) {
  27066. var node1 = mainGraph.getNodeById(e.node1.id);
  27067. var node2 = mainGraph.getNodeById(e.node2.id);
  27068. var shape1 = node1.shape;
  27069. var shape2 = node2.shape;
  27070. var queryTarget = this._getEdgeQueryTarget(serie, e.data);
  27071. var queryTargetEmphasis = this._getEdgeQueryTarget(serie, e.data, 'emphasis');
  27072. var curveShape = new BezierCurveShape({
  27073. zlevel: this.getZlevelBase(),
  27074. z: this.getZBase(),
  27075. style: {
  27076. xStart: shape1.position[0],
  27077. yStart: shape1.position[1],
  27078. xEnd: shape2.position[0],
  27079. yEnd: shape2.position[1],
  27080. cpX1: center[0],
  27081. cpY1: center[1],
  27082. lineWidth: this.deepQuery(queryTarget, 'width'),
  27083. strokeColor: this.deepQuery(queryTarget, 'color'),
  27084. opacity: this.deepQuery(queryTarget, 'opacity')
  27085. },
  27086. highlightStyle: {
  27087. lineWidth: this.deepQuery(queryTargetEmphasis, 'width'),
  27088. strokeColor: this.deepQuery(queryTargetEmphasis, 'color'),
  27089. opacity: this.deepQuery(queryTargetEmphasis, 'opacity')
  27090. }
  27091. });
  27092. 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);
  27093. this.shapeList.push(curveShape);
  27094. e.shape = curveShape;
  27095. }, this);
  27096. },
  27097. _buildScales: function (serie, serieIdx, graph) {
  27098. var clockWise = serie.clockWise;
  27099. var center = this.parseCenter(this.zr, serie.center);
  27100. var radius = this.parseRadius(this.zr, serie.radius);
  27101. var sign = clockWise ? 1 : -1;
  27102. var sumValue = 0;
  27103. var maxValue = -Infinity;
  27104. var unitPostfix;
  27105. var unitScale;
  27106. if (serie.showScaleText) {
  27107. graph.eachNode(function (node) {
  27108. var val = node.data.value;
  27109. if (val > maxValue) {
  27110. maxValue = val;
  27111. }
  27112. sumValue += val;
  27113. });
  27114. if (maxValue > 10000000000) {
  27115. unitPostfix = 'b';
  27116. unitScale = 1e-9;
  27117. } else if (maxValue > 10000000) {
  27118. unitPostfix = 'm';
  27119. unitScale = 0.000001;
  27120. } else if (maxValue > 10000) {
  27121. unitPostfix = 'k';
  27122. unitScale = 0.001;
  27123. } else {
  27124. unitPostfix = '';
  27125. unitScale = 1;
  27126. }
  27127. }
  27128. var unitValue = sumValue / (360 - serie.padding);
  27129. graph.eachNode(function (node) {
  27130. var startAngle = node.layout.startAngle / Math.PI * 180;
  27131. var endAngle = node.layout.endAngle / Math.PI * 180;
  27132. var scaleAngle = startAngle;
  27133. while (true) {
  27134. if (clockWise && scaleAngle > endAngle || !clockWise && scaleAngle < endAngle) {
  27135. break;
  27136. }
  27137. var theta = scaleAngle / 180 * Math.PI;
  27138. var v = [
  27139. Math.cos(theta),
  27140. Math.sin(theta)
  27141. ];
  27142. var start = vec2.scale([], v, radius[1] + 1);
  27143. vec2.add(start, start, center);
  27144. var end = vec2.scale([], v, radius[1] + this.scaleLineLength);
  27145. vec2.add(end, end, center);
  27146. var scaleShape = new LineShape({
  27147. zlevel: this.getZlevelBase(),
  27148. z: this.getZBase() - 1,
  27149. hoverable: false,
  27150. style: {
  27151. xStart: start[0],
  27152. yStart: start[1],
  27153. xEnd: end[0],
  27154. yEnd: end[1],
  27155. lineCap: 'round',
  27156. brushType: 'stroke',
  27157. strokeColor: '#666',
  27158. lineWidth: 1
  27159. }
  27160. });
  27161. this.shapeList.push(scaleShape);
  27162. scaleAngle += sign * this.scaleUnitAngle;
  27163. }
  27164. if (!serie.showScaleText) {
  27165. return;
  27166. }
  27167. var scaleTextAngle = startAngle;
  27168. var step = unitValue * 5 * this.scaleUnitAngle;
  27169. var scaleValue = 0;
  27170. while (true) {
  27171. if (clockWise && scaleTextAngle > endAngle || !clockWise && scaleTextAngle < endAngle) {
  27172. break;
  27173. }
  27174. var theta = scaleTextAngle;
  27175. theta = theta % 360;
  27176. if (theta < 0) {
  27177. theta += 360;
  27178. }
  27179. var isRightSide = theta <= 90 || theta >= 270;
  27180. var textShape = new TextShape({
  27181. zlevel: this.getZlevelBase(),
  27182. z: this.getZBase() - 1,
  27183. hoverable: false,
  27184. style: {
  27185. x: isRightSide ? radius[1] + this.scaleLineLength + 4 : -radius[1] - this.scaleLineLength - 4,
  27186. y: 0,
  27187. text: Math.round(scaleValue * 10) / 10 + unitPostfix,
  27188. textAlign: isRightSide ? 'left' : 'right'
  27189. },
  27190. position: center.slice(),
  27191. rotation: isRightSide ? [
  27192. -theta / 180 * Math.PI,
  27193. 0,
  27194. 0
  27195. ] : [
  27196. -(theta + 180) / 180 * Math.PI,
  27197. 0,
  27198. 0
  27199. ]
  27200. });
  27201. this.shapeList.push(textShape);
  27202. scaleValue += step * unitScale;
  27203. scaleTextAngle += sign * this.scaleUnitAngle * 5;
  27204. }
  27205. }, this);
  27206. },
  27207. refresh: function (newOption) {
  27208. if (newOption) {
  27209. this.option = newOption;
  27210. this.series = newOption.series;
  27211. }
  27212. this.legend = this.component.legend;
  27213. if (this.legend) {
  27214. this.getColor = function (param) {
  27215. return this.legend.getColor(param);
  27216. };
  27217. this.isSelected = function (param) {
  27218. return this.legend.isSelected(param);
  27219. };
  27220. } else {
  27221. var colorMap = {};
  27222. var count = 0;
  27223. this.getColor = function (key) {
  27224. if (colorMap[key]) {
  27225. return colorMap[key];
  27226. }
  27227. if (!colorMap[key]) {
  27228. colorMap[key] = this.zr.getColor(count++);
  27229. }
  27230. return colorMap[key];
  27231. };
  27232. this.isSelected = function () {
  27233. return true;
  27234. };
  27235. }
  27236. this.backupShapeList();
  27237. this._init();
  27238. },
  27239. reformOption: function (opt) {
  27240. var _merge = zrUtil.merge;
  27241. opt = _merge(_merge(opt || {}, this.ecTheme.chord), ecConfig.chord);
  27242. opt.itemStyle.normal.label.textStyle = this.getTextStyle(opt.itemStyle.normal.label.textStyle);
  27243. this.z = opt.z;
  27244. this.zlevel = opt.zlevel;
  27245. }
  27246. };
  27247. zrUtil.inherits(Chord, ChartBase);
  27248. require('../chart').define('chord', Chord);
  27249. return Chord;
  27250. });define('echarts/util/shape/Ribbon', [
  27251. 'require',
  27252. 'zrender/shape/Base',
  27253. 'zrender/shape/util/PathProxy',
  27254. 'zrender/tool/util',
  27255. 'zrender/tool/area'
  27256. ], function (require) {
  27257. var Base = require('zrender/shape/Base');
  27258. var PathProxy = require('zrender/shape/util/PathProxy');
  27259. var zrUtil = require('zrender/tool/util');
  27260. var area = require('zrender/tool/area');
  27261. function RibbonShape(options) {
  27262. Base.call(this, options);
  27263. this._pathProxy = new PathProxy();
  27264. }
  27265. RibbonShape.prototype = {
  27266. type: 'ribbon',
  27267. buildPath: function (ctx, style) {
  27268. var clockWise = style.clockWise || false;
  27269. var path = this._pathProxy;
  27270. path.begin(ctx);
  27271. var cx = style.x;
  27272. var cy = style.y;
  27273. var r = style.r;
  27274. var s0 = style.source0 / 180 * Math.PI;
  27275. var s1 = style.source1 / 180 * Math.PI;
  27276. var t0 = style.target0 / 180 * Math.PI;
  27277. var t1 = style.target1 / 180 * Math.PI;
  27278. var sx0 = cx + Math.cos(s0) * r;
  27279. var sy0 = cy + Math.sin(s0) * r;
  27280. var sx1 = cx + Math.cos(s1) * r;
  27281. var sy1 = cy + Math.sin(s1) * r;
  27282. var tx0 = cx + Math.cos(t0) * r;
  27283. var ty0 = cy + Math.sin(t0) * r;
  27284. var tx1 = cx + Math.cos(t1) * r;
  27285. var ty1 = cy + Math.sin(t1) * r;
  27286. path.moveTo(sx0, sy0);
  27287. path.arc(cx, cy, style.r, s0, s1, !clockWise);
  27288. path.bezierCurveTo((cx - sx1) * 0.7 + sx1, (cy - sy1) * 0.7 + sy1, (cx - tx0) * 0.7 + tx0, (cy - ty0) * 0.7 + ty0, tx0, ty0);
  27289. if (style.source0 === style.target0 && style.source1 === style.target1) {
  27290. return;
  27291. }
  27292. path.arc(cx, cy, style.r, t0, t1, !clockWise);
  27293. path.bezierCurveTo((cx - tx1) * 0.7 + tx1, (cy - ty1) * 0.7 + ty1, (cx - sx0) * 0.7 + sx0, (cy - sy0) * 0.7 + sy0, sx0, sy0);
  27294. },
  27295. getRect: function (style) {
  27296. if (style.__rect) {
  27297. return style.__rect;
  27298. }
  27299. if (!this._pathProxy.isEmpty()) {
  27300. this.buildPath(null, style);
  27301. }
  27302. return this._pathProxy.fastBoundingRect();
  27303. },
  27304. isCover: function (x, y) {
  27305. var rect = this.getRect(this.style);
  27306. if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
  27307. return area.isInsidePath(this._pathProxy.pathCommands, 0, 'fill', x, y);
  27308. }
  27309. }
  27310. };
  27311. zrUtil.inherits(RibbonShape, Base);
  27312. return RibbonShape;
  27313. });define('echarts/data/Graph', [
  27314. 'require',
  27315. 'zrender/tool/util'
  27316. ], function (require) {
  27317. var util = require('zrender/tool/util');
  27318. 'use strict';
  27319. var Graph = function (directed) {
  27320. this._directed = directed || false;
  27321. this.nodes = [];
  27322. this.edges = [];
  27323. this._nodesMap = {};
  27324. this._edgesMap = {};
  27325. };
  27326. Graph.prototype.isDirected = function () {
  27327. return this._directed;
  27328. };
  27329. Graph.prototype.addNode = function (id, data) {
  27330. if (this._nodesMap[id]) {
  27331. return this._nodesMap[id];
  27332. }
  27333. var node = new Graph.Node(id, data);
  27334. this.nodes.push(node);
  27335. this._nodesMap[id] = node;
  27336. return node;
  27337. };
  27338. Graph.prototype.getNodeById = function (id) {
  27339. return this._nodesMap[id];
  27340. };
  27341. Graph.prototype.addEdge = function (n1, n2, data) {
  27342. if (typeof n1 == 'string') {
  27343. n1 = this._nodesMap[n1];
  27344. }
  27345. if (typeof n2 == 'string') {
  27346. n2 = this._nodesMap[n2];
  27347. }
  27348. if (!n1 || !n2) {
  27349. return;
  27350. }
  27351. var key = n1.id + '-' + n2.id;
  27352. if (this._edgesMap[key]) {
  27353. return this._edgesMap[key];
  27354. }
  27355. var edge = new Graph.Edge(n1, n2, data);
  27356. if (this._directed) {
  27357. n1.outEdges.push(edge);
  27358. n2.inEdges.push(edge);
  27359. }
  27360. n1.edges.push(edge);
  27361. if (n1 !== n2) {
  27362. n2.edges.push(edge);
  27363. }
  27364. this.edges.push(edge);
  27365. this._edgesMap[key] = edge;
  27366. return edge;
  27367. };
  27368. Graph.prototype.removeEdge = function (edge) {
  27369. var n1 = edge.node1;
  27370. var n2 = edge.node2;
  27371. var key = n1.id + '-' + n2.id;
  27372. if (this._directed) {
  27373. n1.outEdges.splice(util.indexOf(n1.outEdges, edge), 1);
  27374. n2.inEdges.splice(util.indexOf(n2.inEdges, edge), 1);
  27375. }
  27376. n1.edges.splice(util.indexOf(n1.edges, edge), 1);
  27377. if (n1 !== n2) {
  27378. n2.edges.splice(util.indexOf(n2.edges, edge), 1);
  27379. }
  27380. delete this._edgesMap[key];
  27381. this.edges.splice(util.indexOf(this.edges, edge), 1);
  27382. };
  27383. Graph.prototype.getEdge = function (n1, n2) {
  27384. if (typeof n1 !== 'string') {
  27385. n1 = n1.id;
  27386. }
  27387. if (typeof n2 !== 'string') {
  27388. n2 = n2.id;
  27389. }
  27390. if (this._directed) {
  27391. return this._edgesMap[n1 + '-' + n2];
  27392. } else {
  27393. return this._edgesMap[n1 + '-' + n2] || this._edgesMap[n2 + '-' + n1];
  27394. }
  27395. };
  27396. Graph.prototype.removeNode = function (node) {
  27397. if (typeof node === 'string') {
  27398. node = this._nodesMap[node];
  27399. if (!node) {
  27400. return;
  27401. }
  27402. }
  27403. delete this._nodesMap[node.id];
  27404. this.nodes.splice(util.indexOf(this.nodes, node), 1);
  27405. for (var i = 0; i < this.edges.length;) {
  27406. var edge = this.edges[i];
  27407. if (edge.node1 === node || edge.node2 === node) {
  27408. this.removeEdge(edge);
  27409. } else {
  27410. i++;
  27411. }
  27412. }
  27413. };
  27414. Graph.prototype.filterNode = function (cb, context) {
  27415. var len = this.nodes.length;
  27416. for (var i = 0; i < len;) {
  27417. if (cb.call(context, this.nodes[i], i)) {
  27418. i++;
  27419. } else {
  27420. this.removeNode(this.nodes[i]);
  27421. len--;
  27422. }
  27423. }
  27424. };
  27425. Graph.prototype.filterEdge = function (cb, context) {
  27426. var len = this.edges.length;
  27427. for (var i = 0; i < len;) {
  27428. if (cb.call(context, this.edges[i], i)) {
  27429. i++;
  27430. } else {
  27431. this.removeEdge(this.edges[i]);
  27432. len--;
  27433. }
  27434. }
  27435. };
  27436. Graph.prototype.eachNode = function (cb, context) {
  27437. var len = this.nodes.length;
  27438. for (var i = 0; i < len; i++) {
  27439. if (this.nodes[i]) {
  27440. cb.call(context, this.nodes[i], i);
  27441. }
  27442. }
  27443. };
  27444. Graph.prototype.eachEdge = function (cb, context) {
  27445. var len = this.edges.length;
  27446. for (var i = 0; i < len; i++) {
  27447. if (this.edges[i]) {
  27448. cb.call(context, this.edges[i], i);
  27449. }
  27450. }
  27451. };
  27452. Graph.prototype.clear = function () {
  27453. this.nodes.length = 0;
  27454. this.edges.length = 0;
  27455. this._nodesMap = {};
  27456. this._edgesMap = {};
  27457. };
  27458. Graph.prototype.breadthFirstTraverse = function (cb, startNode, direction, context) {
  27459. if (typeof startNode === 'string') {
  27460. startNode = this._nodesMap[startNode];
  27461. }
  27462. if (!startNode) {
  27463. return;
  27464. }
  27465. var edgeType = 'edges';
  27466. if (direction === 'out') {
  27467. edgeType = 'outEdges';
  27468. } else if (direction === 'in') {
  27469. edgeType = 'inEdges';
  27470. }
  27471. for (var i = 0; i < this.nodes.length; i++) {
  27472. this.nodes[i].__visited = false;
  27473. }
  27474. if (cb.call(context, startNode, null)) {
  27475. return;
  27476. }
  27477. var queue = [startNode];
  27478. while (queue.length) {
  27479. var currentNode = queue.shift();
  27480. var edges = currentNode[edgeType];
  27481. for (var i = 0; i < edges.length; i++) {
  27482. var e = edges[i];
  27483. var otherNode = e.node1 === currentNode ? e.node2 : e.node1;
  27484. if (!otherNode.__visited) {
  27485. if (cb.call(otherNode, otherNode, currentNode)) {
  27486. return;
  27487. }
  27488. queue.push(otherNode);
  27489. otherNode.__visited = true;
  27490. }
  27491. }
  27492. }
  27493. };
  27494. Graph.prototype.clone = function () {
  27495. var graph = new Graph(this._directed);
  27496. for (var i = 0; i < this.nodes.length; i++) {
  27497. graph.addNode(this.nodes[i].id, this.nodes[i].data);
  27498. }
  27499. for (var i = 0; i < this.edges.length; i++) {
  27500. var e = this.edges[i];
  27501. graph.addEdge(e.node1.id, e.node2.id, e.data);
  27502. }
  27503. return graph;
  27504. };
  27505. var Node = function (id, data) {
  27506. this.id = id;
  27507. this.data = data || null;
  27508. this.inEdges = [];
  27509. this.outEdges = [];
  27510. this.edges = [];
  27511. };
  27512. Node.prototype.degree = function () {
  27513. return this.edges.length;
  27514. };
  27515. Node.prototype.inDegree = function () {
  27516. return this.inEdges.length;
  27517. };
  27518. Node.prototype.outDegree = function () {
  27519. return this.outEdges.length;
  27520. };
  27521. var Edge = function (node1, node2, data) {
  27522. this.node1 = node1;
  27523. this.node2 = node2;
  27524. this.data = data || null;
  27525. };
  27526. Graph.Node = Node;
  27527. Graph.Edge = Edge;
  27528. Graph.fromMatrix = function (nodesData, matrix, directed) {
  27529. if (!matrix || !matrix.length || matrix[0].length !== matrix.length || nodesData.length !== matrix.length) {
  27530. return;
  27531. }
  27532. var size = matrix.length;
  27533. var graph = new Graph(directed);
  27534. for (var i = 0; i < size; i++) {
  27535. var node = graph.addNode(nodesData[i].id, nodesData[i]);
  27536. node.data.value = 0;
  27537. if (directed) {
  27538. node.data.outValue = node.data.inValue = 0;
  27539. }
  27540. }
  27541. for (var i = 0; i < size; i++) {
  27542. for (var j = 0; j < size; j++) {
  27543. var item = matrix[i][j];
  27544. if (directed) {
  27545. graph.nodes[i].data.outValue += item;
  27546. graph.nodes[j].data.inValue += item;
  27547. }
  27548. graph.nodes[i].data.value += item;
  27549. graph.nodes[j].data.value += item;
  27550. }
  27551. }
  27552. for (var i = 0; i < size; i++) {
  27553. for (var j = i; j < size; j++) {
  27554. var item = matrix[i][j];
  27555. if (item === 0) {
  27556. continue;
  27557. }
  27558. var n1 = graph.nodes[i];
  27559. var n2 = graph.nodes[j];
  27560. var edge = graph.addEdge(n1, n2, {});
  27561. edge.data.weight = item;
  27562. if (i !== j) {
  27563. if (directed && matrix[j][i]) {
  27564. var inEdge = graph.addEdge(n2, n1, {});
  27565. inEdge.data.weight = matrix[j][i];
  27566. }
  27567. }
  27568. }
  27569. }
  27570. return graph;
  27571. };
  27572. return Graph;
  27573. });define('echarts/layout/Chord', ['require'], function (require) {
  27574. var ChordLayout = function (opts) {
  27575. opts = opts || {};
  27576. this.sort = opts.sort || null;
  27577. this.sortSub = opts.sortSub || null;
  27578. this.padding = 0.05;
  27579. this.startAngle = opts.startAngle || 0;
  27580. this.clockWise = opts.clockWise == null ? false : opts.clockWise;
  27581. this.center = opts.center || [
  27582. 0,
  27583. 0
  27584. ];
  27585. this.directed = true;
  27586. };
  27587. ChordLayout.prototype.run = function (graphs) {
  27588. if (!(graphs instanceof Array)) {
  27589. graphs = [graphs];
  27590. }
  27591. var gl = graphs.length;
  27592. if (!gl) {
  27593. return;
  27594. }
  27595. var graph0 = graphs[0];
  27596. var nl = graph0.nodes.length;
  27597. var groups = [];
  27598. var sumSize = 0;
  27599. for (var i = 0; i < nl; i++) {
  27600. var g0node = graph0.nodes[i];
  27601. var group = {
  27602. size: 0,
  27603. subGroups: [],
  27604. node: g0node
  27605. };
  27606. groups.push(group);
  27607. var sumWeight = 0;
  27608. for (var k = 0; k < graphs.length; k++) {
  27609. var graph = graphs[k];
  27610. var node = graph.getNodeById(g0node.id);
  27611. if (!node) {
  27612. continue;
  27613. }
  27614. group.size += node.layout.size;
  27615. var edges = this.directed ? node.outEdges : node.edges;
  27616. for (var j = 0; j < edges.length; j++) {
  27617. var e = edges[j];
  27618. var w = e.layout.weight;
  27619. group.subGroups.push({
  27620. weight: w,
  27621. edge: e,
  27622. graph: graph
  27623. });
  27624. sumWeight += w;
  27625. }
  27626. }
  27627. sumSize += group.size;
  27628. var multiplier = group.size / sumWeight;
  27629. for (var j = 0; j < group.subGroups.length; j++) {
  27630. group.subGroups[j].weight *= multiplier;
  27631. }
  27632. if (this.sortSub === 'ascending') {
  27633. group.subGroups.sort(compareSubGroups);
  27634. } else if (this.sort === 'descending') {
  27635. group.subGroups.sort(compareSubGroups);
  27636. group.subGroups.reverse();
  27637. }
  27638. }
  27639. if (this.sort === 'ascending') {
  27640. groups.sort(compareGroups);
  27641. } else if (this.sort === 'descending') {
  27642. groups.sort(compareGroups);
  27643. groups.reverse();
  27644. }
  27645. var multiplier = (Math.PI * 2 - this.padding * nl) / sumSize;
  27646. var angle = this.startAngle;
  27647. var sign = this.clockWise ? 1 : -1;
  27648. for (var i = 0; i < nl; i++) {
  27649. var group = groups[i];
  27650. group.node.layout.startAngle = angle;
  27651. group.node.layout.endAngle = angle + sign * group.size * multiplier;
  27652. group.node.layout.subGroups = [];
  27653. for (var j = 0; j < group.subGroups.length; j++) {
  27654. var subGroup = group.subGroups[j];
  27655. subGroup.edge.layout.startAngle = angle;
  27656. angle += sign * subGroup.weight * multiplier;
  27657. subGroup.edge.layout.endAngle = angle;
  27658. }
  27659. angle = group.node.layout.endAngle + sign * this.padding;
  27660. }
  27661. };
  27662. var compareSubGroups = function (a, b) {
  27663. return a.weight - b.weight;
  27664. };
  27665. var compareGroups = function (a, b) {
  27666. return a.size - b.size;
  27667. };
  27668. return ChordLayout;
  27669. });define('echarts/chart/force', [
  27670. 'require',
  27671. './base',
  27672. '../data/Graph',
  27673. '../layout/Force',
  27674. 'zrender/shape/Line',
  27675. 'zrender/shape/BezierCurve',
  27676. 'zrender/shape/Image',
  27677. '../util/shape/Icon',
  27678. '../config',
  27679. '../util/ecData',
  27680. 'zrender/tool/util',
  27681. 'zrender/config',
  27682. 'zrender/tool/vector',
  27683. '../chart'
  27684. ], function (require) {
  27685. 'use strict';
  27686. var ChartBase = require('./base');
  27687. var Graph = require('../data/Graph');
  27688. var ForceLayout = require('../layout/Force');
  27689. var LineShape = require('zrender/shape/Line');
  27690. var BezierCurveShape = require('zrender/shape/BezierCurve');
  27691. var ImageShape = require('zrender/shape/Image');
  27692. var IconShape = require('../util/shape/Icon');
  27693. var ecConfig = require('../config');
  27694. ecConfig.force = {
  27695. zlevel: 1,
  27696. z: 2,
  27697. center: [
  27698. '50%',
  27699. '50%'
  27700. ],
  27701. size: '100%',
  27702. preventOverlap: false,
  27703. coolDown: 0.99,
  27704. minRadius: 10,
  27705. maxRadius: 20,
  27706. ratioScaling: false,
  27707. large: false,
  27708. useWorker: false,
  27709. steps: 1,
  27710. scaling: 1,
  27711. gravity: 1,
  27712. symbol: 'circle',
  27713. symbolSize: 0,
  27714. linkSymbol: null,
  27715. linkSymbolSize: [
  27716. 10,
  27717. 15
  27718. ],
  27719. draggable: true,
  27720. clickable: true,
  27721. roam: false,
  27722. itemStyle: {
  27723. normal: {
  27724. label: {
  27725. show: false,
  27726. position: 'inside'
  27727. },
  27728. nodeStyle: {
  27729. brushType: 'both',
  27730. borderColor: '#5182ab',
  27731. borderWidth: 1
  27732. },
  27733. linkStyle: {
  27734. color: '#5182ab',
  27735. width: 1,
  27736. type: 'line'
  27737. }
  27738. },
  27739. emphasis: {
  27740. label: { show: false },
  27741. nodeStyle: {},
  27742. linkStyle: { opacity: 0 }
  27743. }
  27744. }
  27745. };
  27746. var ecData = require('../util/ecData');
  27747. var zrUtil = require('zrender/tool/util');
  27748. var zrConfig = require('zrender/config');
  27749. var vec2 = require('zrender/tool/vector');
  27750. function Force(ecTheme, messageCenter, zr, option, myChart) {
  27751. var self = this;
  27752. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  27753. this.__nodePositionMap = {};
  27754. this._graph = new Graph(true);
  27755. this._layout = new ForceLayout();
  27756. this._layout.onupdate = function () {
  27757. self._step();
  27758. };
  27759. this._steps = 1;
  27760. this.ondragstart = function () {
  27761. ondragstart.apply(self, arguments);
  27762. };
  27763. this.ondragend = function () {
  27764. ondragend.apply(self, arguments);
  27765. };
  27766. this.ondrop = function () {
  27767. };
  27768. this.shapeHandler.ondragstart = function () {
  27769. self.isDragstart = true;
  27770. };
  27771. this.onmousemove = function () {
  27772. onmousemove.apply(self, arguments);
  27773. };
  27774. this.refresh(option);
  27775. }
  27776. Force.prototype = {
  27777. constructor: Force,
  27778. type: ecConfig.CHART_TYPE_FORCE,
  27779. _init: function () {
  27780. var legend = this.component.legend;
  27781. var series = this.series;
  27782. var serieName;
  27783. this.clear();
  27784. for (var i = 0, l = series.length; i < l; i++) {
  27785. var serie = series[i];
  27786. if (serie.type === ecConfig.CHART_TYPE_FORCE) {
  27787. series[i] = this.reformOption(series[i]);
  27788. serieName = series[i].name || '';
  27789. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  27790. if (!this.selectedMap[serieName]) {
  27791. continue;
  27792. }
  27793. this.buildMark(i);
  27794. this._initSerie(serie, i);
  27795. break;
  27796. }
  27797. }
  27798. this.animationEffect();
  27799. },
  27800. _getNodeCategory: function (serie, node) {
  27801. return serie.categories && serie.categories[node.category || 0];
  27802. },
  27803. _getNodeQueryTarget: function (serie, node, type) {
  27804. type = type || 'normal';
  27805. var category = this._getNodeCategory(serie, node) || {};
  27806. return [
  27807. node.itemStyle && node.itemStyle[type],
  27808. category && category.itemStyle && category.itemStyle[type],
  27809. serie.itemStyle[type].nodeStyle
  27810. ];
  27811. },
  27812. _getEdgeQueryTarget: function (serie, edge, type) {
  27813. type = type || 'normal';
  27814. return [
  27815. edge.itemStyle && edge.itemStyle[type],
  27816. serie.itemStyle[type].linkStyle
  27817. ];
  27818. },
  27819. _initSerie: function (serie, serieIdx) {
  27820. this._temperature = 1;
  27821. if (serie.data) {
  27822. this._graph = this._getSerieGraphFromDataMatrix(serie);
  27823. } else {
  27824. this._graph = this._getSerieGraphFromNodeLinks(serie);
  27825. }
  27826. this._buildLinkShapes(serie, serieIdx);
  27827. this._buildNodeShapes(serie, serieIdx);
  27828. var panable = serie.roam === true || serie.roam === 'move';
  27829. var zoomable = serie.roam === true || serie.roam === 'scale';
  27830. this.zr.modLayer(this.getZlevelBase(), {
  27831. panable: panable,
  27832. zoomable: zoomable
  27833. });
  27834. if (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) {
  27835. this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, {
  27836. panable: panable,
  27837. zoomable: zoomable
  27838. });
  27839. }
  27840. this._initLayout(serie);
  27841. this._step();
  27842. },
  27843. _getSerieGraphFromDataMatrix: function (serie) {
  27844. var nodesData = [];
  27845. var count = 0;
  27846. var matrix = [];
  27847. for (var i = 0; i < serie.matrix.length; i++) {
  27848. matrix[i] = serie.matrix[i].slice();
  27849. }
  27850. var data = serie.data || serie.nodes;
  27851. for (var i = 0; i < data.length; i++) {
  27852. var node = {};
  27853. var group = data[i];
  27854. for (var key in group) {
  27855. if (key === 'name') {
  27856. node['id'] = group['name'];
  27857. } else {
  27858. node[key] = group[key];
  27859. }
  27860. }
  27861. var category = this._getNodeCategory(serie, group);
  27862. var name = category ? category.name : group.name;
  27863. this.selectedMap[name] = this.isSelected(name);
  27864. if (this.selectedMap[name]) {
  27865. nodesData.push(node);
  27866. count++;
  27867. } else {
  27868. matrix.splice(count, 1);
  27869. for (var j = 0; j < matrix.length; j++) {
  27870. matrix[j].splice(count, 1);
  27871. }
  27872. }
  27873. }
  27874. var graph = Graph.fromMatrix(nodesData, matrix, true);
  27875. graph.eachNode(function (n, idx) {
  27876. n.layout = {
  27877. size: n.data.value,
  27878. mass: 0
  27879. };
  27880. n.rawIndex = idx;
  27881. });
  27882. graph.eachEdge(function (e) {
  27883. e.layout = { weight: e.data.weight };
  27884. });
  27885. return graph;
  27886. },
  27887. _getSerieGraphFromNodeLinks: function (serie) {
  27888. var graph = new Graph(true);
  27889. var nodes = serie.data || serie.nodes;
  27890. for (var i = 0, len = nodes.length; i < len; i++) {
  27891. var n = nodes[i];
  27892. if (!n || n.ignore) {
  27893. continue;
  27894. }
  27895. var category = this._getNodeCategory(serie, n);
  27896. var name = category ? category.name : n.name;
  27897. this.selectedMap[name] = this.isSelected(name);
  27898. if (this.selectedMap[name]) {
  27899. var node = graph.addNode(n.name, n);
  27900. node.rawIndex = i;
  27901. }
  27902. }
  27903. for (var i = 0, len = serie.links.length; i < len; i++) {
  27904. var e = serie.links[i];
  27905. var n1 = e.source;
  27906. var n2 = e.target;
  27907. if (typeof n1 === 'number') {
  27908. n1 = nodes[n1];
  27909. if (n1) {
  27910. n1 = n1.name;
  27911. }
  27912. }
  27913. if (typeof n2 === 'number') {
  27914. n2 = nodes[n2];
  27915. if (n2) {
  27916. n2 = n2.name;
  27917. }
  27918. }
  27919. var edge = graph.addEdge(n1, n2, e);
  27920. if (edge) {
  27921. edge.rawIndex = i;
  27922. }
  27923. }
  27924. graph.eachNode(function (n) {
  27925. var value = n.data.value;
  27926. if (value == null) {
  27927. value = 0;
  27928. for (var i = 0; i < n.edges.length; i++) {
  27929. value += n.edges[i].data.weight || 0;
  27930. }
  27931. }
  27932. n.layout = {
  27933. size: value,
  27934. mass: 0
  27935. };
  27936. });
  27937. graph.eachEdge(function (e) {
  27938. e.layout = { weight: e.data.weight == null ? 1 : e.data.weight };
  27939. });
  27940. return graph;
  27941. },
  27942. _initLayout: function (serie) {
  27943. var graph = this._graph;
  27944. var len = graph.nodes.length;
  27945. var minRadius = this.query(serie, 'minRadius');
  27946. var maxRadius = this.query(serie, 'maxRadius');
  27947. this._steps = serie.steps || 1;
  27948. this._layout.center = this.parseCenter(this.zr, serie.center);
  27949. this._layout.width = this.parsePercent(serie.size, this.zr.getWidth());
  27950. this._layout.height = this.parsePercent(serie.size, this.zr.getHeight());
  27951. this._layout.large = serie.large;
  27952. this._layout.scaling = serie.scaling;
  27953. this._layout.ratioScaling = serie.ratioScaling;
  27954. this._layout.gravity = serie.gravity;
  27955. this._layout.temperature = 1;
  27956. this._layout.coolDown = serie.coolDown;
  27957. this._layout.preventNodeEdgeOverlap = serie.preventOverlap;
  27958. this._layout.preventNodeOverlap = serie.preventOverlap;
  27959. var min = Infinity;
  27960. var max = -Infinity;
  27961. for (var i = 0; i < len; i++) {
  27962. var gNode = graph.nodes[i];
  27963. max = Math.max(gNode.layout.size, max);
  27964. min = Math.min(gNode.layout.size, min);
  27965. }
  27966. var divider = max - min;
  27967. for (var i = 0; i < len; i++) {
  27968. var gNode = graph.nodes[i];
  27969. if (divider > 0) {
  27970. gNode.layout.size = (gNode.layout.size - min) * (maxRadius - minRadius) / divider + minRadius;
  27971. gNode.layout.mass = gNode.layout.size / maxRadius;
  27972. } else {
  27973. gNode.layout.size = (maxRadius - minRadius) / 2;
  27974. gNode.layout.mass = 0.5;
  27975. }
  27976. }
  27977. for (var i = 0; i < len; i++) {
  27978. var gNode = graph.nodes[i];
  27979. if (typeof this.__nodePositionMap[gNode.id] !== 'undefined') {
  27980. gNode.layout.position = vec2.create();
  27981. vec2.copy(gNode.layout.position, this.__nodePositionMap[gNode.id]);
  27982. } else if (typeof gNode.data.initial !== 'undefined') {
  27983. gNode.layout.position = vec2.create();
  27984. vec2.copy(gNode.layout.position, gNode.data.initial);
  27985. } else {
  27986. var center = this._layout.center;
  27987. var size = Math.min(this._layout.width, this._layout.height);
  27988. gNode.layout.position = _randomInSquare(center[0], center[1], size * 0.8);
  27989. }
  27990. var style = gNode.shape.style;
  27991. var radius = gNode.layout.size;
  27992. style.width = style.width || radius * 2;
  27993. style.height = style.height || radius * 2;
  27994. style.x = -style.width / 2;
  27995. style.y = -style.height / 2;
  27996. vec2.copy(gNode.shape.position, gNode.layout.position);
  27997. }
  27998. len = graph.edges.length;
  27999. max = -Infinity;
  28000. for (var i = 0; i < len; i++) {
  28001. var e = graph.edges[i];
  28002. if (e.layout.weight > max) {
  28003. max = e.layout.weight;
  28004. }
  28005. }
  28006. for (var i = 0; i < len; i++) {
  28007. var e = graph.edges[i];
  28008. e.layout.weight /= max;
  28009. }
  28010. this._layout.init(graph, serie.useWorker);
  28011. },
  28012. _buildNodeShapes: function (serie, serieIdx) {
  28013. var graph = this._graph;
  28014. var categories = this.query(serie, 'categories');
  28015. graph.eachNode(function (node) {
  28016. var category = this._getNodeCategory(serie, node.data);
  28017. var queryTarget = [
  28018. node.data,
  28019. category,
  28020. serie
  28021. ];
  28022. var styleQueryTarget = this._getNodeQueryTarget(serie, node.data);
  28023. var emphasisStyleQueryTarget = this._getNodeQueryTarget(serie, node.data, 'emphasis');
  28024. var shape = new IconShape({
  28025. style: {
  28026. x: 0,
  28027. y: 0,
  28028. color: this.deepQuery(styleQueryTarget, 'color'),
  28029. brushType: 'both',
  28030. strokeColor: this.deepQuery(styleQueryTarget, 'strokeColor') || this.deepQuery(styleQueryTarget, 'borderColor'),
  28031. lineWidth: this.deepQuery(styleQueryTarget, 'lineWidth') || this.deepQuery(styleQueryTarget, 'borderWidth')
  28032. },
  28033. highlightStyle: {
  28034. color: this.deepQuery(emphasisStyleQueryTarget, 'color'),
  28035. strokeColor: this.deepQuery(emphasisStyleQueryTarget, 'strokeColor') || this.deepQuery(emphasisStyleQueryTarget, 'borderColor'),
  28036. lineWidth: this.deepQuery(emphasisStyleQueryTarget, 'lineWidth') || this.deepQuery(emphasisStyleQueryTarget, 'borderWidth')
  28037. },
  28038. clickable: serie.clickable,
  28039. zlevel: this.getZlevelBase(),
  28040. z: this.getZBase()
  28041. });
  28042. if (!shape.style.color) {
  28043. shape.style.color = category ? this.getColor(category.name) : this.getColor(node.id);
  28044. }
  28045. shape.style.iconType = this.deepQuery(queryTarget, 'symbol');
  28046. shape.style.width = shape.style.height = (this.deepQuery(queryTarget, 'symbolSize') || 0) * 2;
  28047. if (shape.style.iconType.match('image')) {
  28048. shape.style.image = shape.style.iconType.replace(new RegExp('^image:\\/\\/'), '');
  28049. shape = new ImageShape({
  28050. style: shape.style,
  28051. highlightStyle: shape.highlightStyle,
  28052. clickable: shape.clickable,
  28053. zlevel: this.getZlevelBase(),
  28054. z: this.getZBase()
  28055. });
  28056. }
  28057. if (this.deepQuery(queryTarget, 'itemStyle.normal.label.show')) {
  28058. shape.style.text = node.data.label == null ? node.id : node.data.label;
  28059. shape.style.textPosition = this.deepQuery(queryTarget, 'itemStyle.normal.label.position');
  28060. shape.style.textColor = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color');
  28061. shape.style.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle') || {});
  28062. }
  28063. if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
  28064. shape.highlightStyle.textPosition = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.position');
  28065. shape.highlightStyle.textColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color');
  28066. shape.highlightStyle.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || {});
  28067. }
  28068. if (this.deepQuery(queryTarget, 'draggable')) {
  28069. this.setCalculable(shape);
  28070. shape.dragEnableTime = 0;
  28071. shape.draggable = true;
  28072. shape.ondragstart = this.shapeHandler.ondragstart;
  28073. shape.ondragover = null;
  28074. }
  28075. var categoryName = '';
  28076. if (typeof node.category !== 'undefined') {
  28077. var category = categories[node.category];
  28078. categoryName = category && category.name || '';
  28079. }
  28080. ecData.pack(shape, serie, serieIdx, node.data, node.rawIndex, node.data.name || '', node.category);
  28081. this.shapeList.push(shape);
  28082. this.zr.addShape(shape);
  28083. node.shape = shape;
  28084. }, this);
  28085. },
  28086. _buildLinkShapes: function (serie, serieIdx) {
  28087. var graph = this._graph;
  28088. var len = graph.edges.length;
  28089. for (var i = 0; i < len; i++) {
  28090. var gEdge = graph.edges[i];
  28091. var link = gEdge.data;
  28092. var source = gEdge.node1;
  28093. var target = gEdge.node2;
  28094. var otherEdge = graph.getEdge(target, source);
  28095. var queryTarget = this._getEdgeQueryTarget(serie, link);
  28096. var linkType = this.deepQuery(queryTarget, 'type');
  28097. if (serie.linkSymbol && serie.linkSymbol !== 'none') {
  28098. linkType = 'line';
  28099. }
  28100. var LinkShapeCtor = linkType === 'line' ? LineShape : BezierCurveShape;
  28101. var linkShape = new LinkShapeCtor({
  28102. style: {
  28103. xStart: 0,
  28104. yStart: 0,
  28105. xEnd: 0,
  28106. yEnd: 0
  28107. },
  28108. clickable: this.query(serie, 'clickable'),
  28109. highlightStyle: {},
  28110. zlevel: this.getZlevelBase(),
  28111. z: this.getZBase()
  28112. });
  28113. if (otherEdge && otherEdge.shape) {
  28114. linkShape.style.offset = 4;
  28115. otherEdge.shape.style.offset = 4;
  28116. }
  28117. zrUtil.merge(linkShape.style, this.query(serie, 'itemStyle.normal.linkStyle'), true);
  28118. zrUtil.merge(linkShape.highlightStyle, this.query(serie, 'itemStyle.emphasis.linkStyle'), true);
  28119. if (typeof link.itemStyle !== 'undefined') {
  28120. if (link.itemStyle.normal) {
  28121. zrUtil.merge(linkShape.style, link.itemStyle.normal, true);
  28122. }
  28123. if (link.itemStyle.emphasis) {
  28124. zrUtil.merge(linkShape.highlightStyle, link.itemStyle.emphasis, true);
  28125. }
  28126. }
  28127. linkShape.style.lineWidth = linkShape.style.lineWidth || linkShape.style.width;
  28128. linkShape.style.strokeColor = linkShape.style.strokeColor || linkShape.style.color;
  28129. linkShape.highlightStyle.lineWidth = linkShape.highlightStyle.lineWidth || linkShape.highlightStyle.width;
  28130. linkShape.highlightStyle.strokeColor = linkShape.highlightStyle.strokeColor || linkShape.highlightStyle.color;
  28131. ecData.pack(linkShape, serie, serieIdx, gEdge.data, gEdge.rawIndex == null ? i : gEdge.rawIndex, gEdge.data.name || source.id + ' - ' + target.id, source.id, target.id);
  28132. this.shapeList.push(linkShape);
  28133. this.zr.addShape(linkShape);
  28134. gEdge.shape = linkShape;
  28135. if (serie.linkSymbol && serie.linkSymbol !== 'none') {
  28136. var symbolShape = new IconShape({
  28137. style: {
  28138. x: -5,
  28139. y: 0,
  28140. width: serie.linkSymbolSize[0],
  28141. height: serie.linkSymbolSize[1],
  28142. iconType: serie.linkSymbol,
  28143. brushType: 'fill',
  28144. color: linkShape.style.strokeColor
  28145. },
  28146. highlightStyle: { brushType: 'fill' },
  28147. position: [
  28148. 0,
  28149. 0
  28150. ],
  28151. rotation: 0
  28152. });
  28153. linkShape._symbolShape = symbolShape;
  28154. this.shapeList.push(symbolShape);
  28155. this.zr.addShape(symbolShape);
  28156. }
  28157. }
  28158. },
  28159. _updateLinkShapes: function () {
  28160. var v = vec2.create();
  28161. var n = vec2.create();
  28162. var p1 = vec2.create();
  28163. var p2 = vec2.create();
  28164. var edges = this._graph.edges;
  28165. for (var i = 0, len = edges.length; i < len; i++) {
  28166. var edge = edges[i];
  28167. var sourceShape = edge.node1.shape;
  28168. var targetShape = edge.node2.shape;
  28169. vec2.copy(p1, sourceShape.position);
  28170. vec2.copy(p2, targetShape.position);
  28171. var edgeShapeStyle = edge.shape.style;
  28172. vec2.sub(v, p1, p2);
  28173. vec2.normalize(v, v);
  28174. if (edgeShapeStyle.offset) {
  28175. n[0] = v[1];
  28176. n[1] = -v[0];
  28177. vec2.scaleAndAdd(p1, p1, n, edgeShapeStyle.offset);
  28178. vec2.scaleAndAdd(p2, p2, n, edgeShapeStyle.offset);
  28179. } else if (edge.shape.type === 'bezier-curve') {
  28180. edgeShapeStyle.cpX1 = (p1[0] + p2[0]) / 2 - (p2[1] - p1[1]) / 4;
  28181. edgeShapeStyle.cpY1 = (p1[1] + p2[1]) / 2 - (p1[0] - p2[0]) / 4;
  28182. }
  28183. edgeShapeStyle.xStart = p1[0];
  28184. edgeShapeStyle.yStart = p1[1];
  28185. edgeShapeStyle.xEnd = p2[0];
  28186. edgeShapeStyle.yEnd = p2[1];
  28187. edge.shape.modSelf();
  28188. if (edge.shape._symbolShape) {
  28189. var symbolShape = edge.shape._symbolShape;
  28190. vec2.copy(symbolShape.position, p2);
  28191. vec2.scaleAndAdd(symbolShape.position, symbolShape.position, v, targetShape.style.width / 2 + 2);
  28192. var angle = Math.atan2(v[1], v[0]);
  28193. symbolShape.rotation = Math.PI / 2 - angle;
  28194. symbolShape.modSelf();
  28195. }
  28196. }
  28197. },
  28198. _syncNodePositions: function () {
  28199. var graph = this._graph;
  28200. for (var i = 0; i < graph.nodes.length; i++) {
  28201. var gNode = graph.nodes[i];
  28202. var position = gNode.layout.position;
  28203. var node = gNode.data;
  28204. var shape = gNode.shape;
  28205. var fixX = shape.fixed || node.fixX;
  28206. var fixY = shape.fixed || node.fixY;
  28207. if (fixX === true) {
  28208. fixX = 1;
  28209. } else if (isNaN(fixX)) {
  28210. fixX = 0;
  28211. }
  28212. if (fixY === true) {
  28213. fixY = 1;
  28214. } else if (isNaN(fixY)) {
  28215. fixY = 0;
  28216. }
  28217. shape.position[0] += (position[0] - shape.position[0]) * (1 - fixX);
  28218. shape.position[1] += (position[1] - shape.position[1]) * (1 - fixY);
  28219. vec2.copy(position, shape.position);
  28220. var nodeName = node.name;
  28221. if (nodeName) {
  28222. var gPos = this.__nodePositionMap[nodeName];
  28223. if (!gPos) {
  28224. gPos = this.__nodePositionMap[nodeName] = vec2.create();
  28225. }
  28226. vec2.copy(gPos, position);
  28227. }
  28228. shape.modSelf();
  28229. }
  28230. },
  28231. _step: function (e) {
  28232. this._syncNodePositions();
  28233. this._updateLinkShapes();
  28234. this.zr.refreshNextFrame();
  28235. if (this._layout.temperature > 0.01) {
  28236. this._layout.step(this._steps);
  28237. } else {
  28238. this.messageCenter.dispatch(ecConfig.EVENT.FORCE_LAYOUT_END, {}, {}, this.myChart);
  28239. }
  28240. },
  28241. refresh: function (newOption) {
  28242. if (newOption) {
  28243. this.option = newOption;
  28244. this.series = this.option.series;
  28245. }
  28246. this.legend = this.component.legend;
  28247. if (this.legend) {
  28248. this.getColor = function (param) {
  28249. return this.legend.getColor(param);
  28250. };
  28251. this.isSelected = function (param) {
  28252. return this.legend.isSelected(param);
  28253. };
  28254. } else {
  28255. var colorMap = {};
  28256. var count = 0;
  28257. this.getColor = function (key) {
  28258. if (colorMap[key]) {
  28259. return colorMap[key];
  28260. }
  28261. if (!colorMap[key]) {
  28262. colorMap[key] = this.zr.getColor(count++);
  28263. }
  28264. return colorMap[key];
  28265. };
  28266. this.isSelected = function () {
  28267. return true;
  28268. };
  28269. }
  28270. this._init();
  28271. },
  28272. dispose: function () {
  28273. this.clear();
  28274. this.shapeList = null;
  28275. this.effectList = null;
  28276. this._layout.dispose();
  28277. this._layout = null;
  28278. this.__nodePositionMap = {};
  28279. },
  28280. getPosition: function () {
  28281. var position = [];
  28282. this._graph.eachNode(function (n) {
  28283. if (n.layout) {
  28284. position.push({
  28285. name: n.data.name,
  28286. position: Array.prototype.slice.call(n.layout.position)
  28287. });
  28288. }
  28289. });
  28290. return position;
  28291. }
  28292. };
  28293. function ondragstart(param) {
  28294. if (!this.isDragstart || !param.target) {
  28295. return;
  28296. }
  28297. var shape = param.target;
  28298. shape.fixed = true;
  28299. this.isDragstart = false;
  28300. this.zr.on(zrConfig.EVENT.MOUSEMOVE, this.onmousemove);
  28301. }
  28302. function onmousemove() {
  28303. this._layout.temperature = 0.8;
  28304. this._step();
  28305. }
  28306. function ondragend(param, status) {
  28307. if (!this.isDragend || !param.target) {
  28308. return;
  28309. }
  28310. var shape = param.target;
  28311. shape.fixed = false;
  28312. status.dragIn = true;
  28313. status.needRefresh = false;
  28314. this.isDragend = false;
  28315. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this.onmousemove);
  28316. }
  28317. function _randomInSquare(x, y, size) {
  28318. var v = vec2.create();
  28319. v[0] = (Math.random() - 0.5) * size + x;
  28320. v[1] = (Math.random() - 0.5) * size + y;
  28321. return v;
  28322. }
  28323. zrUtil.inherits(Force, ChartBase);
  28324. require('../chart').define('force', Force);
  28325. return Force;
  28326. });define('echarts/layout/Force', [
  28327. 'require',
  28328. './forceLayoutWorker',
  28329. 'zrender/tool/vector'
  28330. ], function (require) {
  28331. var ForceLayoutWorker = require('./forceLayoutWorker');
  28332. var vec2 = require('zrender/tool/vector');
  28333. var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (func) {
  28334. setTimeout(func, 16);
  28335. };
  28336. var ArrayCtor = typeof Float32Array == 'undefined' ? Array : Float32Array;
  28337. var workerUrl;
  28338. function createWorkerUrl() {
  28339. if (typeof Worker !== 'undefined' && typeof Blob !== 'undefined') {
  28340. try {
  28341. var blob = new Blob([ForceLayoutWorker.getWorkerCode()]);
  28342. workerUrl = window.URL.createObjectURL(blob);
  28343. } catch (e) {
  28344. workerUrl = '';
  28345. }
  28346. }
  28347. return workerUrl;
  28348. }
  28349. var ForceLayout = function (opts) {
  28350. if (typeof workerUrl === 'undefined') {
  28351. createWorkerUrl();
  28352. }
  28353. opts = opts || {};
  28354. this.width = opts.width || 500;
  28355. this.height = opts.height || 500;
  28356. this.center = opts.center || [
  28357. this.width / 2,
  28358. this.height / 2
  28359. ];
  28360. this.ratioScaling = opts.ratioScaling || false;
  28361. this.scaling = opts.scaling || 1;
  28362. this.gravity = typeof opts.gravity !== 'undefined' ? opts.gravity : 1;
  28363. this.large = opts.large || false;
  28364. this.preventNodeOverlap = opts.preventNodeOverlap || false;
  28365. this.preventNodeEdgeOverlap = opts.preventNodeEdgeOverlap || false;
  28366. this.maxSpeedIncrease = opts.maxSpeedIncrease || 1;
  28367. this.onupdate = opts.onupdate || function () {
  28368. };
  28369. this.temperature = opts.temperature || 1;
  28370. this.coolDown = opts.coolDown || 0.99;
  28371. this._layout = null;
  28372. this._layoutWorker = null;
  28373. var self = this;
  28374. var _$onupdate = this._$onupdate;
  28375. this._$onupdate = function (e) {
  28376. _$onupdate.call(self, e);
  28377. };
  28378. };
  28379. ForceLayout.prototype.updateConfig = function () {
  28380. var width = this.width;
  28381. var height = this.height;
  28382. var size = Math.min(width, height);
  28383. var config = {
  28384. center: this.center,
  28385. width: this.ratioScaling ? width : size,
  28386. height: this.ratioScaling ? height : size,
  28387. scaling: this.scaling || 1,
  28388. gravity: this.gravity || 1,
  28389. barnesHutOptimize: this.large,
  28390. preventNodeOverlap: this.preventNodeOverlap,
  28391. preventNodeEdgeOverlap: this.preventNodeEdgeOverlap,
  28392. maxSpeedIncrease: this.maxSpeedIncrease
  28393. };
  28394. if (this._layoutWorker) {
  28395. this._layoutWorker.postMessage({
  28396. cmd: 'updateConfig',
  28397. config: config
  28398. });
  28399. } else {
  28400. for (var name in config) {
  28401. this._layout[name] = config[name];
  28402. }
  28403. }
  28404. };
  28405. ForceLayout.prototype.init = function (graph, useWorker) {
  28406. if (this._layoutWorker) {
  28407. this._layoutWorker.terminate();
  28408. this._layoutWorker = null;
  28409. }
  28410. if (workerUrl && useWorker) {
  28411. try {
  28412. if (!this._layoutWorker) {
  28413. this._layoutWorker = new Worker(workerUrl);
  28414. this._layoutWorker.onmessage = this._$onupdate;
  28415. }
  28416. this._layout = null;
  28417. } catch (e) {
  28418. this._layoutWorker = null;
  28419. if (!this._layout) {
  28420. this._layout = new ForceLayoutWorker();
  28421. }
  28422. }
  28423. } else {
  28424. if (!this._layout) {
  28425. this._layout = new ForceLayoutWorker();
  28426. }
  28427. }
  28428. this.temperature = 1;
  28429. this.graph = graph;
  28430. var len = graph.nodes.length;
  28431. var positionArr = new ArrayCtor(len * 2);
  28432. var massArr = new ArrayCtor(len);
  28433. var sizeArr = new ArrayCtor(len);
  28434. for (var i = 0; i < len; i++) {
  28435. var n = graph.nodes[i];
  28436. positionArr[i * 2] = n.layout.position[0];
  28437. positionArr[i * 2 + 1] = n.layout.position[1];
  28438. massArr[i] = typeof n.layout.mass === 'undefined' ? 1 : n.layout.mass;
  28439. sizeArr[i] = typeof n.layout.size === 'undefined' ? 1 : n.layout.size;
  28440. n.layout.__index = i;
  28441. }
  28442. len = graph.edges.length;
  28443. var edgeArr = new ArrayCtor(len * 2);
  28444. var edgeWeightArr = new ArrayCtor(len);
  28445. for (var i = 0; i < len; i++) {
  28446. var edge = graph.edges[i];
  28447. edgeArr[i * 2] = edge.node1.layout.__index;
  28448. edgeArr[i * 2 + 1] = edge.node2.layout.__index;
  28449. edgeWeightArr[i] = edge.layout.weight || 1;
  28450. }
  28451. if (this._layoutWorker) {
  28452. this._layoutWorker.postMessage({
  28453. cmd: 'init',
  28454. nodesPosition: positionArr,
  28455. nodesMass: massArr,
  28456. nodesSize: sizeArr,
  28457. edges: edgeArr,
  28458. edgesWeight: edgeWeightArr
  28459. });
  28460. } else {
  28461. this._layout.initNodes(positionArr, massArr, sizeArr);
  28462. this._layout.initEdges(edgeArr, edgeWeightArr);
  28463. }
  28464. this.updateConfig();
  28465. };
  28466. ForceLayout.prototype.step = function (steps) {
  28467. var nodes = this.graph.nodes;
  28468. if (this._layoutWorker) {
  28469. var positionArr = new ArrayCtor(nodes.length * 2);
  28470. for (var i = 0; i < nodes.length; i++) {
  28471. var n = nodes[i];
  28472. positionArr[i * 2] = n.layout.position[0];
  28473. positionArr[i * 2 + 1] = n.layout.position[1];
  28474. }
  28475. this._layoutWorker.postMessage(positionArr.buffer, [positionArr.buffer]);
  28476. this._layoutWorker.postMessage({
  28477. cmd: 'update',
  28478. steps: steps,
  28479. temperature: this.temperature,
  28480. coolDown: this.coolDown
  28481. });
  28482. for (var i = 0; i < steps; i++) {
  28483. this.temperature *= this.coolDown;
  28484. }
  28485. } else {
  28486. requestAnimationFrame(this._$onupdate);
  28487. for (var i = 0; i < nodes.length; i++) {
  28488. var n = nodes[i];
  28489. vec2.copy(this._layout.nodes[i].position, n.layout.position);
  28490. }
  28491. for (var i = 0; i < steps; i++) {
  28492. this._layout.temperature = this.temperature;
  28493. this._layout.update();
  28494. this.temperature *= this.coolDown;
  28495. }
  28496. }
  28497. };
  28498. ForceLayout.prototype._$onupdate = function (e) {
  28499. if (this._layoutWorker) {
  28500. var positionArr = new Float32Array(e.data);
  28501. for (var i = 0; i < this.graph.nodes.length; i++) {
  28502. var n = this.graph.nodes[i];
  28503. n.layout.position[0] = positionArr[i * 2];
  28504. n.layout.position[1] = positionArr[i * 2 + 1];
  28505. }
  28506. this.onupdate && this.onupdate();
  28507. } else if (this._layout) {
  28508. for (var i = 0; i < this.graph.nodes.length; i++) {
  28509. var n = this.graph.nodes[i];
  28510. vec2.copy(n.layout.position, this._layout.nodes[i].position);
  28511. }
  28512. this.onupdate && this.onupdate();
  28513. }
  28514. };
  28515. ForceLayout.prototype.dispose = function () {
  28516. if (this._layoutWorker) {
  28517. this._layoutWorker.terminate();
  28518. }
  28519. this._layoutWorker = null;
  28520. this._layout = null;
  28521. };
  28522. return ForceLayout;
  28523. });define('echarts/layout/forceLayoutWorker', [
  28524. 'require',
  28525. 'zrender/tool/vector'
  28526. ], function __echartsForceLayoutWorker(require) {
  28527. 'use strict';
  28528. var vec2;
  28529. var inWorker = typeof window === 'undefined' && typeof require === 'undefined';
  28530. if (inWorker) {
  28531. vec2 = {
  28532. create: function (x, y) {
  28533. var out = new Float32Array(2);
  28534. out[0] = x || 0;
  28535. out[1] = y || 0;
  28536. return out;
  28537. },
  28538. dist: function (a, b) {
  28539. var x = b[0] - a[0];
  28540. var y = b[1] - a[1];
  28541. return Math.sqrt(x * x + y * y);
  28542. },
  28543. len: function (a) {
  28544. var x = a[0];
  28545. var y = a[1];
  28546. return Math.sqrt(x * x + y * y);
  28547. },
  28548. scaleAndAdd: function (out, a, b, scale) {
  28549. out[0] = a[0] + b[0] * scale;
  28550. out[1] = a[1] + b[1] * scale;
  28551. return out;
  28552. },
  28553. scale: function (out, a, b) {
  28554. out[0] = a[0] * b;
  28555. out[1] = a[1] * b;
  28556. return out;
  28557. },
  28558. add: function (out, a, b) {
  28559. out[0] = a[0] + b[0];
  28560. out[1] = a[1] + b[1];
  28561. return out;
  28562. },
  28563. sub: function (out, a, b) {
  28564. out[0] = a[0] - b[0];
  28565. out[1] = a[1] - b[1];
  28566. return out;
  28567. },
  28568. dot: function (v1, v2) {
  28569. return v1[0] * v2[0] + v1[1] * v2[1];
  28570. },
  28571. normalize: function (out, a) {
  28572. var x = a[0];
  28573. var y = a[1];
  28574. var len = x * x + y * y;
  28575. if (len > 0) {
  28576. len = 1 / Math.sqrt(len);
  28577. out[0] = a[0] * len;
  28578. out[1] = a[1] * len;
  28579. }
  28580. return out;
  28581. },
  28582. negate: function (out, a) {
  28583. out[0] = -a[0];
  28584. out[1] = -a[1];
  28585. return out;
  28586. },
  28587. copy: function (out, a) {
  28588. out[0] = a[0];
  28589. out[1] = a[1];
  28590. return out;
  28591. },
  28592. set: function (out, x, y) {
  28593. out[0] = x;
  28594. out[1] = y;
  28595. return out;
  28596. }
  28597. };
  28598. } else {
  28599. vec2 = require('zrender/tool/vector');
  28600. }
  28601. var ArrayCtor = typeof Float32Array == 'undefined' ? Array : Float32Array;
  28602. function Region() {
  28603. this.subRegions = [];
  28604. this.nSubRegions = 0;
  28605. this.node = null;
  28606. this.mass = 0;
  28607. this.centerOfMass = null;
  28608. this.bbox = new ArrayCtor(4);
  28609. this.size = 0;
  28610. }
  28611. Region.prototype.beforeUpdate = function () {
  28612. for (var i = 0; i < this.nSubRegions; i++) {
  28613. this.subRegions[i].beforeUpdate();
  28614. }
  28615. this.mass = 0;
  28616. if (this.centerOfMass) {
  28617. this.centerOfMass[0] = 0;
  28618. this.centerOfMass[1] = 0;
  28619. }
  28620. this.nSubRegions = 0;
  28621. this.node = null;
  28622. };
  28623. Region.prototype.afterUpdate = function () {
  28624. this.subRegions.length = this.nSubRegions;
  28625. for (var i = 0; i < this.nSubRegions; i++) {
  28626. this.subRegions[i].afterUpdate();
  28627. }
  28628. };
  28629. Region.prototype.addNode = function (node) {
  28630. if (this.nSubRegions === 0) {
  28631. if (this.node == null) {
  28632. this.node = node;
  28633. return;
  28634. } else {
  28635. this._addNodeToSubRegion(this.node);
  28636. this.node = null;
  28637. }
  28638. }
  28639. this._addNodeToSubRegion(node);
  28640. this._updateCenterOfMass(node);
  28641. };
  28642. Region.prototype.findSubRegion = function (x, y) {
  28643. for (var i = 0; i < this.nSubRegions; i++) {
  28644. var region = this.subRegions[i];
  28645. if (region.contain(x, y)) {
  28646. return region;
  28647. }
  28648. }
  28649. };
  28650. Region.prototype.contain = function (x, y) {
  28651. return this.bbox[0] <= x && this.bbox[2] >= x && this.bbox[1] <= y && this.bbox[3] >= y;
  28652. };
  28653. Region.prototype.setBBox = function (minX, minY, maxX, maxY) {
  28654. this.bbox[0] = minX;
  28655. this.bbox[1] = minY;
  28656. this.bbox[2] = maxX;
  28657. this.bbox[3] = maxY;
  28658. this.size = (maxX - minX + maxY - minY) / 2;
  28659. };
  28660. Region.prototype._newSubRegion = function () {
  28661. var subRegion = this.subRegions[this.nSubRegions];
  28662. if (!subRegion) {
  28663. subRegion = new Region();
  28664. this.subRegions[this.nSubRegions] = subRegion;
  28665. }
  28666. this.nSubRegions++;
  28667. return subRegion;
  28668. };
  28669. Region.prototype._addNodeToSubRegion = function (node) {
  28670. var subRegion = this.findSubRegion(node.position[0], node.position[1]);
  28671. var bbox = this.bbox;
  28672. if (!subRegion) {
  28673. var cx = (bbox[0] + bbox[2]) / 2;
  28674. var cy = (bbox[1] + bbox[3]) / 2;
  28675. var w = (bbox[2] - bbox[0]) / 2;
  28676. var h = (bbox[3] - bbox[1]) / 2;
  28677. var xi = node.position[0] >= cx ? 1 : 0;
  28678. var yi = node.position[1] >= cy ? 1 : 0;
  28679. var subRegion = this._newSubRegion();
  28680. subRegion.setBBox(xi * w + bbox[0], yi * h + bbox[1], (xi + 1) * w + bbox[0], (yi + 1) * h + bbox[1]);
  28681. }
  28682. subRegion.addNode(node);
  28683. };
  28684. Region.prototype._updateCenterOfMass = function (node) {
  28685. if (this.centerOfMass == null) {
  28686. this.centerOfMass = vec2.create();
  28687. }
  28688. var x = this.centerOfMass[0] * this.mass;
  28689. var y = this.centerOfMass[1] * this.mass;
  28690. x += node.position[0] * node.mass;
  28691. y += node.position[1] * node.mass;
  28692. this.mass += node.mass;
  28693. this.centerOfMass[0] = x / this.mass;
  28694. this.centerOfMass[1] = y / this.mass;
  28695. };
  28696. function GraphNode() {
  28697. this.position = vec2.create();
  28698. this.force = vec2.create();
  28699. this.forcePrev = vec2.create();
  28700. this.speed = vec2.create();
  28701. this.speedPrev = vec2.create();
  28702. this.mass = 1;
  28703. this.inDegree = 0;
  28704. this.outDegree = 0;
  28705. }
  28706. function GraphEdge(node1, node2) {
  28707. this.node1 = node1;
  28708. this.node2 = node2;
  28709. this.weight = 1;
  28710. }
  28711. function ForceLayout() {
  28712. this.barnesHutOptimize = false;
  28713. this.barnesHutTheta = 1.5;
  28714. this.repulsionByDegree = false;
  28715. this.preventNodeOverlap = false;
  28716. this.preventNodeEdgeOverlap = false;
  28717. this.strongGravity = true;
  28718. this.gravity = 1;
  28719. this.scaling = 1;
  28720. this.edgeWeightInfluence = 1;
  28721. this.center = [
  28722. 0,
  28723. 0
  28724. ];
  28725. this.width = 500;
  28726. this.height = 500;
  28727. this.maxSpeedIncrease = 1;
  28728. this.nodes = [];
  28729. this.edges = [];
  28730. this.bbox = new ArrayCtor(4);
  28731. this._rootRegion = new Region();
  28732. this._rootRegion.centerOfMass = vec2.create();
  28733. this._massArr = null;
  28734. this._k = 0;
  28735. }
  28736. ForceLayout.prototype.nodeToNodeRepulsionFactor = function (mass, d, k) {
  28737. return k * k * mass / d;
  28738. };
  28739. ForceLayout.prototype.edgeToNodeRepulsionFactor = function (mass, d, k) {
  28740. return k * mass / d;
  28741. };
  28742. ForceLayout.prototype.attractionFactor = function (w, d, k) {
  28743. return w * d / k;
  28744. };
  28745. ForceLayout.prototype.initNodes = function (positionArr, massArr, sizeArr) {
  28746. this.temperature = 1;
  28747. var nNodes = positionArr.length / 2;
  28748. this.nodes.length = 0;
  28749. var haveSize = typeof sizeArr !== 'undefined';
  28750. for (var i = 0; i < nNodes; i++) {
  28751. var node = new GraphNode();
  28752. node.position[0] = positionArr[i * 2];
  28753. node.position[1] = positionArr[i * 2 + 1];
  28754. node.mass = massArr[i];
  28755. if (haveSize) {
  28756. node.size = sizeArr[i];
  28757. }
  28758. this.nodes.push(node);
  28759. }
  28760. this._massArr = massArr;
  28761. if (haveSize) {
  28762. this._sizeArr = sizeArr;
  28763. }
  28764. };
  28765. ForceLayout.prototype.initEdges = function (edgeArr, edgeWeightArr) {
  28766. var nEdges = edgeArr.length / 2;
  28767. this.edges.length = 0;
  28768. var edgeHaveWeight = typeof edgeWeightArr !== 'undefined';
  28769. for (var i = 0; i < nEdges; i++) {
  28770. var sIdx = edgeArr[i * 2];
  28771. var tIdx = edgeArr[i * 2 + 1];
  28772. var sNode = this.nodes[sIdx];
  28773. var tNode = this.nodes[tIdx];
  28774. if (!sNode || !tNode) {
  28775. continue;
  28776. }
  28777. sNode.outDegree++;
  28778. tNode.inDegree++;
  28779. var edge = new GraphEdge(sNode, tNode);
  28780. if (edgeHaveWeight) {
  28781. edge.weight = edgeWeightArr[i];
  28782. }
  28783. this.edges.push(edge);
  28784. }
  28785. };
  28786. ForceLayout.prototype.update = function () {
  28787. var nNodes = this.nodes.length;
  28788. this.updateBBox();
  28789. this._k = 0.4 * this.scaling * Math.sqrt(this.width * this.height / nNodes);
  28790. if (this.barnesHutOptimize) {
  28791. this._rootRegion.setBBox(this.bbox[0], this.bbox[1], this.bbox[2], this.bbox[3]);
  28792. this._rootRegion.beforeUpdate();
  28793. for (var i = 0; i < nNodes; i++) {
  28794. this._rootRegion.addNode(this.nodes[i]);
  28795. }
  28796. this._rootRegion.afterUpdate();
  28797. } else {
  28798. var mass = 0;
  28799. var centerOfMass = this._rootRegion.centerOfMass;
  28800. vec2.set(centerOfMass, 0, 0);
  28801. for (var i = 0; i < nNodes; i++) {
  28802. var node = this.nodes[i];
  28803. mass += node.mass;
  28804. vec2.scaleAndAdd(centerOfMass, centerOfMass, node.position, node.mass);
  28805. }
  28806. if (mass > 0) {
  28807. vec2.scale(centerOfMass, centerOfMass, 1 / mass);
  28808. }
  28809. }
  28810. this.updateForce();
  28811. this.updatePosition();
  28812. };
  28813. ForceLayout.prototype.updateForce = function () {
  28814. var nNodes = this.nodes.length;
  28815. for (var i = 0; i < nNodes; i++) {
  28816. var node = this.nodes[i];
  28817. vec2.copy(node.forcePrev, node.force);
  28818. vec2.copy(node.speedPrev, node.speed);
  28819. vec2.set(node.force, 0, 0);
  28820. }
  28821. this.updateNodeNodeForce();
  28822. if (this.gravity > 0) {
  28823. this.updateGravityForce();
  28824. }
  28825. this.updateEdgeForce();
  28826. if (this.preventNodeEdgeOverlap) {
  28827. this.updateNodeEdgeForce();
  28828. }
  28829. };
  28830. ForceLayout.prototype.updatePosition = function () {
  28831. var nNodes = this.nodes.length;
  28832. var v = vec2.create();
  28833. for (var i = 0; i < nNodes; i++) {
  28834. var node = this.nodes[i];
  28835. var speed = node.speed;
  28836. vec2.scale(node.force, node.force, 1 / 30);
  28837. var df = vec2.len(node.force) + 0.1;
  28838. var scale = Math.min(df, 500) / df;
  28839. vec2.scale(node.force, node.force, scale);
  28840. vec2.add(speed, speed, node.force);
  28841. vec2.scale(speed, speed, this.temperature);
  28842. vec2.sub(v, speed, node.speedPrev);
  28843. var swing = vec2.len(v);
  28844. if (swing > 0) {
  28845. vec2.scale(v, v, 1 / swing);
  28846. var base = vec2.len(node.speedPrev);
  28847. if (base > 0) {
  28848. swing = Math.min(swing / base, this.maxSpeedIncrease) * base;
  28849. vec2.scaleAndAdd(speed, node.speedPrev, v, swing);
  28850. }
  28851. }
  28852. var ds = vec2.len(speed);
  28853. var scale = Math.min(ds, 100) / (ds + 0.1);
  28854. vec2.scale(speed, speed, scale);
  28855. vec2.add(node.position, node.position, speed);
  28856. }
  28857. };
  28858. ForceLayout.prototype.updateNodeNodeForce = function () {
  28859. var nNodes = this.nodes.length;
  28860. for (var i = 0; i < nNodes; i++) {
  28861. var na = this.nodes[i];
  28862. if (this.barnesHutOptimize) {
  28863. this.applyRegionToNodeRepulsion(this._rootRegion, na);
  28864. } else {
  28865. for (var j = i + 1; j < nNodes; j++) {
  28866. var nb = this.nodes[j];
  28867. this.applyNodeToNodeRepulsion(na, nb, false);
  28868. }
  28869. }
  28870. }
  28871. };
  28872. ForceLayout.prototype.updateGravityForce = function () {
  28873. for (var i = 0; i < this.nodes.length; i++) {
  28874. this.applyNodeGravity(this.nodes[i]);
  28875. }
  28876. };
  28877. ForceLayout.prototype.updateEdgeForce = function () {
  28878. for (var i = 0; i < this.edges.length; i++) {
  28879. this.applyEdgeAttraction(this.edges[i]);
  28880. }
  28881. };
  28882. ForceLayout.prototype.updateNodeEdgeForce = function () {
  28883. for (var i = 0; i < this.nodes.length; i++) {
  28884. for (var j = 0; j < this.edges.length; j++) {
  28885. this.applyEdgeToNodeRepulsion(this.edges[j], this.nodes[i]);
  28886. }
  28887. }
  28888. };
  28889. ForceLayout.prototype.applyRegionToNodeRepulsion = function () {
  28890. var v = vec2.create();
  28891. return function applyRegionToNodeRepulsion(region, node) {
  28892. if (region.node) {
  28893. this.applyNodeToNodeRepulsion(region.node, node, true);
  28894. } else {
  28895. if (region.mass === 0 && node.mass === 0) {
  28896. return;
  28897. }
  28898. vec2.sub(v, node.position, region.centerOfMass);
  28899. var d2 = v[0] * v[0] + v[1] * v[1];
  28900. if (d2 > this.barnesHutTheta * region.size * region.size) {
  28901. var factor = this._k * this._k * (node.mass + region.mass) / (d2 + 1);
  28902. vec2.scaleAndAdd(node.force, node.force, v, factor * 2);
  28903. } else {
  28904. for (var i = 0; i < region.nSubRegions; i++) {
  28905. this.applyRegionToNodeRepulsion(region.subRegions[i], node);
  28906. }
  28907. }
  28908. }
  28909. };
  28910. }();
  28911. ForceLayout.prototype.applyNodeToNodeRepulsion = function () {
  28912. var v = vec2.create();
  28913. return function applyNodeToNodeRepulsion(na, nb, oneWay) {
  28914. if (na === nb) {
  28915. return;
  28916. }
  28917. if (na.mass === 0 && nb.mass === 0) {
  28918. return;
  28919. }
  28920. vec2.sub(v, na.position, nb.position);
  28921. var d2 = v[0] * v[0] + v[1] * v[1];
  28922. if (d2 === 0) {
  28923. return;
  28924. }
  28925. var factor;
  28926. var mass = na.mass + nb.mass;
  28927. var d = Math.sqrt(d2);
  28928. vec2.scale(v, v, 1 / d);
  28929. if (this.preventNodeOverlap) {
  28930. d = d - na.size - nb.size;
  28931. if (d > 0) {
  28932. factor = this.nodeToNodeRepulsionFactor(mass, d, this._k);
  28933. } else if (d <= 0) {
  28934. factor = this._k * this._k * 10 * mass;
  28935. }
  28936. } else {
  28937. factor = this.nodeToNodeRepulsionFactor(mass, d, this._k);
  28938. }
  28939. if (!oneWay) {
  28940. vec2.scaleAndAdd(na.force, na.force, v, factor * 2);
  28941. }
  28942. vec2.scaleAndAdd(nb.force, nb.force, v, -factor * 2);
  28943. };
  28944. }();
  28945. ForceLayout.prototype.applyEdgeAttraction = function () {
  28946. var v = vec2.create();
  28947. return function applyEdgeAttraction(edge) {
  28948. var na = edge.node1;
  28949. var nb = edge.node2;
  28950. vec2.sub(v, na.position, nb.position);
  28951. var d = vec2.len(v);
  28952. var w;
  28953. if (this.edgeWeightInfluence === 0) {
  28954. w = 1;
  28955. } else if (this.edgeWeightInfluence == 1) {
  28956. w = edge.weight;
  28957. } else {
  28958. w = Math.pow(edge.weight, this.edgeWeightInfluence);
  28959. }
  28960. var factor;
  28961. if (this.preventOverlap) {
  28962. d = d - na.size - nb.size;
  28963. if (d <= 0) {
  28964. return;
  28965. }
  28966. }
  28967. var factor = this.attractionFactor(w, d, this._k);
  28968. vec2.scaleAndAdd(na.force, na.force, v, -factor);
  28969. vec2.scaleAndAdd(nb.force, nb.force, v, factor);
  28970. };
  28971. }();
  28972. ForceLayout.prototype.applyNodeGravity = function () {
  28973. var v = vec2.create();
  28974. return function (node) {
  28975. vec2.sub(v, this.center, node.position);
  28976. if (this.width > this.height) {
  28977. v[1] *= this.width / this.height;
  28978. } else {
  28979. v[0] *= this.height / this.width;
  28980. }
  28981. var d = vec2.len(v) / 100;
  28982. if (this.strongGravity) {
  28983. vec2.scaleAndAdd(node.force, node.force, v, d * this.gravity * node.mass);
  28984. } else {
  28985. vec2.scaleAndAdd(node.force, node.force, v, this.gravity * node.mass / (d + 1));
  28986. }
  28987. };
  28988. }();
  28989. ForceLayout.prototype.applyEdgeToNodeRepulsion = function () {
  28990. var v12 = vec2.create();
  28991. var v13 = vec2.create();
  28992. var p = vec2.create();
  28993. return function (e, n3) {
  28994. var n1 = e.node1;
  28995. var n2 = e.node2;
  28996. if (n1 === n3 || n2 === n3) {
  28997. return;
  28998. }
  28999. vec2.sub(v12, n2.position, n1.position);
  29000. vec2.sub(v13, n3.position, n1.position);
  29001. var len12 = vec2.len(v12);
  29002. vec2.scale(v12, v12, 1 / len12);
  29003. var len = vec2.dot(v12, v13);
  29004. if (len < 0 || len > len12) {
  29005. return;
  29006. }
  29007. vec2.scaleAndAdd(p, n1.position, v12, len);
  29008. var dist = vec2.dist(p, n3.position) - n3.size;
  29009. var factor = this.edgeToNodeRepulsionFactor(n3.mass, Math.max(dist, 0.1), 100);
  29010. vec2.sub(v12, n3.position, p);
  29011. vec2.normalize(v12, v12);
  29012. vec2.scaleAndAdd(n3.force, n3.force, v12, factor);
  29013. vec2.scaleAndAdd(n1.force, n1.force, v12, -factor);
  29014. vec2.scaleAndAdd(n2.force, n2.force, v12, -factor);
  29015. };
  29016. }();
  29017. ForceLayout.prototype.updateBBox = function () {
  29018. var minX = Infinity;
  29019. var minY = Infinity;
  29020. var maxX = -Infinity;
  29021. var maxY = -Infinity;
  29022. for (var i = 0; i < this.nodes.length; i++) {
  29023. var pos = this.nodes[i].position;
  29024. minX = Math.min(minX, pos[0]);
  29025. minY = Math.min(minY, pos[1]);
  29026. maxX = Math.max(maxX, pos[0]);
  29027. maxY = Math.max(maxY, pos[1]);
  29028. }
  29029. this.bbox[0] = minX;
  29030. this.bbox[1] = minY;
  29031. this.bbox[2] = maxX;
  29032. this.bbox[3] = maxY;
  29033. };
  29034. ForceLayout.getWorkerCode = function () {
  29035. var str = __echartsForceLayoutWorker.toString();
  29036. return str.slice(str.indexOf('{') + 1, str.lastIndexOf('return'));
  29037. };
  29038. if (inWorker) {
  29039. var forceLayout = null;
  29040. self.onmessage = function (e) {
  29041. if (e.data instanceof ArrayBuffer) {
  29042. if (!forceLayout)
  29043. return;
  29044. var positionArr = new Float32Array(e.data);
  29045. var nNodes = positionArr.length / 2;
  29046. for (var i = 0; i < nNodes; i++) {
  29047. var node = forceLayout.nodes[i];
  29048. node.position[0] = positionArr[i * 2];
  29049. node.position[1] = positionArr[i * 2 + 1];
  29050. }
  29051. return;
  29052. }
  29053. switch (e.data.cmd) {
  29054. case 'init':
  29055. if (!forceLayout) {
  29056. forceLayout = new ForceLayout();
  29057. }
  29058. forceLayout.initNodes(e.data.nodesPosition, e.data.nodesMass, e.data.nodesSize);
  29059. forceLayout.initEdges(e.data.edges, e.data.edgesWeight);
  29060. break;
  29061. case 'updateConfig':
  29062. if (forceLayout) {
  29063. for (var name in e.data.config) {
  29064. forceLayout[name] = e.data.config[name];
  29065. }
  29066. }
  29067. break;
  29068. case 'update':
  29069. var steps = e.data.steps;
  29070. if (forceLayout) {
  29071. var nNodes = forceLayout.nodes.length;
  29072. var positionArr = new Float32Array(nNodes * 2);
  29073. forceLayout.temperature = e.data.temperature;
  29074. for (var i = 0; i < steps; i++) {
  29075. forceLayout.update();
  29076. forceLayout.temperature *= e.data.coolDown;
  29077. }
  29078. for (var i = 0; i < nNodes; i++) {
  29079. var node = forceLayout.nodes[i];
  29080. positionArr[i * 2] = node.position[0];
  29081. positionArr[i * 2 + 1] = node.position[1];
  29082. }
  29083. self.postMessage(positionArr.buffer, [positionArr.buffer]);
  29084. } else {
  29085. var emptyArr = new Float32Array();
  29086. self.postMessage(emptyArr.buffer, [emptyArr.buffer]);
  29087. }
  29088. break;
  29089. }
  29090. };
  29091. }
  29092. return ForceLayout;
  29093. });define('echarts/chart/map', [
  29094. 'require',
  29095. './base',
  29096. 'zrender/shape/Text',
  29097. 'zrender/shape/Path',
  29098. 'zrender/shape/Circle',
  29099. 'zrender/shape/Rectangle',
  29100. 'zrender/shape/Line',
  29101. 'zrender/shape/Polygon',
  29102. 'zrender/shape/Ellipse',
  29103. '../component/dataRange',
  29104. '../component/roamController',
  29105. '../config',
  29106. '../util/ecData',
  29107. 'zrender/tool/util',
  29108. 'zrender/config',
  29109. 'zrender/tool/event',
  29110. '../util/mapData/params',
  29111. '../util/mapData/textFixed',
  29112. '../util/mapData/geoCoord',
  29113. '../util/projection/svg',
  29114. '../util/projection/normal',
  29115. '../chart'
  29116. ], function (require) {
  29117. var ChartBase = require('./base');
  29118. var TextShape = require('zrender/shape/Text');
  29119. var PathShape = require('zrender/shape/Path');
  29120. var CircleShape = require('zrender/shape/Circle');
  29121. var RectangleShape = require('zrender/shape/Rectangle');
  29122. var LineShape = require('zrender/shape/Line');
  29123. var PolygonShape = require('zrender/shape/Polygon');
  29124. var EllipseShape = require('zrender/shape/Ellipse');
  29125. require('../component/dataRange');
  29126. require('../component/roamController');
  29127. var ecConfig = require('../config');
  29128. ecConfig.map = {
  29129. zlevel: 0,
  29130. z: 2,
  29131. mapType: 'china',
  29132. mapValuePrecision: 0,
  29133. showLegendSymbol: true,
  29134. dataRangeHoverLink: true,
  29135. hoverable: true,
  29136. clickable: true,
  29137. itemStyle: {
  29138. normal: {
  29139. borderColor: 'rgba(0,0,0,0)',
  29140. borderWidth: 1,
  29141. areaStyle: { color: '#ccc' },
  29142. label: {
  29143. show: false,
  29144. textStyle: { color: 'rgb(139,69,19)' }
  29145. }
  29146. },
  29147. emphasis: {
  29148. borderColor: 'rgba(0,0,0,0)',
  29149. borderWidth: 1,
  29150. areaStyle: { color: 'rgba(255,215,0,0.8)' },
  29151. label: {
  29152. show: false,
  29153. textStyle: { color: 'rgb(100,0,0)' }
  29154. }
  29155. }
  29156. }
  29157. };
  29158. var ecData = require('../util/ecData');
  29159. var zrUtil = require('zrender/tool/util');
  29160. var zrConfig = require('zrender/config');
  29161. var zrEvent = require('zrender/tool/event');
  29162. var _mapParams = require('../util/mapData/params').params;
  29163. var _textFixed = require('../util/mapData/textFixed');
  29164. var _geoCoord = require('../util/mapData/geoCoord');
  29165. function Map(ecTheme, messageCenter, zr, option, myChart) {
  29166. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  29167. var self = this;
  29168. self._onmousewheel = function (params) {
  29169. return self.__onmousewheel(params);
  29170. };
  29171. self._onmousedown = function (params) {
  29172. return self.__onmousedown(params);
  29173. };
  29174. self._onmousemove = function (params) {
  29175. return self.__onmousemove(params);
  29176. };
  29177. self._onmouseup = function (params) {
  29178. return self.__onmouseup(params);
  29179. };
  29180. self._onroamcontroller = function (params) {
  29181. return self.__onroamcontroller(params);
  29182. };
  29183. self._ondrhoverlink = function (params) {
  29184. return self.__ondrhoverlink(params);
  29185. };
  29186. this._isAlive = true;
  29187. this._selectedMode = {};
  29188. this._activeMapType = {};
  29189. this._clickable = {};
  29190. this._hoverable = {};
  29191. this._showLegendSymbol = {};
  29192. this._selected = {};
  29193. this._mapTypeMap = {};
  29194. this._mapDataMap = {};
  29195. this._nameMap = {};
  29196. this._specialArea = {};
  29197. this._refreshDelayTicket;
  29198. this._mapDataRequireCounter;
  29199. this._markAnimation = false;
  29200. this._hoverLinkMap = {};
  29201. this._roamMap = {};
  29202. this._scaleLimitMap = {};
  29203. this._mx;
  29204. this._my;
  29205. this._mousedown;
  29206. this._justMove;
  29207. this._curMapType;
  29208. this.refresh(option);
  29209. this.zr.on(zrConfig.EVENT.MOUSEWHEEL, this._onmousewheel);
  29210. this.zr.on(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
  29211. messageCenter.bind(ecConfig.EVENT.ROAMCONTROLLER, this._onroamcontroller);
  29212. messageCenter.bind(ecConfig.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink);
  29213. }
  29214. Map.prototype = {
  29215. type: ecConfig.CHART_TYPE_MAP,
  29216. _buildShape: function () {
  29217. var series = this.series;
  29218. this.selectedMap = {};
  29219. this._activeMapType = {};
  29220. var legend = this.component.legend;
  29221. var seriesName;
  29222. var valueData = {};
  29223. var mapType;
  29224. var data;
  29225. var name;
  29226. var mapSeries = {};
  29227. var mapValuePrecision = {};
  29228. var valueCalculation = {};
  29229. for (var i = 0, l = series.length; i < l; i++) {
  29230. if (series[i].type == ecConfig.CHART_TYPE_MAP) {
  29231. series[i] = this.reformOption(series[i]);
  29232. mapType = series[i].mapType;
  29233. mapSeries[mapType] = mapSeries[mapType] || {};
  29234. mapSeries[mapType][i] = true;
  29235. mapValuePrecision[mapType] = mapValuePrecision[mapType] || series[i].mapValuePrecision;
  29236. this._scaleLimitMap[mapType] = this._scaleLimitMap[mapType] || {};
  29237. series[i].scaleLimit && zrUtil.merge(this._scaleLimitMap[mapType], series[i].scaleLimit, true);
  29238. this._roamMap[mapType] = series[i].roam || this._roamMap[mapType];
  29239. if (this._hoverLinkMap[mapType] == null || this._hoverLinkMap[mapType]) {
  29240. this._hoverLinkMap[mapType] = series[i].dataRangeHoverLink;
  29241. }
  29242. this._nameMap[mapType] = this._nameMap[mapType] || {};
  29243. series[i].nameMap && zrUtil.merge(this._nameMap[mapType], series[i].nameMap, true);
  29244. this._activeMapType[mapType] = true;
  29245. if (series[i].textFixed) {
  29246. zrUtil.merge(_textFixed, series[i].textFixed, true);
  29247. }
  29248. if (series[i].geoCoord) {
  29249. zrUtil.merge(_geoCoord, series[i].geoCoord, true);
  29250. }
  29251. this._selectedMode[mapType] = this._selectedMode[mapType] || series[i].selectedMode;
  29252. if (this._hoverable[mapType] == null || this._hoverable[mapType]) {
  29253. this._hoverable[mapType] = series[i].hoverable;
  29254. }
  29255. if (this._clickable[mapType] == null || this._clickable[mapType]) {
  29256. this._clickable[mapType] = series[i].clickable;
  29257. }
  29258. if (this._showLegendSymbol[mapType] == null || this._showLegendSymbol[mapType]) {
  29259. this._showLegendSymbol[mapType] = series[i].showLegendSymbol;
  29260. }
  29261. valueCalculation[mapType] = valueCalculation[mapType] || series[i].mapValueCalculation;
  29262. seriesName = series[i].name;
  29263. this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
  29264. if (this.selectedMap[seriesName]) {
  29265. valueData[mapType] = valueData[mapType] || {};
  29266. data = series[i].data;
  29267. for (var j = 0, k = data.length; j < k; j++) {
  29268. name = this._nameChange(mapType, data[j].name);
  29269. valueData[mapType][name] = valueData[mapType][name] || {
  29270. seriesIndex: [],
  29271. valueMap: {}
  29272. };
  29273. for (var key in data[j]) {
  29274. if (key != 'value') {
  29275. valueData[mapType][name][key] = data[j][key];
  29276. } else if (!isNaN(data[j].value)) {
  29277. valueData[mapType][name].value == null && (valueData[mapType][name].value = 0);
  29278. valueData[mapType][name].value += +data[j].value;
  29279. valueData[mapType][name].valueMap[i] = +data[j].value;
  29280. }
  29281. }
  29282. valueData[mapType][name].seriesIndex.push(i);
  29283. }
  29284. }
  29285. }
  29286. }
  29287. this._mapDataRequireCounter = 0;
  29288. for (var mt in valueData) {
  29289. this._mapDataRequireCounter++;
  29290. }
  29291. this._clearSelected();
  29292. if (this._mapDataRequireCounter === 0) {
  29293. this.clear();
  29294. this.zr && this.zr.delShape(this.lastShapeList);
  29295. this.lastShapeList = [];
  29296. }
  29297. for (var mt in valueData) {
  29298. if (valueCalculation[mt] && valueCalculation[mt] == 'average') {
  29299. for (var k in valueData[mt]) {
  29300. valueData[mt][k].value = (valueData[mt][k].value / valueData[mt][k].seriesIndex.length).toFixed(mapValuePrecision[mt]) - 0;
  29301. }
  29302. }
  29303. this._mapDataMap[mt] = this._mapDataMap[mt] || {};
  29304. if (this._mapDataMap[mt].mapData) {
  29305. this._mapDataCallback(mt, valueData[mt], mapSeries[mt])(this._mapDataMap[mt].mapData);
  29306. } else if (_mapParams[mt.replace(/\|.*/, '')].getGeoJson) {
  29307. this._specialArea[mt] = _mapParams[mt.replace(/\|.*/, '')].specialArea || this._specialArea[mt];
  29308. _mapParams[mt.replace(/\|.*/, '')].getGeoJson(this._mapDataCallback(mt, valueData[mt], mapSeries[mt]));
  29309. }
  29310. }
  29311. },
  29312. _mapDataCallback: function (mt, vd, ms) {
  29313. var self = this;
  29314. return function (md) {
  29315. if (!self._isAlive || self._activeMapType[mt] == null) {
  29316. return;
  29317. }
  29318. if (mt.indexOf('|') != -1) {
  29319. md = self._getSubMapData(mt, md);
  29320. }
  29321. self._mapDataMap[mt].mapData = md;
  29322. if (md.firstChild) {
  29323. self._mapDataMap[mt].rate = 1;
  29324. self._mapDataMap[mt].projection = require('../util/projection/svg');
  29325. } else {
  29326. self._mapDataMap[mt].rate = 0.75;
  29327. self._mapDataMap[mt].projection = require('../util/projection/normal');
  29328. }
  29329. self._buildMap(mt, self._getProjectionData(mt, md, ms), vd, ms);
  29330. self._buildMark(mt, ms);
  29331. if (--self._mapDataRequireCounter <= 0) {
  29332. self.addShapeList();
  29333. self.zr.refreshNextFrame();
  29334. }
  29335. };
  29336. },
  29337. _clearSelected: function () {
  29338. for (var k in this._selected) {
  29339. if (!this._activeMapType[this._mapTypeMap[k]]) {
  29340. delete this._selected[k];
  29341. delete this._mapTypeMap[k];
  29342. }
  29343. }
  29344. },
  29345. _getSubMapData: function (mapType, mapData) {
  29346. var subType = mapType.replace(/^.*\|/, '');
  29347. var features = mapData.features;
  29348. for (var i = 0, l = features.length; i < l; i++) {
  29349. if (features[i].properties && features[i].properties.name == subType) {
  29350. features = features[i];
  29351. if (subType == 'United States of America' && features.geometry.coordinates.length > 1) {
  29352. features = {
  29353. geometry: {
  29354. coordinates: features.geometry.coordinates.slice(5, 6),
  29355. type: features.geometry.type
  29356. },
  29357. id: features.id,
  29358. properties: features.properties,
  29359. type: features.type
  29360. };
  29361. }
  29362. break;
  29363. }
  29364. }
  29365. return {
  29366. 'type': 'FeatureCollection',
  29367. 'features': [features]
  29368. };
  29369. },
  29370. _getProjectionData: function (mapType, mapData, mapSeries) {
  29371. var normalProjection = this._mapDataMap[mapType].projection;
  29372. var province = [];
  29373. var bbox = this._mapDataMap[mapType].bbox || normalProjection.getBbox(mapData, this._specialArea[mapType]);
  29374. var transform;
  29375. if (!this._mapDataMap[mapType].hasRoam) {
  29376. transform = this._getTransform(bbox, mapSeries, this._mapDataMap[mapType].rate);
  29377. } else {
  29378. transform = this._mapDataMap[mapType].transform;
  29379. }
  29380. var lastTransform = this._mapDataMap[mapType].lastTransform || { scale: {} };
  29381. var pathArray;
  29382. if (transform.left != lastTransform.left || transform.top != lastTransform.top || transform.scale.x != lastTransform.scale.x || transform.scale.y != lastTransform.scale.y) {
  29383. pathArray = normalProjection.geoJson2Path(mapData, transform, this._specialArea[mapType]);
  29384. lastTransform = zrUtil.clone(transform);
  29385. } else {
  29386. transform = this._mapDataMap[mapType].transform;
  29387. pathArray = this._mapDataMap[mapType].pathArray;
  29388. }
  29389. this._mapDataMap[mapType].bbox = bbox;
  29390. this._mapDataMap[mapType].transform = transform;
  29391. this._mapDataMap[mapType].lastTransform = lastTransform;
  29392. this._mapDataMap[mapType].pathArray = pathArray;
  29393. var position = [
  29394. transform.left,
  29395. transform.top
  29396. ];
  29397. for (var i = 0, l = pathArray.length; i < l; i++) {
  29398. province.push(this._getSingleProvince(mapType, pathArray[i], position));
  29399. }
  29400. if (this._specialArea[mapType]) {
  29401. for (var area in this._specialArea[mapType]) {
  29402. province.push(this._getSpecialProjectionData(mapType, mapData, area, this._specialArea[mapType][area], position));
  29403. }
  29404. }
  29405. if (mapType == 'china') {
  29406. var leftTop = this.geo2pos(mapType, _geoCoord['南海诸岛'] || _mapParams['南海诸岛'].textCoord);
  29407. var scale = transform.scale.x / 10.5;
  29408. var textPosition = [
  29409. 32 * scale + leftTop[0],
  29410. 83 * scale + leftTop[1]
  29411. ];
  29412. if (_textFixed['南海诸岛']) {
  29413. textPosition[0] += _textFixed['南海诸岛'][0];
  29414. textPosition[1] += _textFixed['南海诸岛'][1];
  29415. }
  29416. province.push({
  29417. name: this._nameChange(mapType, '南海诸岛'),
  29418. path: _mapParams['南海诸岛'].getPath(leftTop, scale),
  29419. position: position,
  29420. textX: textPosition[0],
  29421. textY: textPosition[1]
  29422. });
  29423. }
  29424. return province;
  29425. },
  29426. _getSpecialProjectionData: function (mapType, mapData, areaName, mapSize, position) {
  29427. mapData = this._getSubMapData('x|' + areaName, mapData);
  29428. var normalProjection = require('../util/projection/normal');
  29429. var bbox = normalProjection.getBbox(mapData);
  29430. var leftTop = this.geo2pos(mapType, [
  29431. mapSize.left,
  29432. mapSize.top
  29433. ]);
  29434. var rightBottom = this.geo2pos(mapType, [
  29435. mapSize.left + mapSize.width,
  29436. mapSize.top + mapSize.height
  29437. ]);
  29438. var width = Math.abs(rightBottom[0] - leftTop[0]);
  29439. var height = Math.abs(rightBottom[1] - leftTop[1]);
  29440. var mapWidth = bbox.width;
  29441. var mapHeight = bbox.height;
  29442. var xScale = width / 0.75 / mapWidth;
  29443. var yScale = height / mapHeight;
  29444. if (xScale > yScale) {
  29445. xScale = yScale * 0.75;
  29446. width = mapWidth * xScale;
  29447. } else {
  29448. yScale = xScale;
  29449. xScale = yScale * 0.75;
  29450. height = mapHeight * yScale;
  29451. }
  29452. var transform = {
  29453. OffsetLeft: leftTop[0],
  29454. OffsetTop: leftTop[1],
  29455. scale: {
  29456. x: xScale,
  29457. y: yScale
  29458. }
  29459. };
  29460. var pathArray = normalProjection.geoJson2Path(mapData, transform);
  29461. return this._getSingleProvince(mapType, pathArray[0], position);
  29462. },
  29463. _getSingleProvince: function (mapType, path, position) {
  29464. var textPosition;
  29465. var name = path.properties.name;
  29466. var textFixed = _textFixed[name] || [
  29467. 0,
  29468. 0
  29469. ];
  29470. if (_geoCoord[name]) {
  29471. textPosition = this.geo2pos(mapType, _geoCoord[name]);
  29472. } else if (path.cp) {
  29473. textPosition = [
  29474. path.cp[0] + textFixed[0],
  29475. path.cp[1] + textFixed[1]
  29476. ];
  29477. } else {
  29478. var bbox = this._mapDataMap[mapType].bbox;
  29479. textPosition = this.geo2pos(mapType, [
  29480. bbox.left + bbox.width / 2,
  29481. bbox.top + bbox.height / 2
  29482. ]);
  29483. textPosition[0] += textFixed[0];
  29484. textPosition[1] += textFixed[1];
  29485. }
  29486. path.name = this._nameChange(mapType, name);
  29487. path.position = position;
  29488. path.textX = textPosition[0];
  29489. path.textY = textPosition[1];
  29490. return path;
  29491. },
  29492. _getTransform: function (bbox, mapSeries, rate) {
  29493. var series = this.series;
  29494. var mapLocation;
  29495. var x;
  29496. var cusX;
  29497. var y;
  29498. var cusY;
  29499. var width;
  29500. var height;
  29501. var zrWidth = this.zr.getWidth();
  29502. var zrHeight = this.zr.getHeight();
  29503. var padding = Math.round(Math.min(zrWidth, zrHeight) * 0.02);
  29504. for (var key in mapSeries) {
  29505. mapLocation = series[key].mapLocation || {};
  29506. cusX = mapLocation.x || cusX;
  29507. cusY = mapLocation.y || cusY;
  29508. width = mapLocation.width || width;
  29509. height = mapLocation.height || height;
  29510. }
  29511. x = this.parsePercent(cusX, zrWidth);
  29512. x = isNaN(x) ? padding : x;
  29513. y = this.parsePercent(cusY, zrHeight);
  29514. y = isNaN(y) ? padding : y;
  29515. width = width == null ? zrWidth - x - 2 * padding : this.parsePercent(width, zrWidth);
  29516. height = height == null ? zrHeight - y - 2 * padding : this.parsePercent(height, zrHeight);
  29517. var mapWidth = bbox.width;
  29518. var mapHeight = bbox.height;
  29519. var xScale = width / rate / mapWidth;
  29520. var yScale = height / mapHeight;
  29521. if (xScale > yScale) {
  29522. xScale = yScale * rate;
  29523. width = mapWidth * xScale;
  29524. } else {
  29525. yScale = xScale;
  29526. xScale = yScale * rate;
  29527. height = mapHeight * yScale;
  29528. }
  29529. if (isNaN(cusX)) {
  29530. cusX = cusX || 'center';
  29531. switch (cusX + '') {
  29532. case 'center':
  29533. x = Math.floor((zrWidth - width) / 2);
  29534. break;
  29535. case 'right':
  29536. x = zrWidth - width;
  29537. break;
  29538. }
  29539. }
  29540. if (isNaN(cusY)) {
  29541. cusY = cusY || 'center';
  29542. switch (cusY + '') {
  29543. case 'center':
  29544. y = Math.floor((zrHeight - height) / 2);
  29545. break;
  29546. case 'bottom':
  29547. y = zrHeight - height;
  29548. break;
  29549. }
  29550. }
  29551. return {
  29552. left: x,
  29553. top: y,
  29554. width: width,
  29555. height: height,
  29556. baseScale: 1,
  29557. scale: {
  29558. x: xScale,
  29559. y: yScale
  29560. }
  29561. };
  29562. },
  29563. _buildMap: function (mapType, mapData, valueData, mapSeries) {
  29564. var series = this.series;
  29565. var legend = this.component.legend;
  29566. var dataRange = this.component.dataRange;
  29567. var seriesName;
  29568. var name;
  29569. var data;
  29570. var value;
  29571. var queryTarget;
  29572. var color;
  29573. var font;
  29574. var style;
  29575. var highlightStyle;
  29576. var shape;
  29577. var textShape;
  29578. for (var i = 0, l = mapData.length; i < l; i++) {
  29579. style = zrUtil.clone(mapData[i]);
  29580. highlightStyle = {
  29581. name: style.name,
  29582. path: style.path,
  29583. position: zrUtil.clone(style.position)
  29584. };
  29585. name = style.name;
  29586. data = valueData[name];
  29587. if (data) {
  29588. queryTarget = [data];
  29589. seriesName = '';
  29590. for (var j = 0, k = data.seriesIndex.length; j < k; j++) {
  29591. queryTarget.push(series[data.seriesIndex[j]]);
  29592. seriesName += series[data.seriesIndex[j]].name + ' ';
  29593. if (legend && this._showLegendSymbol[mapType] && legend.hasColor(series[data.seriesIndex[j]].name)) {
  29594. this.shapeList.push(new CircleShape({
  29595. zlevel: this.getZlevelBase(),
  29596. z: this.getZBase() + 1,
  29597. position: zrUtil.clone(style.position),
  29598. _mapType: mapType,
  29599. style: {
  29600. x: style.textX + 3 + j * 7,
  29601. y: style.textY - 10,
  29602. r: 3,
  29603. color: legend.getColor(series[data.seriesIndex[j]].name)
  29604. },
  29605. hoverable: false
  29606. }));
  29607. }
  29608. }
  29609. value = data.value;
  29610. } else {
  29611. data = {
  29612. name: name,
  29613. value: '-'
  29614. };
  29615. seriesName = '';
  29616. queryTarget = [];
  29617. for (var key in mapSeries) {
  29618. queryTarget.push(series[key]);
  29619. }
  29620. value = '-';
  29621. }
  29622. this.ecTheme.map && queryTarget.push(this.ecTheme.map);
  29623. queryTarget.push(ecConfig);
  29624. color = dataRange && !isNaN(value) ? dataRange.getColor(value) : null;
  29625. style.color = style.color || color || this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), data.seriesIndex, -1, data) || this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');
  29626. style.strokeColor = style.strokeColor || this.deepQuery(queryTarget, 'itemStyle.normal.borderColor');
  29627. style.lineWidth = style.lineWidth || this.deepQuery(queryTarget, 'itemStyle.normal.borderWidth');
  29628. highlightStyle.color = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), data.seriesIndex, -1, data) || this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || style.color;
  29629. highlightStyle.strokeColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.borderColor') || style.strokeColor;
  29630. highlightStyle.lineWidth = this.deepQuery(queryTarget, 'itemStyle.emphasis.borderWidth') || style.lineWidth;
  29631. style.brushType = highlightStyle.brushType = style.brushType || 'both';
  29632. style.lineJoin = highlightStyle.lineJoin = 'round';
  29633. style._name = highlightStyle._name = name;
  29634. font = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle');
  29635. textShape = {
  29636. zlevel: this.getZlevelBase(),
  29637. z: this.getZBase() + 1,
  29638. position: zrUtil.clone(style.position),
  29639. _mapType: mapType,
  29640. _geo: this.pos2geo(mapType, [
  29641. style.textX,
  29642. style.textY
  29643. ]),
  29644. style: {
  29645. brushType: 'fill',
  29646. x: style.textX,
  29647. y: style.textY,
  29648. text: this.getLabelText(name, value, queryTarget, 'normal'),
  29649. _name: name,
  29650. textAlign: 'center',
  29651. color: this.deepQuery(queryTarget, 'itemStyle.normal.label.show') ? this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color') : 'rgba(0,0,0,0)',
  29652. textFont: this.getFont(font)
  29653. }
  29654. };
  29655. textShape._style = zrUtil.clone(textShape.style);
  29656. textShape.highlightStyle = zrUtil.clone(textShape.style);
  29657. if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
  29658. textShape.highlightStyle.text = this.getLabelText(name, value, queryTarget, 'emphasis');
  29659. textShape.highlightStyle.color = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color') || textShape.style.color;
  29660. font = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || font;
  29661. textShape.highlightStyle.textFont = this.getFont(font);
  29662. } else {
  29663. textShape.highlightStyle.color = 'rgba(0,0,0,0)';
  29664. }
  29665. shape = {
  29666. zlevel: this.getZlevelBase(),
  29667. z: this.getZBase(),
  29668. position: zrUtil.clone(style.position),
  29669. style: style,
  29670. highlightStyle: highlightStyle,
  29671. _style: zrUtil.clone(style),
  29672. _mapType: mapType
  29673. };
  29674. if (style.scale != null) {
  29675. shape.scale = zrUtil.clone(style.scale);
  29676. }
  29677. textShape = new TextShape(textShape);
  29678. switch (shape.style.shapeType) {
  29679. case 'rectangle':
  29680. shape = new RectangleShape(shape);
  29681. break;
  29682. case 'line':
  29683. shape = new LineShape(shape);
  29684. break;
  29685. case 'circle':
  29686. shape = new CircleShape(shape);
  29687. break;
  29688. case 'polygon':
  29689. shape = new PolygonShape(shape);
  29690. break;
  29691. case 'ellipse':
  29692. shape = new EllipseShape(shape);
  29693. break;
  29694. default:
  29695. shape = new PathShape(shape);
  29696. if (shape.buildPathArray) {
  29697. shape.style.pathArray = shape.buildPathArray(shape.style.path);
  29698. }
  29699. break;
  29700. }
  29701. if (this._selectedMode[mapType] && this._selected[name] || data.selected && this._selected[name] !== false) {
  29702. textShape.style = textShape.highlightStyle;
  29703. shape.style = shape.highlightStyle;
  29704. }
  29705. textShape.clickable = shape.clickable = this._clickable[mapType] && (data.clickable == null || data.clickable);
  29706. if (this._selectedMode[mapType]) {
  29707. this._selected[name] = this._selected[name] != null ? this._selected[name] : data.selected;
  29708. this._mapTypeMap[name] = mapType;
  29709. if (data.selectable == null || data.selectable) {
  29710. shape.clickable = textShape.clickable = true;
  29711. shape.onclick = textShape.onclick = this.shapeHandler.onclick;
  29712. }
  29713. }
  29714. if (this._hoverable[mapType] && (data.hoverable == null || data.hoverable)) {
  29715. textShape.hoverable = shape.hoverable = true;
  29716. shape.hoverConnect = textShape.id;
  29717. textShape.hoverConnect = shape.id;
  29718. } else {
  29719. textShape.hoverable = shape.hoverable = false;
  29720. }
  29721. ecData.pack(textShape, {
  29722. name: seriesName,
  29723. tooltip: this.deepQuery(queryTarget, 'tooltip')
  29724. }, 0, data, 0, name);
  29725. this.shapeList.push(textShape);
  29726. ecData.pack(shape, {
  29727. name: seriesName,
  29728. tooltip: this.deepQuery(queryTarget, 'tooltip')
  29729. }, 0, data, 0, name);
  29730. this.shapeList.push(shape);
  29731. }
  29732. },
  29733. _buildMark: function (mapType, mapSeries) {
  29734. this._seriesIndexToMapType = this._seriesIndexToMapType || {};
  29735. this.markAttachStyle = this.markAttachStyle || {};
  29736. var position = [
  29737. this._mapDataMap[mapType].transform.left,
  29738. this._mapDataMap[mapType].transform.top
  29739. ];
  29740. if (mapType == 'none') {
  29741. position = [
  29742. 0,
  29743. 0
  29744. ];
  29745. }
  29746. for (var sIdx in mapSeries) {
  29747. this._seriesIndexToMapType[sIdx] = mapType;
  29748. this.markAttachStyle[sIdx] = {
  29749. position: position,
  29750. _mapType: mapType
  29751. };
  29752. this.buildMark(sIdx);
  29753. }
  29754. },
  29755. getMarkCoord: function (seriesIndex, mpData) {
  29756. return mpData.geoCoord || _geoCoord[mpData.name] ? this.geo2pos(this._seriesIndexToMapType[seriesIndex], mpData.geoCoord || _geoCoord[mpData.name]) : [
  29757. 0,
  29758. 0
  29759. ];
  29760. },
  29761. getMarkGeo: function (mpData) {
  29762. return mpData.geoCoord || _geoCoord[mpData.name];
  29763. },
  29764. _nameChange: function (mapType, name) {
  29765. return this._nameMap[mapType][name] || name;
  29766. },
  29767. getLabelText: function (name, value, queryTarget, status) {
  29768. var formatter = this.deepQuery(queryTarget, 'itemStyle.' + status + '.label.formatter');
  29769. if (formatter) {
  29770. if (typeof formatter == 'function') {
  29771. return formatter.call(this.myChart, name, value);
  29772. } else if (typeof formatter == 'string') {
  29773. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}');
  29774. formatter = formatter.replace('{a0}', name).replace('{b0}', value);
  29775. return formatter;
  29776. }
  29777. } else {
  29778. return name;
  29779. }
  29780. },
  29781. _findMapTypeByPos: function (mx, my) {
  29782. var transform;
  29783. var left;
  29784. var top;
  29785. var width;
  29786. var height;
  29787. for (var mapType in this._mapDataMap) {
  29788. transform = this._mapDataMap[mapType].transform;
  29789. if (!transform || !this._roamMap[mapType] || !this._activeMapType[mapType]) {
  29790. continue;
  29791. }
  29792. left = transform.left;
  29793. top = transform.top;
  29794. width = transform.width;
  29795. height = transform.height;
  29796. if (mx >= left && mx <= left + width && my >= top && my <= top + height) {
  29797. return mapType;
  29798. }
  29799. }
  29800. return;
  29801. },
  29802. __onmousewheel: function (params) {
  29803. if (this.shapeList.length <= 0) {
  29804. return;
  29805. }
  29806. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  29807. var shape = this.shapeList[i];
  29808. if (shape.__animating) {
  29809. return;
  29810. }
  29811. }
  29812. var event = params.event;
  29813. var mx = zrEvent.getX(event);
  29814. var my = zrEvent.getY(event);
  29815. var delta;
  29816. var eventDelta = zrEvent.getDelta(event);
  29817. var mapType;
  29818. var mapTypeControl = params.mapTypeControl;
  29819. if (!mapTypeControl) {
  29820. mapTypeControl = {};
  29821. mapType = this._findMapTypeByPos(mx, my);
  29822. if (mapType && this._roamMap[mapType] && this._roamMap[mapType] != 'move') {
  29823. mapTypeControl[mapType] = true;
  29824. }
  29825. }
  29826. function scalePolyline(shapeStyle, delta) {
  29827. for (var i = 0; i < shapeStyle.pointList.length; i++) {
  29828. var point = shapeStyle.pointList[i];
  29829. point[0] *= delta;
  29830. point[1] *= delta;
  29831. }
  29832. var controlPointList = shapeStyle.controlPointList;
  29833. if (controlPointList) {
  29834. for (var i = 0; i < controlPointList.length; i++) {
  29835. var point = controlPointList[i];
  29836. point[0] *= delta;
  29837. point[1] *= delta;
  29838. }
  29839. }
  29840. }
  29841. function scaleMarkline(shapeStyle, delta) {
  29842. shapeStyle.xStart *= delta;
  29843. shapeStyle.yStart *= delta;
  29844. shapeStyle.xEnd *= delta;
  29845. shapeStyle.yEnd *= delta;
  29846. if (shapeStyle.cpX1 != null) {
  29847. shapeStyle.cpX1 *= delta;
  29848. shapeStyle.cpY1 *= delta;
  29849. }
  29850. }
  29851. var haveScale = false;
  29852. for (mapType in mapTypeControl) {
  29853. if (mapTypeControl[mapType]) {
  29854. haveScale = true;
  29855. var transform = this._mapDataMap[mapType].transform;
  29856. var left = transform.left;
  29857. var top = transform.top;
  29858. var width = transform.width;
  29859. var height = transform.height;
  29860. var geoAndPos = this.pos2geo(mapType, [
  29861. mx - left,
  29862. my - top
  29863. ]);
  29864. if (eventDelta > 0) {
  29865. delta = 1.2;
  29866. if (this._scaleLimitMap[mapType].max != null && transform.baseScale >= this._scaleLimitMap[mapType].max) {
  29867. continue;
  29868. }
  29869. } else {
  29870. delta = 1 / 1.2;
  29871. if (this._scaleLimitMap[mapType].min != null && transform.baseScale <= this._scaleLimitMap[mapType].min) {
  29872. continue;
  29873. }
  29874. }
  29875. transform.baseScale *= delta;
  29876. transform.scale.x *= delta;
  29877. transform.scale.y *= delta;
  29878. transform.width = width * delta;
  29879. transform.height = height * delta;
  29880. this._mapDataMap[mapType].hasRoam = true;
  29881. this._mapDataMap[mapType].transform = transform;
  29882. geoAndPos = this.geo2pos(mapType, geoAndPos);
  29883. transform.left -= geoAndPos[0] - (mx - left);
  29884. transform.top -= geoAndPos[1] - (my - top);
  29885. this._mapDataMap[mapType].transform = transform;
  29886. this.clearEffectShape(true);
  29887. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  29888. var shape = this.shapeList[i];
  29889. if (shape._mapType == mapType) {
  29890. var shapeType = shape.type;
  29891. var shapeStyle = shape.style;
  29892. shape.position[0] = transform.left;
  29893. shape.position[1] = transform.top;
  29894. switch (shapeType) {
  29895. case 'path':
  29896. case 'symbol':
  29897. case 'circle':
  29898. case 'rectangle':
  29899. case 'polygon':
  29900. case 'line':
  29901. case 'ellipse':
  29902. shape.scale[0] *= delta;
  29903. shape.scale[1] *= delta;
  29904. break;
  29905. case 'mark-line':
  29906. scaleMarkline(shapeStyle, delta);
  29907. break;
  29908. case 'polyline':
  29909. scalePolyline(shapeStyle, delta);
  29910. break;
  29911. case 'shape-bundle':
  29912. for (var j = 0; j < shapeStyle.shapeList.length; j++) {
  29913. var subShape = shapeStyle.shapeList[j];
  29914. if (subShape.type == 'mark-line') {
  29915. scaleMarkline(subShape.style, delta);
  29916. } else if (subShape.type == 'polyline') {
  29917. scalePolyline(subShape.style, delta);
  29918. }
  29919. }
  29920. break;
  29921. case 'icon':
  29922. case 'image':
  29923. geoAndPos = this.geo2pos(mapType, shape._geo);
  29924. shapeStyle.x = shapeStyle._x = geoAndPos[0] - shapeStyle.width / 2;
  29925. shapeStyle.y = shapeStyle._y = geoAndPos[1] - shapeStyle.height / 2;
  29926. break;
  29927. default:
  29928. geoAndPos = this.geo2pos(mapType, shape._geo);
  29929. shapeStyle.x = geoAndPos[0];
  29930. shapeStyle.y = geoAndPos[1];
  29931. if (shapeType == 'text') {
  29932. shape._style.x = shape.highlightStyle.x = geoAndPos[0];
  29933. shape._style.y = shape.highlightStyle.y = geoAndPos[1];
  29934. }
  29935. }
  29936. this.zr.modShape(shape.id);
  29937. }
  29938. }
  29939. }
  29940. }
  29941. if (haveScale) {
  29942. zrEvent.stop(event);
  29943. this.zr.refreshNextFrame();
  29944. var self = this;
  29945. clearTimeout(this._refreshDelayTicket);
  29946. this._refreshDelayTicket = setTimeout(function () {
  29947. self && self.shapeList && self.animationEffect();
  29948. }, 100);
  29949. this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'scale' }, this.myChart);
  29950. }
  29951. },
  29952. __onmousedown: function (params) {
  29953. if (this.shapeList.length <= 0) {
  29954. return;
  29955. }
  29956. var target = params.target;
  29957. if (target && target.draggable) {
  29958. return;
  29959. }
  29960. var event = params.event;
  29961. var mx = zrEvent.getX(event);
  29962. var my = zrEvent.getY(event);
  29963. var mapType = this._findMapTypeByPos(mx, my);
  29964. if (mapType && this._roamMap[mapType] && this._roamMap[mapType] != 'scale') {
  29965. this._mousedown = true;
  29966. this._mx = mx;
  29967. this._my = my;
  29968. this._curMapType = mapType;
  29969. this.zr.on(zrConfig.EVENT.MOUSEUP, this._onmouseup);
  29970. var self = this;
  29971. setTimeout(function () {
  29972. self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  29973. }, 100);
  29974. }
  29975. },
  29976. __onmousemove: function (params) {
  29977. if (!this._mousedown || !this._isAlive) {
  29978. return;
  29979. }
  29980. var event = params.event;
  29981. var mx = zrEvent.getX(event);
  29982. var my = zrEvent.getY(event);
  29983. var transform = this._mapDataMap[this._curMapType].transform;
  29984. transform.hasRoam = true;
  29985. transform.left -= this._mx - mx;
  29986. transform.top -= this._my - my;
  29987. this._mx = mx;
  29988. this._my = my;
  29989. this._mapDataMap[this._curMapType].transform = transform;
  29990. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  29991. if (this.shapeList[i]._mapType == this._curMapType) {
  29992. this.shapeList[i].position[0] = transform.left;
  29993. this.shapeList[i].position[1] = transform.top;
  29994. this.zr.modShape(this.shapeList[i].id);
  29995. }
  29996. }
  29997. this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'move' }, this.myChart);
  29998. this.clearEffectShape(true);
  29999. this.zr.refreshNextFrame();
  30000. this._justMove = true;
  30001. zrEvent.stop(event);
  30002. },
  30003. __onmouseup: function (params) {
  30004. var event = params.event;
  30005. this._mx = zrEvent.getX(event);
  30006. this._my = zrEvent.getY(event);
  30007. this._mousedown = false;
  30008. var self = this;
  30009. setTimeout(function () {
  30010. self._justMove && self.animationEffect();
  30011. self._justMove = false;
  30012. self.zr.un(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  30013. self.zr.un(zrConfig.EVENT.MOUSEUP, self._onmouseup);
  30014. }, 120);
  30015. },
  30016. __onroamcontroller: function (params) {
  30017. var event = params.event;
  30018. event.zrenderX = this.zr.getWidth() / 2;
  30019. event.zrenderY = this.zr.getHeight() / 2;
  30020. var mapTypeControl = params.mapTypeControl;
  30021. var top = 0;
  30022. var left = 0;
  30023. var step = params.step;
  30024. switch (params.roamType) {
  30025. case 'scaleUp':
  30026. event.zrenderDelta = 1;
  30027. this.__onmousewheel({
  30028. event: event,
  30029. mapTypeControl: mapTypeControl
  30030. });
  30031. return;
  30032. case 'scaleDown':
  30033. event.zrenderDelta = -1;
  30034. this.__onmousewheel({
  30035. event: event,
  30036. mapTypeControl: mapTypeControl
  30037. });
  30038. return;
  30039. case 'up':
  30040. top = -step;
  30041. break;
  30042. case 'down':
  30043. top = step;
  30044. break;
  30045. case 'left':
  30046. left = -step;
  30047. break;
  30048. case 'right':
  30049. left = step;
  30050. break;
  30051. }
  30052. var transform;
  30053. var curMapType;
  30054. for (curMapType in mapTypeControl) {
  30055. if (!this._mapDataMap[curMapType] || !this._activeMapType[curMapType]) {
  30056. continue;
  30057. }
  30058. transform = this._mapDataMap[curMapType].transform;
  30059. transform.hasRoam = true;
  30060. transform.left -= left;
  30061. transform.top -= top;
  30062. this._mapDataMap[curMapType].transform = transform;
  30063. }
  30064. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30065. curMapType = this.shapeList[i]._mapType;
  30066. if (!mapTypeControl[curMapType] || !this._activeMapType[curMapType]) {
  30067. continue;
  30068. }
  30069. transform = this._mapDataMap[curMapType].transform;
  30070. this.shapeList[i].position[0] = transform.left;
  30071. this.shapeList[i].position[1] = transform.top;
  30072. this.zr.modShape(this.shapeList[i].id);
  30073. }
  30074. this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'move' }, this.myChart);
  30075. this.clearEffectShape(true);
  30076. this.zr.refreshNextFrame();
  30077. clearTimeout(this.dircetionTimer);
  30078. var self = this;
  30079. this.dircetionTimer = setTimeout(function () {
  30080. self.animationEffect();
  30081. }, 150);
  30082. },
  30083. __ondrhoverlink: function (param) {
  30084. var curMapType;
  30085. var value;
  30086. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30087. curMapType = this.shapeList[i]._mapType;
  30088. if (!this._hoverLinkMap[curMapType] || !this._activeMapType[curMapType]) {
  30089. continue;
  30090. }
  30091. value = ecData.get(this.shapeList[i], 'value');
  30092. if (value != null && value >= param.valueMin && value <= param.valueMax) {
  30093. this.zr.addHoverShape(this.shapeList[i]);
  30094. }
  30095. }
  30096. },
  30097. onclick: function (params) {
  30098. if (!this.isClick || !params.target || this._justMove || params.target.type == 'icon') {
  30099. return;
  30100. }
  30101. this.isClick = false;
  30102. var target = params.target;
  30103. var name = target.style._name;
  30104. var len = this.shapeList.length;
  30105. var mapType = target._mapType || '';
  30106. if (this._selectedMode[mapType] == 'single') {
  30107. for (var p in this._selected) {
  30108. if (this._selected[p] && this._mapTypeMap[p] == mapType) {
  30109. for (var i = 0; i < len; i++) {
  30110. if (this.shapeList[i].style._name == p && this.shapeList[i]._mapType == mapType) {
  30111. this.shapeList[i].style = this.shapeList[i]._style;
  30112. this.zr.modShape(this.shapeList[i].id);
  30113. }
  30114. }
  30115. p != name && (this._selected[p] = false);
  30116. }
  30117. }
  30118. }
  30119. this._selected[name] = !this._selected[name];
  30120. for (var i = 0; i < len; i++) {
  30121. if (this.shapeList[i].style._name == name && this.shapeList[i]._mapType == mapType) {
  30122. if (this._selected[name]) {
  30123. this.shapeList[i].style = this.shapeList[i].highlightStyle;
  30124. } else {
  30125. this.shapeList[i].style = this.shapeList[i]._style;
  30126. }
  30127. this.zr.modShape(this.shapeList[i].id);
  30128. }
  30129. }
  30130. this.messageCenter.dispatch(ecConfig.EVENT.MAP_SELECTED, params.event, {
  30131. selected: this._selected,
  30132. target: name
  30133. }, this.myChart);
  30134. this.zr.refreshNextFrame();
  30135. var self = this;
  30136. setTimeout(function () {
  30137. self.zr.trigger(zrConfig.EVENT.MOUSEMOVE, params.event);
  30138. }, 100);
  30139. },
  30140. refresh: function (newOption) {
  30141. if (newOption) {
  30142. this.option = newOption;
  30143. this.series = newOption.series;
  30144. }
  30145. if (this._mapDataRequireCounter > 0) {
  30146. this.clear();
  30147. } else {
  30148. this.backupShapeList();
  30149. }
  30150. this._buildShape();
  30151. this.zr.refreshHover();
  30152. },
  30153. ondataRange: function (param, status) {
  30154. if (this.component.dataRange) {
  30155. this.refresh();
  30156. status.needRefresh = true;
  30157. }
  30158. return;
  30159. },
  30160. pos2geo: function (mapType, p) {
  30161. if (!this._mapDataMap[mapType].transform) {
  30162. return null;
  30163. }
  30164. return this._mapDataMap[mapType].projection.pos2geo(this._mapDataMap[mapType].transform, p);
  30165. },
  30166. getGeoByPos: function (mapType, p) {
  30167. if (!this._mapDataMap[mapType].transform) {
  30168. return null;
  30169. }
  30170. var position = [
  30171. this._mapDataMap[mapType].transform.left,
  30172. this._mapDataMap[mapType].transform.top
  30173. ];
  30174. if (p instanceof Array) {
  30175. p[0] -= position[0];
  30176. p[1] -= position[1];
  30177. } else {
  30178. p.x -= position[0];
  30179. p.y -= position[1];
  30180. }
  30181. return this.pos2geo(mapType, p);
  30182. },
  30183. geo2pos: function (mapType, p) {
  30184. if (!this._mapDataMap[mapType].transform) {
  30185. return null;
  30186. }
  30187. return this._mapDataMap[mapType].projection.geo2pos(this._mapDataMap[mapType].transform, p);
  30188. },
  30189. getPosByGeo: function (mapType, p) {
  30190. if (!this._mapDataMap[mapType].transform) {
  30191. return null;
  30192. }
  30193. var pos = this.geo2pos(mapType, p);
  30194. pos[0] += this._mapDataMap[mapType].transform.left;
  30195. pos[1] += this._mapDataMap[mapType].transform.top;
  30196. return pos;
  30197. },
  30198. getMapPosition: function (mapType) {
  30199. if (!this._mapDataMap[mapType].transform) {
  30200. return null;
  30201. }
  30202. return [
  30203. this._mapDataMap[mapType].transform.left,
  30204. this._mapDataMap[mapType].transform.top
  30205. ];
  30206. },
  30207. onbeforDispose: function () {
  30208. this._isAlive = false;
  30209. this.zr.un(zrConfig.EVENT.MOUSEWHEEL, this._onmousewheel);
  30210. this.zr.un(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
  30211. this.messageCenter.unbind(ecConfig.EVENT.ROAMCONTROLLER, this._onroamcontroller);
  30212. this.messageCenter.unbind(ecConfig.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink);
  30213. }
  30214. };
  30215. zrUtil.inherits(Map, ChartBase);
  30216. require('../chart').define('map', Map);
  30217. return Map;
  30218. });define('zrender/shape/Path', [
  30219. 'require',
  30220. './Base',
  30221. './util/PathProxy',
  30222. '../tool/util'
  30223. ], function (require) {
  30224. var Base = require('./Base');
  30225. var PathProxy = require('./util/PathProxy');
  30226. var PathSegment = PathProxy.PathSegment;
  30227. var vMag = function (v) {
  30228. return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
  30229. };
  30230. var vRatio = function (u, v) {
  30231. return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
  30232. };
  30233. var vAngle = function (u, v) {
  30234. return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));
  30235. };
  30236. var Path = function (options) {
  30237. Base.call(this, options);
  30238. };
  30239. Path.prototype = {
  30240. type: 'path',
  30241. buildPathArray: function (data, x, y) {
  30242. if (!data) {
  30243. return [];
  30244. }
  30245. x = x || 0;
  30246. y = y || 0;
  30247. var cs = data;
  30248. var cc = [
  30249. 'm',
  30250. 'M',
  30251. 'l',
  30252. 'L',
  30253. 'v',
  30254. 'V',
  30255. 'h',
  30256. 'H',
  30257. 'z',
  30258. 'Z',
  30259. 'c',
  30260. 'C',
  30261. 'q',
  30262. 'Q',
  30263. 't',
  30264. 'T',
  30265. 's',
  30266. 'S',
  30267. 'a',
  30268. 'A'
  30269. ];
  30270. cs = cs.replace(/-/g, ' -');
  30271. cs = cs.replace(/ /g, ' ');
  30272. cs = cs.replace(/ /g, ',');
  30273. cs = cs.replace(/,,/g, ',');
  30274. var n;
  30275. for (n = 0; n < cc.length; n++) {
  30276. cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);
  30277. }
  30278. var arr = cs.split('|');
  30279. var ca = [];
  30280. var cpx = 0;
  30281. var cpy = 0;
  30282. for (n = 1; n < arr.length; n++) {
  30283. var str = arr[n];
  30284. var c = str.charAt(0);
  30285. str = str.slice(1);
  30286. str = str.replace(new RegExp('e,-', 'g'), 'e-');
  30287. var p = str.split(',');
  30288. if (p.length > 0 && p[0] === '') {
  30289. p.shift();
  30290. }
  30291. for (var i = 0; i < p.length; i++) {
  30292. p[i] = parseFloat(p[i]);
  30293. }
  30294. while (p.length > 0) {
  30295. if (isNaN(p[0])) {
  30296. break;
  30297. }
  30298. var cmd = null;
  30299. var points = [];
  30300. var ctlPtx;
  30301. var ctlPty;
  30302. var prevCmd;
  30303. var rx;
  30304. var ry;
  30305. var psi;
  30306. var fa;
  30307. var fs;
  30308. var x1 = cpx;
  30309. var y1 = cpy;
  30310. switch (c) {
  30311. case 'l':
  30312. cpx += p.shift();
  30313. cpy += p.shift();
  30314. cmd = 'L';
  30315. points.push(cpx, cpy);
  30316. break;
  30317. case 'L':
  30318. cpx = p.shift();
  30319. cpy = p.shift();
  30320. points.push(cpx, cpy);
  30321. break;
  30322. case 'm':
  30323. cpx += p.shift();
  30324. cpy += p.shift();
  30325. cmd = 'M';
  30326. points.push(cpx, cpy);
  30327. c = 'l';
  30328. break;
  30329. case 'M':
  30330. cpx = p.shift();
  30331. cpy = p.shift();
  30332. cmd = 'M';
  30333. points.push(cpx, cpy);
  30334. c = 'L';
  30335. break;
  30336. case 'h':
  30337. cpx += p.shift();
  30338. cmd = 'L';
  30339. points.push(cpx, cpy);
  30340. break;
  30341. case 'H':
  30342. cpx = p.shift();
  30343. cmd = 'L';
  30344. points.push(cpx, cpy);
  30345. break;
  30346. case 'v':
  30347. cpy += p.shift();
  30348. cmd = 'L';
  30349. points.push(cpx, cpy);
  30350. break;
  30351. case 'V':
  30352. cpy = p.shift();
  30353. cmd = 'L';
  30354. points.push(cpx, cpy);
  30355. break;
  30356. case 'C':
  30357. points.push(p.shift(), p.shift(), p.shift(), p.shift());
  30358. cpx = p.shift();
  30359. cpy = p.shift();
  30360. points.push(cpx, cpy);
  30361. break;
  30362. case 'c':
  30363. points.push(cpx + p.shift(), cpy + p.shift(), cpx + p.shift(), cpy + p.shift());
  30364. cpx += p.shift();
  30365. cpy += p.shift();
  30366. cmd = 'C';
  30367. points.push(cpx, cpy);
  30368. break;
  30369. case 'S':
  30370. ctlPtx = cpx;
  30371. ctlPty = cpy;
  30372. prevCmd = ca[ca.length - 1];
  30373. if (prevCmd.command === 'C') {
  30374. ctlPtx = cpx + (cpx - prevCmd.points[2]);
  30375. ctlPty = cpy + (cpy - prevCmd.points[3]);
  30376. }
  30377. points.push(ctlPtx, ctlPty, p.shift(), p.shift());
  30378. cpx = p.shift();
  30379. cpy = p.shift();
  30380. cmd = 'C';
  30381. points.push(cpx, cpy);
  30382. break;
  30383. case 's':
  30384. ctlPtx = cpx, ctlPty = cpy;
  30385. prevCmd = ca[ca.length - 1];
  30386. if (prevCmd.command === 'C') {
  30387. ctlPtx = cpx + (cpx - prevCmd.points[2]);
  30388. ctlPty = cpy + (cpy - prevCmd.points[3]);
  30389. }
  30390. points.push(ctlPtx, ctlPty, cpx + p.shift(), cpy + p.shift());
  30391. cpx += p.shift();
  30392. cpy += p.shift();
  30393. cmd = 'C';
  30394. points.push(cpx, cpy);
  30395. break;
  30396. case 'Q':
  30397. points.push(p.shift(), p.shift());
  30398. cpx = p.shift();
  30399. cpy = p.shift();
  30400. points.push(cpx, cpy);
  30401. break;
  30402. case 'q':
  30403. points.push(cpx + p.shift(), cpy + p.shift());
  30404. cpx += p.shift();
  30405. cpy += p.shift();
  30406. cmd = 'Q';
  30407. points.push(cpx, cpy);
  30408. break;
  30409. case 'T':
  30410. ctlPtx = cpx, ctlPty = cpy;
  30411. prevCmd = ca[ca.length - 1];
  30412. if (prevCmd.command === 'Q') {
  30413. ctlPtx = cpx + (cpx - prevCmd.points[0]);
  30414. ctlPty = cpy + (cpy - prevCmd.points[1]);
  30415. }
  30416. cpx = p.shift();
  30417. cpy = p.shift();
  30418. cmd = 'Q';
  30419. points.push(ctlPtx, ctlPty, cpx, cpy);
  30420. break;
  30421. case 't':
  30422. ctlPtx = cpx, ctlPty = cpy;
  30423. prevCmd = ca[ca.length - 1];
  30424. if (prevCmd.command === 'Q') {
  30425. ctlPtx = cpx + (cpx - prevCmd.points[0]);
  30426. ctlPty = cpy + (cpy - prevCmd.points[1]);
  30427. }
  30428. cpx += p.shift();
  30429. cpy += p.shift();
  30430. cmd = 'Q';
  30431. points.push(ctlPtx, ctlPty, cpx, cpy);
  30432. break;
  30433. case 'A':
  30434. rx = p.shift();
  30435. ry = p.shift();
  30436. psi = p.shift();
  30437. fa = p.shift();
  30438. fs = p.shift();
  30439. x1 = cpx, y1 = cpy;
  30440. cpx = p.shift(), cpy = p.shift();
  30441. cmd = 'A';
  30442. points = this._convertPoint(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);
  30443. break;
  30444. case 'a':
  30445. rx = p.shift();
  30446. ry = p.shift();
  30447. psi = p.shift();
  30448. fa = p.shift();
  30449. fs = p.shift();
  30450. x1 = cpx, y1 = cpy;
  30451. cpx += p.shift();
  30452. cpy += p.shift();
  30453. cmd = 'A';
  30454. points = this._convertPoint(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);
  30455. break;
  30456. }
  30457. for (var j = 0, l = points.length; j < l; j += 2) {
  30458. points[j] += x;
  30459. points[j + 1] += y;
  30460. }
  30461. ca.push(new PathSegment(cmd || c, points));
  30462. }
  30463. if (c === 'z' || c === 'Z') {
  30464. ca.push(new PathSegment('z', []));
  30465. }
  30466. }
  30467. return ca;
  30468. },
  30469. _convertPoint: function (x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {
  30470. var psi = psiDeg * (Math.PI / 180);
  30471. var xp = Math.cos(psi) * (x1 - x2) / 2 + Math.sin(psi) * (y1 - y2) / 2;
  30472. var yp = -1 * Math.sin(psi) * (x1 - x2) / 2 + Math.cos(psi) * (y1 - y2) / 2;
  30473. var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);
  30474. if (lambda > 1) {
  30475. rx *= Math.sqrt(lambda);
  30476. ry *= Math.sqrt(lambda);
  30477. }
  30478. var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp)));
  30479. if (fa === fs) {
  30480. f *= -1;
  30481. }
  30482. if (isNaN(f)) {
  30483. f = 0;
  30484. }
  30485. var cxp = f * rx * yp / ry;
  30486. var cyp = f * -ry * xp / rx;
  30487. var cx = (x1 + x2) / 2 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
  30488. var cy = (y1 + y2) / 2 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
  30489. var theta = vAngle([
  30490. 1,
  30491. 0
  30492. ], [
  30493. (xp - cxp) / rx,
  30494. (yp - cyp) / ry
  30495. ]);
  30496. var u = [
  30497. (xp - cxp) / rx,
  30498. (yp - cyp) / ry
  30499. ];
  30500. var v = [
  30501. (-1 * xp - cxp) / rx,
  30502. (-1 * yp - cyp) / ry
  30503. ];
  30504. var dTheta = vAngle(u, v);
  30505. if (vRatio(u, v) <= -1) {
  30506. dTheta = Math.PI;
  30507. }
  30508. if (vRatio(u, v) >= 1) {
  30509. dTheta = 0;
  30510. }
  30511. if (fs === 0 && dTheta > 0) {
  30512. dTheta = dTheta - 2 * Math.PI;
  30513. }
  30514. if (fs === 1 && dTheta < 0) {
  30515. dTheta = dTheta + 2 * Math.PI;
  30516. }
  30517. return [
  30518. cx,
  30519. cy,
  30520. rx,
  30521. ry,
  30522. theta,
  30523. dTheta,
  30524. psi,
  30525. fs
  30526. ];
  30527. },
  30528. buildPath: function (ctx, style) {
  30529. var path = style.path;
  30530. var x = style.x || 0;
  30531. var y = style.y || 0;
  30532. style.pathArray = style.pathArray || this.buildPathArray(path, x, y);
  30533. var pathArray = style.pathArray;
  30534. var pointList = style.pointList = [];
  30535. var singlePointList = [];
  30536. for (var i = 0, l = pathArray.length; i < l; i++) {
  30537. if (pathArray[i].command.toUpperCase() == 'M') {
  30538. singlePointList.length > 0 && pointList.push(singlePointList);
  30539. singlePointList = [];
  30540. }
  30541. var p = pathArray[i].points;
  30542. for (var j = 0, k = p.length; j < k; j += 2) {
  30543. singlePointList.push([
  30544. p[j],
  30545. p[j + 1]
  30546. ]);
  30547. }
  30548. }
  30549. singlePointList.length > 0 && pointList.push(singlePointList);
  30550. for (var i = 0, l = pathArray.length; i < l; i++) {
  30551. var c = pathArray[i].command;
  30552. var p = pathArray[i].points;
  30553. switch (c) {
  30554. case 'L':
  30555. ctx.lineTo(p[0], p[1]);
  30556. break;
  30557. case 'M':
  30558. ctx.moveTo(p[0], p[1]);
  30559. break;
  30560. case 'C':
  30561. ctx.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]);
  30562. break;
  30563. case 'Q':
  30564. ctx.quadraticCurveTo(p[0], p[1], p[2], p[3]);
  30565. break;
  30566. case 'A':
  30567. var cx = p[0];
  30568. var cy = p[1];
  30569. var rx = p[2];
  30570. var ry = p[3];
  30571. var theta = p[4];
  30572. var dTheta = p[5];
  30573. var psi = p[6];
  30574. var fs = p[7];
  30575. var r = rx > ry ? rx : ry;
  30576. var scaleX = rx > ry ? 1 : rx / ry;
  30577. var scaleY = rx > ry ? ry / rx : 1;
  30578. ctx.translate(cx, cy);
  30579. ctx.rotate(psi);
  30580. ctx.scale(scaleX, scaleY);
  30581. ctx.arc(0, 0, r, theta, theta + dTheta, 1 - fs);
  30582. ctx.scale(1 / scaleX, 1 / scaleY);
  30583. ctx.rotate(-psi);
  30584. ctx.translate(-cx, -cy);
  30585. break;
  30586. case 'z':
  30587. ctx.closePath();
  30588. break;
  30589. }
  30590. }
  30591. return;
  30592. },
  30593. getRect: function (style) {
  30594. if (style.__rect) {
  30595. return style.__rect;
  30596. }
  30597. var lineWidth;
  30598. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  30599. lineWidth = style.lineWidth || 1;
  30600. } else {
  30601. lineWidth = 0;
  30602. }
  30603. var minX = Number.MAX_VALUE;
  30604. var maxX = Number.MIN_VALUE;
  30605. var minY = Number.MAX_VALUE;
  30606. var maxY = Number.MIN_VALUE;
  30607. var x = style.x || 0;
  30608. var y = style.y || 0;
  30609. var pathArray = style.pathArray || this.buildPathArray(style.path);
  30610. for (var i = 0; i < pathArray.length; i++) {
  30611. var p = pathArray[i].points;
  30612. for (var j = 0; j < p.length; j++) {
  30613. if (j % 2 === 0) {
  30614. if (p[j] + x < minX) {
  30615. minX = p[j];
  30616. }
  30617. if (p[j] + x > maxX) {
  30618. maxX = p[j];
  30619. }
  30620. } else {
  30621. if (p[j] + y < minY) {
  30622. minY = p[j];
  30623. }
  30624. if (p[j] + y > maxY) {
  30625. maxY = p[j];
  30626. }
  30627. }
  30628. }
  30629. }
  30630. var rect;
  30631. if (minX === Number.MAX_VALUE || maxX === Number.MIN_VALUE || minY === Number.MAX_VALUE || maxY === Number.MIN_VALUE) {
  30632. rect = {
  30633. x: 0,
  30634. y: 0,
  30635. width: 0,
  30636. height: 0
  30637. };
  30638. } else {
  30639. rect = {
  30640. x: Math.round(minX - lineWidth / 2),
  30641. y: Math.round(minY - lineWidth / 2),
  30642. width: maxX - minX + lineWidth,
  30643. height: maxY - minY + lineWidth
  30644. };
  30645. }
  30646. style.__rect = rect;
  30647. return rect;
  30648. }
  30649. };
  30650. require('../tool/util').inherits(Path, Base);
  30651. return Path;
  30652. });define('zrender/shape/Ellipse', [
  30653. 'require',
  30654. './Base',
  30655. '../tool/util'
  30656. ], function (require) {
  30657. var Base = require('./Base');
  30658. var Ellipse = function (options) {
  30659. Base.call(this, options);
  30660. };
  30661. Ellipse.prototype = {
  30662. type: 'ellipse',
  30663. buildPath: function (ctx, style) {
  30664. var k = 0.5522848;
  30665. var x = style.x;
  30666. var y = style.y;
  30667. var a = style.a;
  30668. var b = style.b;
  30669. var ox = a * k;
  30670. var oy = b * k;
  30671. ctx.moveTo(x - a, y);
  30672. ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
  30673. ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
  30674. ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
  30675. ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
  30676. ctx.closePath();
  30677. },
  30678. getRect: function (style) {
  30679. if (style.__rect) {
  30680. return style.__rect;
  30681. }
  30682. var lineWidth;
  30683. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  30684. lineWidth = style.lineWidth || 1;
  30685. } else {
  30686. lineWidth = 0;
  30687. }
  30688. style.__rect = {
  30689. x: Math.round(style.x - style.a - lineWidth / 2),
  30690. y: Math.round(style.y - style.b - lineWidth / 2),
  30691. width: style.a * 2 + lineWidth,
  30692. height: style.b * 2 + lineWidth
  30693. };
  30694. return style.__rect;
  30695. }
  30696. };
  30697. require('../tool/util').inherits(Ellipse, Base);
  30698. return Ellipse;
  30699. });define('echarts/component/roamController', [
  30700. 'require',
  30701. './base',
  30702. 'zrender/shape/Rectangle',
  30703. 'zrender/shape/Sector',
  30704. 'zrender/shape/Circle',
  30705. '../config',
  30706. 'zrender/tool/util',
  30707. 'zrender/tool/color',
  30708. 'zrender/tool/event',
  30709. '../component'
  30710. ], function (require) {
  30711. var Base = require('./base');
  30712. var RectangleShape = require('zrender/shape/Rectangle');
  30713. var SectorShape = require('zrender/shape/Sector');
  30714. var CircleShape = require('zrender/shape/Circle');
  30715. var ecConfig = require('../config');
  30716. ecConfig.roamController = {
  30717. zlevel: 0,
  30718. z: 4,
  30719. show: true,
  30720. x: 'left',
  30721. y: 'top',
  30722. width: 80,
  30723. height: 120,
  30724. backgroundColor: 'rgba(0,0,0,0)',
  30725. borderColor: '#ccc',
  30726. borderWidth: 0,
  30727. padding: 5,
  30728. handleColor: '#6495ed',
  30729. fillerColor: '#fff',
  30730. step: 15,
  30731. mapTypeControl: null
  30732. };
  30733. var zrUtil = require('zrender/tool/util');
  30734. var zrColor = require('zrender/tool/color');
  30735. var zrEvent = require('zrender/tool/event');
  30736. function RoamController(ecTheme, messageCenter, zr, option, myChart) {
  30737. if (!option.roamController || !option.roamController.show) {
  30738. return;
  30739. }
  30740. if (!option.roamController.mapTypeControl) {
  30741. console.error('option.roamController.mapTypeControl has not been defined.');
  30742. return;
  30743. }
  30744. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  30745. this.rcOption = option.roamController;
  30746. var self = this;
  30747. this._drictionMouseDown = function (params) {
  30748. return self.__drictionMouseDown(params);
  30749. };
  30750. this._drictionMouseUp = function (params) {
  30751. return self.__drictionMouseUp(params);
  30752. };
  30753. this._drictionMouseMove = function (params) {
  30754. return self.__drictionMouseMove(params);
  30755. };
  30756. this._drictionMouseOut = function (params) {
  30757. return self.__drictionMouseOut(params);
  30758. };
  30759. this._scaleHandler = function (params) {
  30760. return self.__scaleHandler(params);
  30761. };
  30762. this.refresh(option);
  30763. }
  30764. RoamController.prototype = {
  30765. type: ecConfig.COMPONENT_TYPE_ROAMCONTROLLER,
  30766. _buildShape: function () {
  30767. if (!this.rcOption.show) {
  30768. return;
  30769. }
  30770. this._itemGroupLocation = this._getItemGroupLocation();
  30771. this._buildBackground();
  30772. this._buildItem();
  30773. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30774. this.zr.addShape(this.shapeList[i]);
  30775. }
  30776. },
  30777. _buildItem: function () {
  30778. this.shapeList.push(this._getDirectionShape('up'));
  30779. this.shapeList.push(this._getDirectionShape('down'));
  30780. this.shapeList.push(this._getDirectionShape('left'));
  30781. this.shapeList.push(this._getDirectionShape('right'));
  30782. this.shapeList.push(this._getScaleShape('scaleUp'));
  30783. this.shapeList.push(this._getScaleShape('scaleDown'));
  30784. },
  30785. _getDirectionShape: function (direction) {
  30786. var r = this._itemGroupLocation.r;
  30787. var x = this._itemGroupLocation.x + r;
  30788. var y = this._itemGroupLocation.y + r;
  30789. var sectorShape = {
  30790. zlevel: this.getZlevelBase(),
  30791. z: this.getZBase(),
  30792. style: {
  30793. x: x,
  30794. y: y,
  30795. r: r,
  30796. startAngle: -45,
  30797. endAngle: 45,
  30798. color: this.rcOption.handleColor,
  30799. text: '>',
  30800. textX: x + r / 2 + 4,
  30801. textY: y - 0.5,
  30802. textAlign: 'center',
  30803. textBaseline: 'middle',
  30804. textPosition: 'specific',
  30805. textColor: this.rcOption.fillerColor,
  30806. textFont: Math.floor(r / 2) + 'px arial'
  30807. },
  30808. highlightStyle: {
  30809. color: zrColor.lift(this.rcOption.handleColor, -0.2),
  30810. brushType: 'fill'
  30811. },
  30812. clickable: true
  30813. };
  30814. switch (direction) {
  30815. case 'up':
  30816. sectorShape.rotation = [
  30817. Math.PI / 2,
  30818. x,
  30819. y
  30820. ];
  30821. break;
  30822. case 'left':
  30823. sectorShape.rotation = [
  30824. Math.PI,
  30825. x,
  30826. y
  30827. ];
  30828. break;
  30829. case 'down':
  30830. sectorShape.rotation = [
  30831. -Math.PI / 2,
  30832. x,
  30833. y
  30834. ];
  30835. break;
  30836. }
  30837. sectorShape = new SectorShape(sectorShape);
  30838. sectorShape._roamType = direction;
  30839. sectorShape.onmousedown = this._drictionMouseDown;
  30840. sectorShape.onmouseup = this._drictionMouseUp;
  30841. sectorShape.onmousemove = this._drictionMouseMove;
  30842. sectorShape.onmouseout = this._drictionMouseOut;
  30843. return sectorShape;
  30844. },
  30845. _getScaleShape: function (text) {
  30846. var width = this._itemGroupLocation.width;
  30847. var height = this._itemGroupLocation.height - width;
  30848. height = height < 0 ? 20 : height;
  30849. var r = Math.min(width / 2 - 5, height) / 2;
  30850. var x = this._itemGroupLocation.x + (text === 'scaleDown' ? width - r : r);
  30851. var y = this._itemGroupLocation.y + this._itemGroupLocation.height - r;
  30852. var scaleShape = {
  30853. zlevel: this.getZlevelBase(),
  30854. z: this.getZBase(),
  30855. style: {
  30856. x: x,
  30857. y: y,
  30858. r: r,
  30859. color: this.rcOption.handleColor,
  30860. text: text === 'scaleDown' ? '-' : '+',
  30861. textX: x,
  30862. textY: y - 2,
  30863. textAlign: 'center',
  30864. textBaseline: 'middle',
  30865. textPosition: 'specific',
  30866. textColor: this.rcOption.fillerColor,
  30867. textFont: Math.floor(r) + 'px verdana'
  30868. },
  30869. highlightStyle: {
  30870. color: zrColor.lift(this.rcOption.handleColor, -0.2),
  30871. brushType: 'fill'
  30872. },
  30873. clickable: true
  30874. };
  30875. scaleShape = new CircleShape(scaleShape);
  30876. scaleShape._roamType = text;
  30877. scaleShape.onmousedown = this._scaleHandler;
  30878. return scaleShape;
  30879. },
  30880. _buildBackground: function () {
  30881. var padding = this.reformCssArray(this.rcOption.padding);
  30882. this.shapeList.push(new RectangleShape({
  30883. zlevel: this.getZlevelBase(),
  30884. z: this.getZBase(),
  30885. hoverable: false,
  30886. style: {
  30887. x: this._itemGroupLocation.x - padding[3],
  30888. y: this._itemGroupLocation.y - padding[0],
  30889. width: this._itemGroupLocation.width + padding[3] + padding[1],
  30890. height: this._itemGroupLocation.height + padding[0] + padding[2],
  30891. brushType: this.rcOption.borderWidth === 0 ? 'fill' : 'both',
  30892. color: this.rcOption.backgroundColor,
  30893. strokeColor: this.rcOption.borderColor,
  30894. lineWidth: this.rcOption.borderWidth
  30895. }
  30896. }));
  30897. },
  30898. _getItemGroupLocation: function () {
  30899. var padding = this.reformCssArray(this.rcOption.padding);
  30900. var width = this.rcOption.width;
  30901. var height = this.rcOption.height;
  30902. var zrWidth = this.zr.getWidth();
  30903. var zrHeight = this.zr.getHeight();
  30904. var x;
  30905. switch (this.rcOption.x) {
  30906. case 'center':
  30907. x = Math.floor((zrWidth - width) / 2);
  30908. break;
  30909. case 'left':
  30910. x = padding[3] + this.rcOption.borderWidth;
  30911. break;
  30912. case 'right':
  30913. x = zrWidth - width - padding[1] - padding[3] - this.rcOption.borderWidth * 2;
  30914. break;
  30915. default:
  30916. x = this.parsePercent(this.rcOption.x, zrWidth);
  30917. break;
  30918. }
  30919. var y;
  30920. switch (this.rcOption.y) {
  30921. case 'top':
  30922. y = padding[0] + this.rcOption.borderWidth;
  30923. break;
  30924. case 'bottom':
  30925. y = zrHeight - height - padding[0] - padding[2] - this.rcOption.borderWidth * 2;
  30926. break;
  30927. case 'center':
  30928. y = Math.floor((zrHeight - height) / 2);
  30929. break;
  30930. default:
  30931. y = this.parsePercent(this.rcOption.y, zrHeight);
  30932. break;
  30933. }
  30934. return {
  30935. x: x,
  30936. y: y,
  30937. r: width / 2,
  30938. width: width,
  30939. height: height
  30940. };
  30941. },
  30942. __drictionMouseDown: function (params) {
  30943. this.mousedown = true;
  30944. this._drictionHandlerOn(params);
  30945. },
  30946. __drictionMouseUp: function (params) {
  30947. this.mousedown = false;
  30948. this._drictionHandlerOff(params);
  30949. },
  30950. __drictionMouseMove: function (params) {
  30951. if (this.mousedown) {
  30952. this._drictionHandlerOn(params);
  30953. }
  30954. },
  30955. __drictionMouseOut: function (params) {
  30956. this._drictionHandlerOff(params);
  30957. },
  30958. _drictionHandlerOn: function (params) {
  30959. this._dispatchEvent(params.event, params.target._roamType);
  30960. clearInterval(this.dircetionTimer);
  30961. var self = this;
  30962. this.dircetionTimer = setInterval(function () {
  30963. self._dispatchEvent(params.event, params.target._roamType);
  30964. }, 100);
  30965. zrEvent.stop(params.event);
  30966. },
  30967. _drictionHandlerOff: function (params) {
  30968. clearInterval(this.dircetionTimer);
  30969. },
  30970. __scaleHandler: function (params) {
  30971. this._dispatchEvent(params.event, params.target._roamType);
  30972. zrEvent.stop(params.event);
  30973. },
  30974. _dispatchEvent: function (event, roamType) {
  30975. this.messageCenter.dispatch(ecConfig.EVENT.ROAMCONTROLLER, event, {
  30976. roamType: roamType,
  30977. mapTypeControl: this.rcOption.mapTypeControl,
  30978. step: this.rcOption.step
  30979. }, this.myChart);
  30980. },
  30981. refresh: function (newOption) {
  30982. if (newOption) {
  30983. this.option = newOption || this.option;
  30984. this.option.roamController = this.reformOption(this.option.roamController);
  30985. this.rcOption = this.option.roamController;
  30986. }
  30987. this.clear();
  30988. this._buildShape();
  30989. }
  30990. };
  30991. zrUtil.inherits(RoamController, Base);
  30992. require('../component').define('roamController', RoamController);
  30993. return RoamController;
  30994. });define('echarts/util/mapData/params', ['require'], function (require) {
  30995. function decode(json) {
  30996. if (!json.UTF8Encoding) {
  30997. return json;
  30998. }
  30999. var features = json.features;
  31000. for (var f = 0; f < features.length; f++) {
  31001. var feature = features[f];
  31002. var coordinates = feature.geometry.coordinates;
  31003. var encodeOffsets = feature.geometry.encodeOffsets;
  31004. for (var c = 0; c < coordinates.length; c++) {
  31005. var coordinate = coordinates[c];
  31006. if (feature.geometry.type === 'Polygon') {
  31007. coordinates[c] = decodePolygon(coordinate, encodeOffsets[c]);
  31008. } else if (feature.geometry.type === 'MultiPolygon') {
  31009. for (var c2 = 0; c2 < coordinate.length; c2++) {
  31010. var polygon = coordinate[c2];
  31011. coordinate[c2] = decodePolygon(polygon, encodeOffsets[c][c2]);
  31012. }
  31013. }
  31014. }
  31015. }
  31016. json.UTF8Encoding = false;
  31017. return json;
  31018. }
  31019. function decodePolygon(coordinate, encodeOffsets) {
  31020. var result = [];
  31021. var prevX = encodeOffsets[0];
  31022. var prevY = encodeOffsets[1];
  31023. for (var i = 0; i < coordinate.length; i += 2) {
  31024. var x = coordinate.charCodeAt(i) - 64;
  31025. var y = coordinate.charCodeAt(i + 1) - 64;
  31026. x = x >> 1 ^ -(x & 1);
  31027. y = y >> 1 ^ -(y & 1);
  31028. x += prevX;
  31029. y += prevY;
  31030. prevX = x;
  31031. prevY = y;
  31032. result.push([
  31033. x / 1024,
  31034. y / 1024
  31035. ]);
  31036. }
  31037. return result;
  31038. }
  31039. var mapParams = {
  31040. 'none': {
  31041. getGeoJson: function (callback) {
  31042. callback({
  31043. type: 'FeatureCollection',
  31044. features: [{
  31045. type: 'Feature',
  31046. geometry: {
  31047. coordinates: [],
  31048. encodeOffsets: [],
  31049. type: 'Polygon'
  31050. },
  31051. properties: {}
  31052. }]
  31053. });
  31054. }
  31055. },
  31056. 'world': {
  31057. getGeoJson: function (callback) {
  31058. require(['./geoJson/world_geo'], function (md) {
  31059. callback(decode(md));
  31060. });
  31061. }
  31062. },
  31063. 'china': {
  31064. getGeoJson: function (callback) {
  31065. require(['./geoJson/china_geo'], function (md) {
  31066. callback(decode(md));
  31067. });
  31068. }
  31069. },
  31070. '南海诸岛': {
  31071. textCoord: [
  31072. 126,
  31073. 25
  31074. ],
  31075. getPath: function (leftTop, scale) {
  31076. var pList = [
  31077. [
  31078. [
  31079. 0,
  31080. 3.5
  31081. ],
  31082. [
  31083. 7,
  31084. 11.2
  31085. ],
  31086. [
  31087. 15,
  31088. 11.9
  31089. ],
  31090. [
  31091. 30,
  31092. 7
  31093. ],
  31094. [
  31095. 42,
  31096. 0.7
  31097. ],
  31098. [
  31099. 52,
  31100. 0.7
  31101. ],
  31102. [
  31103. 56,
  31104. 7.7
  31105. ],
  31106. [
  31107. 59,
  31108. 0.7
  31109. ],
  31110. [
  31111. 64,
  31112. 0.7
  31113. ],
  31114. [
  31115. 64,
  31116. 0
  31117. ],
  31118. [
  31119. 5,
  31120. 0
  31121. ],
  31122. [
  31123. 0,
  31124. 3.5
  31125. ]
  31126. ],
  31127. [
  31128. [
  31129. 13,
  31130. 16.1
  31131. ],
  31132. [
  31133. 19,
  31134. 14.7
  31135. ],
  31136. [
  31137. 16,
  31138. 21.7
  31139. ],
  31140. [
  31141. 11,
  31142. 23.1
  31143. ],
  31144. [
  31145. 13,
  31146. 16.1
  31147. ]
  31148. ],
  31149. [
  31150. [
  31151. 12,
  31152. 32.2
  31153. ],
  31154. [
  31155. 14,
  31156. 38.5
  31157. ],
  31158. [
  31159. 15,
  31160. 38.5
  31161. ],
  31162. [
  31163. 13,
  31164. 32.2
  31165. ],
  31166. [
  31167. 12,
  31168. 32.2
  31169. ]
  31170. ],
  31171. [
  31172. [
  31173. 16,
  31174. 47.6
  31175. ],
  31176. [
  31177. 12,
  31178. 53.2
  31179. ],
  31180. [
  31181. 13,
  31182. 53.2
  31183. ],
  31184. [
  31185. 18,
  31186. 47.6
  31187. ],
  31188. [
  31189. 16,
  31190. 47.6
  31191. ]
  31192. ],
  31193. [
  31194. [
  31195. 6,
  31196. 64.4
  31197. ],
  31198. [
  31199. 8,
  31200. 70
  31201. ],
  31202. [
  31203. 9,
  31204. 70
  31205. ],
  31206. [
  31207. 8,
  31208. 64.4
  31209. ],
  31210. [
  31211. 6,
  31212. 64.4
  31213. ]
  31214. ],
  31215. [
  31216. [
  31217. 23,
  31218. 82.6
  31219. ],
  31220. [
  31221. 29,
  31222. 79.8
  31223. ],
  31224. [
  31225. 30,
  31226. 79.8
  31227. ],
  31228. [
  31229. 25,
  31230. 82.6
  31231. ],
  31232. [
  31233. 23,
  31234. 82.6
  31235. ]
  31236. ],
  31237. [
  31238. [
  31239. 37,
  31240. 70.7
  31241. ],
  31242. [
  31243. 43,
  31244. 62.3
  31245. ],
  31246. [
  31247. 44,
  31248. 62.3
  31249. ],
  31250. [
  31251. 39,
  31252. 70.7
  31253. ],
  31254. [
  31255. 37,
  31256. 70.7
  31257. ]
  31258. ],
  31259. [
  31260. [
  31261. 48,
  31262. 51.1
  31263. ],
  31264. [
  31265. 51,
  31266. 45.5
  31267. ],
  31268. [
  31269. 53,
  31270. 45.5
  31271. ],
  31272. [
  31273. 50,
  31274. 51.1
  31275. ],
  31276. [
  31277. 48,
  31278. 51.1
  31279. ]
  31280. ],
  31281. [
  31282. [
  31283. 51,
  31284. 35
  31285. ],
  31286. [
  31287. 51,
  31288. 28.7
  31289. ],
  31290. [
  31291. 53,
  31292. 28.7
  31293. ],
  31294. [
  31295. 53,
  31296. 35
  31297. ],
  31298. [
  31299. 51,
  31300. 35
  31301. ]
  31302. ],
  31303. [
  31304. [
  31305. 52,
  31306. 22.4
  31307. ],
  31308. [
  31309. 55,
  31310. 17.5
  31311. ],
  31312. [
  31313. 56,
  31314. 17.5
  31315. ],
  31316. [
  31317. 53,
  31318. 22.4
  31319. ],
  31320. [
  31321. 52,
  31322. 22.4
  31323. ]
  31324. ],
  31325. [
  31326. [
  31327. 58,
  31328. 12.6
  31329. ],
  31330. [
  31331. 62,
  31332. 7
  31333. ],
  31334. [
  31335. 63,
  31336. 7
  31337. ],
  31338. [
  31339. 60,
  31340. 12.6
  31341. ],
  31342. [
  31343. 58,
  31344. 12.6
  31345. ]
  31346. ],
  31347. [
  31348. [
  31349. 0,
  31350. 3.5
  31351. ],
  31352. [
  31353. 0,
  31354. 93.1
  31355. ],
  31356. [
  31357. 64,
  31358. 93.1
  31359. ],
  31360. [
  31361. 64,
  31362. 0
  31363. ],
  31364. [
  31365. 63,
  31366. 0
  31367. ],
  31368. [
  31369. 63,
  31370. 92.4
  31371. ],
  31372. [
  31373. 1,
  31374. 92.4
  31375. ],
  31376. [
  31377. 1,
  31378. 3.5
  31379. ],
  31380. [
  31381. 0,
  31382. 3.5
  31383. ]
  31384. ]
  31385. ];
  31386. var str = '';
  31387. var left = leftTop[0];
  31388. var top = leftTop[1];
  31389. for (var i = 0, l = pList.length; i < l; i++) {
  31390. str += 'M ' + ((pList[i][0][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][0][1] * scale + top).toFixed(2) - 0) + ' ';
  31391. for (var j = 1, k = pList[i].length; j < k; j++) {
  31392. str += 'L ' + ((pList[i][j][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][j][1] * scale + top).toFixed(2) - 0) + ' ';
  31393. }
  31394. }
  31395. return str + ' Z';
  31396. }
  31397. },
  31398. '新疆': {
  31399. getGeoJson: function (callback) {
  31400. require(['./geoJson/xin_jiang_geo'], function (md) {
  31401. callback(decode(md));
  31402. });
  31403. }
  31404. },
  31405. '西藏': {
  31406. getGeoJson: function (callback) {
  31407. require(['./geoJson/xi_zang_geo'], function (md) {
  31408. callback(decode(md));
  31409. });
  31410. }
  31411. },
  31412. '内蒙古': {
  31413. getGeoJson: function (callback) {
  31414. require(['./geoJson/nei_meng_gu_geo'], function (md) {
  31415. callback(decode(md));
  31416. });
  31417. }
  31418. },
  31419. '青海': {
  31420. getGeoJson: function (callback) {
  31421. require(['./geoJson/qing_hai_geo'], function (md) {
  31422. callback(decode(md));
  31423. });
  31424. }
  31425. },
  31426. '四川': {
  31427. getGeoJson: function (callback) {
  31428. require(['./geoJson/si_chuan_geo'], function (md) {
  31429. callback(decode(md));
  31430. });
  31431. }
  31432. },
  31433. '黑龙江': {
  31434. getGeoJson: function (callback) {
  31435. require(['./geoJson/hei_long_jiang_geo'], function (md) {
  31436. callback(decode(md));
  31437. });
  31438. }
  31439. },
  31440. '甘肃': {
  31441. getGeoJson: function (callback) {
  31442. require(['./geoJson/gan_su_geo'], function (md) {
  31443. callback(decode(md));
  31444. });
  31445. }
  31446. },
  31447. '云南': {
  31448. getGeoJson: function (callback) {
  31449. require(['./geoJson/yun_nan_geo'], function (md) {
  31450. callback(decode(md));
  31451. });
  31452. }
  31453. },
  31454. '广西': {
  31455. getGeoJson: function (callback) {
  31456. require(['./geoJson/guang_xi_geo'], function (md) {
  31457. callback(decode(md));
  31458. });
  31459. }
  31460. },
  31461. '湖南': {
  31462. getGeoJson: function (callback) {
  31463. require(['./geoJson/hu_nan_geo'], function (md) {
  31464. callback(decode(md));
  31465. });
  31466. }
  31467. },
  31468. '陕西': {
  31469. getGeoJson: function (callback) {
  31470. require(['./geoJson/shan_xi_1_geo'], function (md) {
  31471. callback(decode(md));
  31472. });
  31473. }
  31474. },
  31475. '广东': {
  31476. getGeoJson: function (callback) {
  31477. require(['./geoJson/guang_dong_geo'], function (md) {
  31478. callback(decode(md));
  31479. });
  31480. }
  31481. },
  31482. '吉林': {
  31483. getGeoJson: function (callback) {
  31484. require(['./geoJson/ji_lin_geo'], function (md) {
  31485. callback(decode(md));
  31486. });
  31487. }
  31488. },
  31489. '河北': {
  31490. getGeoJson: function (callback) {
  31491. require(['./geoJson/he_bei_geo'], function (md) {
  31492. callback(decode(md));
  31493. });
  31494. }
  31495. },
  31496. '湖北': {
  31497. getGeoJson: function (callback) {
  31498. require(['./geoJson/hu_bei_geo'], function (md) {
  31499. callback(decode(md));
  31500. });
  31501. }
  31502. },
  31503. '贵州': {
  31504. getGeoJson: function (callback) {
  31505. require(['./geoJson/gui_zhou_geo'], function (md) {
  31506. callback(decode(md));
  31507. });
  31508. }
  31509. },
  31510. '山东': {
  31511. getGeoJson: function (callback) {
  31512. require(['./geoJson/shan_dong_geo'], function (md) {
  31513. callback(decode(md));
  31514. });
  31515. }
  31516. },
  31517. '江西': {
  31518. getGeoJson: function (callback) {
  31519. require(['./geoJson/jiang_xi_geo'], function (md) {
  31520. callback(decode(md));
  31521. });
  31522. }
  31523. },
  31524. '河南': {
  31525. getGeoJson: function (callback) {
  31526. require(['./geoJson/he_nan_geo'], function (md) {
  31527. callback(decode(md));
  31528. });
  31529. }
  31530. },
  31531. '辽宁': {
  31532. getGeoJson: function (callback) {
  31533. require(['./geoJson/liao_ning_geo'], function (md) {
  31534. callback(decode(md));
  31535. });
  31536. }
  31537. },
  31538. '山西': {
  31539. getGeoJson: function (callback) {
  31540. require(['./geoJson/shan_xi_2_geo'], function (md) {
  31541. callback(decode(md));
  31542. });
  31543. }
  31544. },
  31545. '安徽': {
  31546. getGeoJson: function (callback) {
  31547. require(['./geoJson/an_hui_geo'], function (md) {
  31548. callback(decode(md));
  31549. });
  31550. }
  31551. },
  31552. '福建': {
  31553. getGeoJson: function (callback) {
  31554. require(['./geoJson/fu_jian_geo'], function (md) {
  31555. callback(decode(md));
  31556. });
  31557. }
  31558. },
  31559. '浙江': {
  31560. getGeoJson: function (callback) {
  31561. require(['./geoJson/zhe_jiang_geo'], function (md) {
  31562. callback(decode(md));
  31563. });
  31564. }
  31565. },
  31566. '江苏': {
  31567. getGeoJson: function (callback) {
  31568. require(['./geoJson/jiang_su_geo'], function (md) {
  31569. callback(decode(md));
  31570. });
  31571. }
  31572. },
  31573. '重庆': {
  31574. getGeoJson: function (callback) {
  31575. require(['./geoJson/chong_qing_geo'], function (md) {
  31576. callback(decode(md));
  31577. });
  31578. }
  31579. },
  31580. '宁夏': {
  31581. getGeoJson: function (callback) {
  31582. require(['./geoJson/ning_xia_geo'], function (md) {
  31583. callback(decode(md));
  31584. });
  31585. }
  31586. },
  31587. '海南': {
  31588. getGeoJson: function (callback) {
  31589. require(['./geoJson/hai_nan_geo'], function (md) {
  31590. callback(decode(md));
  31591. });
  31592. }
  31593. },
  31594. '台湾': {
  31595. getGeoJson: function (callback) {
  31596. require(['./geoJson/tai_wan_geo'], function (md) {
  31597. callback(decode(md));
  31598. });
  31599. }
  31600. },
  31601. '北京': {
  31602. getGeoJson: function (callback) {
  31603. require(['./geoJson/bei_jing_geo'], function (md) {
  31604. callback(decode(md));
  31605. });
  31606. }
  31607. },
  31608. '天津': {
  31609. getGeoJson: function (callback) {
  31610. require(['./geoJson/tian_jin_geo'], function (md) {
  31611. callback(decode(md));
  31612. });
  31613. }
  31614. },
  31615. '上海': {
  31616. getGeoJson: function (callback) {
  31617. require(['./geoJson/shang_hai_geo'], function (md) {
  31618. callback(decode(md));
  31619. });
  31620. }
  31621. },
  31622. '香港': {
  31623. getGeoJson: function (callback) {
  31624. require(['./geoJson/xiang_gang_geo'], function (md) {
  31625. callback(decode(md));
  31626. });
  31627. }
  31628. },
  31629. '澳门': {
  31630. getGeoJson: function (callback) {
  31631. require(['./geoJson/ao_men_geo'], function (md) {
  31632. callback(decode(md));
  31633. });
  31634. }
  31635. }
  31636. };
  31637. return {
  31638. decode: decode,
  31639. params: mapParams
  31640. };
  31641. });define('echarts/util/mapData/textFixed', [], function () {
  31642. return {
  31643. '广东': [
  31644. 0,
  31645. -10
  31646. ],
  31647. '香港': [
  31648. 10,
  31649. 10
  31650. ],
  31651. '澳门': [
  31652. -10,
  31653. 18
  31654. ],
  31655. '黑龙江': [
  31656. 0,
  31657. 20
  31658. ],
  31659. '天津': [
  31660. 5,
  31661. 5
  31662. ],
  31663. '深圳市': [
  31664. -35,
  31665. 0
  31666. ],
  31667. '红河哈尼族彝族自治州': [
  31668. 0,
  31669. 20
  31670. ],
  31671. '楚雄彝族自治州': [
  31672. -5,
  31673. 15
  31674. ],
  31675. '石河子市': [
  31676. -5,
  31677. 5
  31678. ],
  31679. '五家渠市': [
  31680. 0,
  31681. -10
  31682. ],
  31683. '昌吉回族自治州': [
  31684. 10,
  31685. 10
  31686. ],
  31687. '昌江黎族自治县': [
  31688. 0,
  31689. 20
  31690. ],
  31691. '陵水黎族自治县': [
  31692. 0,
  31693. 20
  31694. ],
  31695. '东方市': [
  31696. 0,
  31697. 20
  31698. ],
  31699. '渭南市': [
  31700. 0,
  31701. 20
  31702. ]
  31703. };
  31704. });define('echarts/util/mapData/geoCoord', [], function () {
  31705. return {
  31706. 'Russia': [
  31707. 100,
  31708. 60
  31709. ],
  31710. 'United States of America': [
  31711. -99,
  31712. 38
  31713. ]
  31714. };
  31715. });define('echarts/util/projection/svg', [
  31716. 'require',
  31717. 'zrender/shape/Path'
  31718. ], function (require) {
  31719. var PathShape = require('zrender/shape/Path');
  31720. function toFloat(str) {
  31721. return parseFloat(str || 0);
  31722. }
  31723. function getBbox(root) {
  31724. var svgNode = root.firstChild;
  31725. while (!(svgNode.nodeName.toLowerCase() == 'svg' && svgNode.nodeType == 1)) {
  31726. svgNode = svgNode.nextSibling;
  31727. }
  31728. var x = toFloat(svgNode.getAttribute('x'));
  31729. var y = toFloat(svgNode.getAttribute('y'));
  31730. var width = toFloat(svgNode.getAttribute('width'));
  31731. var height = toFloat(svgNode.getAttribute('height'));
  31732. return {
  31733. left: x,
  31734. top: y,
  31735. width: width,
  31736. height: height
  31737. };
  31738. }
  31739. function geoJson2Path(root, transform) {
  31740. var scale = [
  31741. transform.scale.x,
  31742. transform.scale.y
  31743. ];
  31744. var elList = [];
  31745. function _getShape(root) {
  31746. var tagName = root.tagName;
  31747. if (shapeBuilders[tagName]) {
  31748. var obj = shapeBuilders[tagName](root, scale);
  31749. if (obj) {
  31750. obj.scale = scale;
  31751. obj.properties = { name: root.getAttribute('name') || '' };
  31752. obj.id = root.id;
  31753. extendCommonAttributes(obj, root);
  31754. elList.push(obj);
  31755. }
  31756. }
  31757. var shapes = root.childNodes;
  31758. for (var i = 0, len = shapes.length; i < len; i++) {
  31759. _getShape(shapes[i]);
  31760. }
  31761. }
  31762. _getShape(root);
  31763. return elList;
  31764. }
  31765. function pos2geo(obj, p) {
  31766. var point = p instanceof Array ? [
  31767. p[0] * 1,
  31768. p[1] * 1
  31769. ] : [
  31770. p.x * 1,
  31771. p.y * 1
  31772. ];
  31773. return [
  31774. point[0] / obj.scale.x,
  31775. point[1] / obj.scale.y
  31776. ];
  31777. }
  31778. function geo2pos(obj, p) {
  31779. var point = p instanceof Array ? [
  31780. p[0] * 1,
  31781. p[1] * 1
  31782. ] : [
  31783. p.x * 1,
  31784. p.y * 1
  31785. ];
  31786. return [
  31787. point[0] * obj.scale.x,
  31788. point[1] * obj.scale.y
  31789. ];
  31790. }
  31791. function trim(str) {
  31792. return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  31793. }
  31794. function extendCommonAttributes(obj, xmlNode) {
  31795. var color = xmlNode.getAttribute('fill');
  31796. var strokeColor = xmlNode.getAttribute('stroke');
  31797. var lineWidth = xmlNode.getAttribute('stroke-width');
  31798. var opacity = xmlNode.getAttribute('opacity');
  31799. if (color && color != 'none') {
  31800. obj.color = color;
  31801. if (strokeColor) {
  31802. obj.brushType = 'both';
  31803. obj.strokeColor = strokeColor;
  31804. } else {
  31805. obj.brushType = 'fill';
  31806. }
  31807. } else if (strokeColor && strokeColor != 'none') {
  31808. obj.strokeColor = strokeColor;
  31809. obj.brushType = 'stroke';
  31810. }
  31811. if (lineWidth && lineWidth != 'none') {
  31812. obj.lineWidth = parseFloat(lineWidth);
  31813. }
  31814. if (opacity && opacity != 'none') {
  31815. obj.opacity = parseFloat(opacity);
  31816. }
  31817. }
  31818. function parsePoints(str) {
  31819. var list = trim(str).replace(/,/g, ' ').split(/\s+/);
  31820. var points = [];
  31821. for (var i = 0; i < list.length;) {
  31822. var x = parseFloat(list[i++]);
  31823. var y = parseFloat(list[i++]);
  31824. points.push([
  31825. x,
  31826. y
  31827. ]);
  31828. }
  31829. return points;
  31830. }
  31831. var shapeBuilders = {
  31832. path: function (xmlNode, scale) {
  31833. var path = xmlNode.getAttribute('d');
  31834. var rect = PathShape.prototype.getRect({ path: path });
  31835. return {
  31836. shapeType: 'path',
  31837. path: path,
  31838. cp: [
  31839. (rect.x + rect.width / 2) * scale[0],
  31840. (rect.y + rect.height / 2) * scale[1]
  31841. ]
  31842. };
  31843. },
  31844. rect: function (xmlNode, scale) {
  31845. var x = toFloat(xmlNode.getAttribute('x'));
  31846. var y = toFloat(xmlNode.getAttribute('y'));
  31847. var width = toFloat(xmlNode.getAttribute('width'));
  31848. var height = toFloat(xmlNode.getAttribute('height'));
  31849. return {
  31850. shapeType: 'rectangle',
  31851. x: x,
  31852. y: y,
  31853. width: width,
  31854. height: height,
  31855. cp: [
  31856. (x + width / 2) * scale[0],
  31857. (y + height / 2) * scale[1]
  31858. ]
  31859. };
  31860. },
  31861. line: function (xmlNode, scale) {
  31862. var x1 = toFloat(xmlNode.getAttribute('x1'));
  31863. var y1 = toFloat(xmlNode.getAttribute('y1'));
  31864. var x2 = toFloat(xmlNode.getAttribute('x2'));
  31865. var y2 = toFloat(xmlNode.getAttribute('y2'));
  31866. return {
  31867. shapeType: 'line',
  31868. xStart: x1,
  31869. yStart: y1,
  31870. xEnd: x2,
  31871. yEnd: y2,
  31872. cp: [
  31873. (x1 + x2) * 0.5 * scale[0],
  31874. (y1 + y2) * 0.5 * scale[1]
  31875. ]
  31876. };
  31877. },
  31878. circle: function (xmlNode, scale) {
  31879. var cx = toFloat(xmlNode.getAttribute('cx'));
  31880. var cy = toFloat(xmlNode.getAttribute('cy'));
  31881. var r = toFloat(xmlNode.getAttribute('r'));
  31882. return {
  31883. shapeType: 'circle',
  31884. x: cx,
  31885. y: cy,
  31886. r: r,
  31887. cp: [
  31888. cx * scale[0],
  31889. cy * scale[1]
  31890. ]
  31891. };
  31892. },
  31893. ellipse: function (xmlNode, scale) {
  31894. var cx = parseFloat(xmlNode.getAttribute('cx') || 0);
  31895. var cy = parseFloat(xmlNode.getAttribute('cy') || 0);
  31896. var rx = parseFloat(xmlNode.getAttribute('rx') || 0);
  31897. var ry = parseFloat(xmlNode.getAttribute('ry') || 0);
  31898. return {
  31899. shapeType: 'ellipse',
  31900. x: cx,
  31901. y: cy,
  31902. a: rx,
  31903. b: ry,
  31904. cp: [
  31905. cx * scale[0],
  31906. cy * scale[1]
  31907. ]
  31908. };
  31909. },
  31910. polygon: function (xmlNode, scale) {
  31911. var points = xmlNode.getAttribute('points');
  31912. var min = [
  31913. Infinity,
  31914. Infinity
  31915. ];
  31916. var max = [
  31917. -Infinity,
  31918. -Infinity
  31919. ];
  31920. if (points) {
  31921. points = parsePoints(points);
  31922. for (var i = 0; i < points.length; i++) {
  31923. var p = points[i];
  31924. min[0] = Math.min(p[0], min[0]);
  31925. min[1] = Math.min(p[1], min[1]);
  31926. max[0] = Math.max(p[0], max[0]);
  31927. max[1] = Math.max(p[1], max[1]);
  31928. }
  31929. return {
  31930. shapeType: 'polygon',
  31931. pointList: points,
  31932. cp: [
  31933. (min[0] + max[0]) / 2 * scale[0],
  31934. (min[1] + max[1]) / 2 * scale[0]
  31935. ]
  31936. };
  31937. }
  31938. },
  31939. polyline: function (xmlNode, scale) {
  31940. var obj = shapeBuilders.polygon(xmlNode, scale);
  31941. return obj;
  31942. }
  31943. };
  31944. return {
  31945. getBbox: getBbox,
  31946. geoJson2Path: geoJson2Path,
  31947. pos2geo: pos2geo,
  31948. geo2pos: geo2pos
  31949. };
  31950. });define('echarts/util/projection/normal', [], function () {
  31951. function getBbox(json, specialArea) {
  31952. specialArea = specialArea || {};
  31953. if (!json.srcSize) {
  31954. parseSrcSize(json, specialArea);
  31955. }
  31956. return json.srcSize;
  31957. }
  31958. function parseSrcSize(json, specialArea) {
  31959. specialArea = specialArea || {};
  31960. convertorParse.xmin = 360;
  31961. convertorParse.xmax = -360;
  31962. convertorParse.ymin = 180;
  31963. convertorParse.ymax = -180;
  31964. var shapes = json.features;
  31965. var geometries;
  31966. var shape;
  31967. for (var i = 0, len = shapes.length; i < len; i++) {
  31968. shape = shapes[i];
  31969. if (shape.properties.name && specialArea[shape.properties.name]) {
  31970. continue;
  31971. }
  31972. switch (shape.type) {
  31973. case 'Feature':
  31974. convertorParse[shape.geometry.type](shape.geometry.coordinates);
  31975. break;
  31976. case 'GeometryCollection':
  31977. geometries = shape.geometries;
  31978. for (var j = 0, len2 = geometries.length; j < len2; j++) {
  31979. convertorParse[geometries[j].type](geometries[j].coordinates);
  31980. }
  31981. break;
  31982. }
  31983. }
  31984. json.srcSize = {
  31985. left: convertorParse.xmin.toFixed(4) * 1,
  31986. top: convertorParse.ymin.toFixed(4) * 1,
  31987. width: (convertorParse.xmax - convertorParse.xmin).toFixed(4) * 1,
  31988. height: (convertorParse.ymax - convertorParse.ymin).toFixed(4) * 1
  31989. };
  31990. return json;
  31991. }
  31992. var convertor = {
  31993. formatPoint: function (p) {
  31994. return [
  31995. (p[0] < -168.5 && p[1] > 63.8 ? p[0] + 360 : p[0]) + 168.5,
  31996. 90 - p[1]
  31997. ];
  31998. },
  31999. makePoint: function (p) {
  32000. var self = this;
  32001. var point = self.formatPoint(p);
  32002. if (self._bbox.xmin > p[0]) {
  32003. self._bbox.xmin = p[0];
  32004. }
  32005. if (self._bbox.xmax < p[0]) {
  32006. self._bbox.xmax = p[0];
  32007. }
  32008. if (self._bbox.ymin > p[1]) {
  32009. self._bbox.ymin = p[1];
  32010. }
  32011. if (self._bbox.ymax < p[1]) {
  32012. self._bbox.ymax = p[1];
  32013. }
  32014. var x = (point[0] - convertor.offset.x) * convertor.scale.x + convertor.offset.left;
  32015. var y = (point[1] - convertor.offset.y) * convertor.scale.y + convertor.offset.top;
  32016. return [
  32017. x,
  32018. y
  32019. ];
  32020. },
  32021. Point: function (coordinates) {
  32022. coordinates = this.makePoint(coordinates);
  32023. return coordinates.join(',');
  32024. },
  32025. LineString: function (coordinates) {
  32026. var str = '';
  32027. var point;
  32028. for (var i = 0, len = coordinates.length; i < len; i++) {
  32029. point = convertor.makePoint(coordinates[i]);
  32030. if (i === 0) {
  32031. str = 'M' + point.join(',');
  32032. } else {
  32033. str = str + 'L' + point.join(',');
  32034. }
  32035. }
  32036. return str;
  32037. },
  32038. Polygon: function (coordinates) {
  32039. var str = '';
  32040. for (var i = 0, len = coordinates.length; i < len; i++) {
  32041. str = str + convertor.LineString(coordinates[i]) + 'z';
  32042. }
  32043. return str;
  32044. },
  32045. MultiPoint: function (coordinates) {
  32046. var arr = [];
  32047. for (var i = 0, len = coordinates.length; i < len; i++) {
  32048. arr.push(convertor.Point(coordinates[i]));
  32049. }
  32050. return arr;
  32051. },
  32052. MultiLineString: function (coordinates) {
  32053. var str = '';
  32054. for (var i = 0, len = coordinates.length; i < len; i++) {
  32055. str += convertor.LineString(coordinates[i]);
  32056. }
  32057. return str;
  32058. },
  32059. MultiPolygon: function (coordinates) {
  32060. var str = '';
  32061. for (var i = 0, len = coordinates.length; i < len; i++) {
  32062. str += convertor.Polygon(coordinates[i]);
  32063. }
  32064. return str;
  32065. }
  32066. };
  32067. var convertorParse = {
  32068. formatPoint: convertor.formatPoint,
  32069. makePoint: function (p) {
  32070. var self = this;
  32071. var point = self.formatPoint(p);
  32072. var x = point[0];
  32073. var y = point[1];
  32074. if (self.xmin > x) {
  32075. self.xmin = x;
  32076. }
  32077. if (self.xmax < x) {
  32078. self.xmax = x;
  32079. }
  32080. if (self.ymin > y) {
  32081. self.ymin = y;
  32082. }
  32083. if (self.ymax < y) {
  32084. self.ymax = y;
  32085. }
  32086. },
  32087. Point: function (coordinates) {
  32088. this.makePoint(coordinates);
  32089. },
  32090. LineString: function (coordinates) {
  32091. for (var i = 0, len = coordinates.length; i < len; i++) {
  32092. this.makePoint(coordinates[i]);
  32093. }
  32094. },
  32095. Polygon: function (coordinates) {
  32096. for (var i = 0, len = coordinates.length; i < len; i++) {
  32097. this.LineString(coordinates[i]);
  32098. }
  32099. },
  32100. MultiPoint: function (coordinates) {
  32101. for (var i = 0, len = coordinates.length; i < len; i++) {
  32102. this.Point(coordinates[i]);
  32103. }
  32104. },
  32105. MultiLineString: function (coordinates) {
  32106. for (var i = 0, len = coordinates.length; i < len; i++) {
  32107. this.LineString(coordinates[i]);
  32108. }
  32109. },
  32110. MultiPolygon: function (coordinates) {
  32111. for (var i = 0, len = coordinates.length; i < len; i++) {
  32112. this.Polygon(coordinates[i]);
  32113. }
  32114. }
  32115. };
  32116. function geoJson2Path(json, transform, specialArea) {
  32117. specialArea = specialArea || {};
  32118. convertor.scale = null;
  32119. convertor.offset = null;
  32120. if (!json.srcSize) {
  32121. parseSrcSize(json, specialArea);
  32122. }
  32123. transform.offset = {
  32124. x: json.srcSize.left,
  32125. y: json.srcSize.top,
  32126. left: transform.OffsetLeft || 0,
  32127. top: transform.OffsetTop || 0
  32128. };
  32129. convertor.scale = transform.scale;
  32130. convertor.offset = transform.offset;
  32131. var shapes = json.features;
  32132. var geometries;
  32133. var pathArray = [];
  32134. var val;
  32135. var shape;
  32136. for (var i = 0, len = shapes.length; i < len; i++) {
  32137. shape = shapes[i];
  32138. if (shape.properties.name && specialArea[shape.properties.name]) {
  32139. continue;
  32140. }
  32141. if (shape.type == 'Feature') {
  32142. pushApath(shape.geometry, shape);
  32143. } else if (shape.type == 'GeometryCollection') {
  32144. geometries = shape.geometries;
  32145. for (var j = 0, len2 = geometries.length; j < len2; j++) {
  32146. val = geometries[j];
  32147. pushApath(val, val);
  32148. }
  32149. }
  32150. }
  32151. var shapeType;
  32152. var shapeCoordinates;
  32153. var str;
  32154. function pushApath(gm, shape) {
  32155. shapeType = gm.type;
  32156. shapeCoordinates = gm.coordinates;
  32157. convertor._bbox = {
  32158. xmin: 360,
  32159. xmax: -360,
  32160. ymin: 180,
  32161. ymax: -180
  32162. };
  32163. str = convertor[shapeType](shapeCoordinates);
  32164. pathArray.push({
  32165. path: str,
  32166. cp: shape.properties.cp ? convertor.makePoint(shape.properties.cp) : convertor.makePoint([
  32167. (convertor._bbox.xmin + convertor._bbox.xmax) / 2,
  32168. (convertor._bbox.ymin + convertor._bbox.ymax) / 2
  32169. ]),
  32170. properties: shape.properties,
  32171. id: shape.id
  32172. });
  32173. }
  32174. return pathArray;
  32175. }
  32176. function pos2geo(obj, p) {
  32177. var x;
  32178. var y;
  32179. if (p instanceof Array) {
  32180. x = p[0] * 1;
  32181. y = p[1] * 1;
  32182. } else {
  32183. x = p.x * 1;
  32184. y = p.y * 1;
  32185. }
  32186. x = x / obj.scale.x + obj.offset.x - 168.5;
  32187. x = x > 180 ? x - 360 : x;
  32188. y = 90 - (y / obj.scale.y + obj.offset.y);
  32189. return [
  32190. x,
  32191. y
  32192. ];
  32193. }
  32194. function geo2pos(obj, p) {
  32195. convertor.offset = obj.offset;
  32196. convertor.scale = obj.scale;
  32197. return p instanceof Array ? convertor.makePoint([
  32198. p[0] * 1,
  32199. p[1] * 1
  32200. ]) : convertor.makePoint([
  32201. p.x * 1,
  32202. p.y * 1
  32203. ]);
  32204. }
  32205. return {
  32206. getBbox: getBbox,
  32207. geoJson2Path: geoJson2Path,
  32208. pos2geo: pos2geo,
  32209. geo2pos: geo2pos
  32210. };
  32211. });define('echarts/util/mapData/geoJson/an_hui_geo', [], function () {
  32212. return {
  32213. 'type': 'FeatureCollection',
  32214. 'features': [
  32215. {
  32216. 'type': 'Feature',
  32217. 'id': '3415',
  32218. 'properties': {
  32219. 'name': '六安市',
  32220. 'cp': [
  32221. 116.3123,
  32222. 31.8329
  32223. ],
  32224. 'childNum': 6
  32225. },
  32226. 'geometry': {
  32227. 'type': 'Polygon',
  32228. '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'],
  32229. 'encodeOffsets': [[
  32230. 118710,
  32231. 33351
  32232. ]]
  32233. }
  32234. },
  32235. {
  32236. 'type': 'Feature',
  32237. 'id': '3408',
  32238. 'properties': {
  32239. 'name': '安庆市',
  32240. 'cp': [
  32241. 116.7517,
  32242. 30.5255
  32243. ],
  32244. 'childNum': 9
  32245. },
  32246. 'geometry': {
  32247. 'type': 'Polygon',
  32248. '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'],
  32249. 'encodeOffsets': [[
  32250. 118834,
  32251. 31759
  32252. ]]
  32253. }
  32254. },
  32255. {
  32256. 'type': 'Feature',
  32257. 'id': '3411',
  32258. 'properties': {
  32259. 'name': '滁州市',
  32260. 'cp': [
  32261. 118.1909,
  32262. 32.536
  32263. ],
  32264. 'childNum': 7
  32265. },
  32266. 'geometry': {
  32267. 'type': 'Polygon',
  32268. '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'],
  32269. 'encodeOffsets': [[
  32270. 120004,
  32271. 33520
  32272. ]]
  32273. }
  32274. },
  32275. {
  32276. 'type': 'Feature',
  32277. 'id': '3418',
  32278. 'properties': {
  32279. 'name': '宣城市',
  32280. 'cp': [
  32281. 118.8062,
  32282. 30.6244
  32283. ],
  32284. 'childNum': 7
  32285. },
  32286. 'geometry': {
  32287. 'type': 'Polygon',
  32288. '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'],
  32289. 'encodeOffsets': [[
  32290. 120803,
  32291. 31247
  32292. ]]
  32293. }
  32294. },
  32295. {
  32296. 'type': 'Feature',
  32297. 'id': '3412',
  32298. 'properties': {
  32299. 'name': '阜阳市',
  32300. 'cp': [
  32301. 115.7629,
  32302. 32.9919
  32303. ],
  32304. 'childNum': 6
  32305. },
  32306. 'geometry': {
  32307. 'type': 'Polygon',
  32308. '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'],
  32309. 'encodeOffsets': [[
  32310. 118418,
  32311. 34392
  32312. ]]
  32313. }
  32314. },
  32315. {
  32316. 'type': 'Feature',
  32317. 'id': '3413',
  32318. 'properties': {
  32319. 'name': '宿州市',
  32320. 'cp': [
  32321. 117.5208,
  32322. 33.6841
  32323. ],
  32324. 'childNum': 5
  32325. },
  32326. 'geometry': {
  32327. 'type': 'Polygon',
  32328. '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'],
  32329. 'encodeOffsets': [[
  32330. 119836,
  32331. 35061
  32332. ]]
  32333. }
  32334. },
  32335. {
  32336. 'type': 'Feature',
  32337. 'id': '3410',
  32338. 'properties': {
  32339. 'name': '黄山市',
  32340. 'cp': [
  32341. 118.0481,
  32342. 29.9542
  32343. ],
  32344. 'childNum': 5
  32345. },
  32346. 'geometry': {
  32347. 'type': 'Polygon',
  32348. '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˜'],
  32349. 'encodeOffsets': [[
  32350. 120747,
  32351. 31095
  32352. ]]
  32353. }
  32354. },
  32355. {
  32356. 'type': 'Feature',
  32357. 'id': '3414',
  32358. 'properties': {
  32359. 'name': '巢湖市',
  32360. 'cp': [
  32361. 117.7734,
  32362. 31.4978
  32363. ],
  32364. 'childNum': 5
  32365. },
  32366. 'geometry': {
  32367. 'type': 'Polygon',
  32368. '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'],
  32369. 'encodeOffsets': [[
  32370. 119847,
  32371. 32007
  32372. ]]
  32373. }
  32374. },
  32375. {
  32376. 'type': 'Feature',
  32377. 'id': '3416',
  32378. 'properties': {
  32379. 'name': '亳州市',
  32380. 'cp': [
  32381. 116.1914,
  32382. 33.4698
  32383. ],
  32384. 'childNum': 4
  32385. },
  32386. 'geometry': {
  32387. 'type': 'Polygon',
  32388. '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'],
  32389. 'encodeOffsets': [[
  32390. 119183,
  32391. 34594
  32392. ]]
  32393. }
  32394. },
  32395. {
  32396. 'type': 'Feature',
  32397. 'id': '3417',
  32398. 'properties': {
  32399. 'name': '池州市',
  32400. 'cp': [
  32401. 117.3889,
  32402. 30.2014
  32403. ],
  32404. 'childNum': 4
  32405. },
  32406. 'geometry': {
  32407. 'type': 'Polygon',
  32408. 'coordinates': [
  32409. '@@„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',
  32410. '@@llUL@VlxšL@a@UƒwXa¯@'
  32411. ],
  32412. 'encodeOffsets': [
  32413. [
  32414. 119543,
  32415. 30781
  32416. ],
  32417. [
  32418. 120061,
  32419. 31152
  32420. ]
  32421. ]
  32422. }
  32423. },
  32424. {
  32425. 'type': 'Feature',
  32426. 'id': '3401',
  32427. 'properties': {
  32428. 'name': '合肥市',
  32429. 'cp': [
  32430. 117.29,
  32431. 32.0581
  32432. ],
  32433. 'childNum': 4
  32434. },
  32435. 'geometry': {
  32436. 'type': 'Polygon',
  32437. '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¦'],
  32438. 'encodeOffsets': [[
  32439. 119678,
  32440. 33323
  32441. ]]
  32442. }
  32443. },
  32444. {
  32445. 'type': 'Feature',
  32446. 'id': '3403',
  32447. 'properties': {
  32448. 'name': '蚌埠市',
  32449. 'cp': [
  32450. 117.4109,
  32451. 33.1073
  32452. ],
  32453. 'childNum': 4
  32454. },
  32455. 'geometry': {
  32456. 'type': 'Polygon',
  32457. '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'],
  32458. 'encodeOffsets': [[
  32459. 119543,
  32460. 33722
  32461. ]]
  32462. }
  32463. },
  32464. {
  32465. 'type': 'Feature',
  32466. 'id': '3402',
  32467. 'properties': {
  32468. 'name': '芜湖市',
  32469. 'cp': [
  32470. 118.3557,
  32471. 31.0858
  32472. ],
  32473. 'childNum': 4
  32474. },
  32475. 'geometry': {
  32476. 'type': 'Polygon',
  32477. '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'],
  32478. 'encodeOffsets': [[
  32479. 120814,
  32480. 31585
  32481. ]]
  32482. }
  32483. },
  32484. {
  32485. 'type': 'Feature',
  32486. 'id': '3406',
  32487. 'properties': {
  32488. 'name': '淮北市',
  32489. 'cp': [
  32490. 116.6968,
  32491. 33.6896
  32492. ],
  32493. 'childNum': 3
  32494. },
  32495. 'geometry': {
  32496. 'type': 'MultiPolygon',
  32497. 'coordinates': [
  32498. ['@@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'],
  32499. ['@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V']
  32500. ],
  32501. 'encodeOffsets': [
  32502. [[
  32503. 119183,
  32504. 34594
  32505. ]],
  32506. [[
  32507. 119836,
  32508. 35061
  32509. ]]
  32510. ]
  32511. }
  32512. },
  32513. {
  32514. 'type': 'Feature',
  32515. 'id': '3404',
  32516. 'properties': {
  32517. 'name': '淮南市',
  32518. 'cp': [
  32519. 116.7847,
  32520. 32.7722
  32521. ],
  32522. 'childNum': 2
  32523. },
  32524. 'geometry': {
  32525. 'type': 'Polygon',
  32526. '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'],
  32527. 'encodeOffsets': [[
  32528. 119543,
  32529. 33722
  32530. ]]
  32531. }
  32532. },
  32533. {
  32534. 'type': 'Feature',
  32535. 'id': '3405',
  32536. 'properties': {
  32537. 'name': '马鞍山市',
  32538. 'cp': [
  32539. 118.6304,
  32540. 31.5363
  32541. ],
  32542. 'childNum': 2
  32543. },
  32544. 'geometry': {
  32545. 'type': 'Polygon',
  32546. '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'],
  32547. 'encodeOffsets': [[
  32548. 121219,
  32549. 32288
  32550. ]]
  32551. }
  32552. },
  32553. {
  32554. 'type': 'Feature',
  32555. 'id': '3407',
  32556. 'properties': {
  32557. 'name': '铜陵市',
  32558. 'cp': [
  32559. 117.9382,
  32560. 30.9375
  32561. ],
  32562. 'childNum': 3
  32563. },
  32564. 'geometry': {
  32565. 'type': 'MultiPolygon',
  32566. 'coordinates': [
  32567. ['@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U'],
  32568. ['@@LllUL@VlxšL@a@UƒwXamK']
  32569. ],
  32570. 'encodeOffsets': [
  32571. [[
  32572. 120522,
  32573. 31529
  32574. ]],
  32575. [[
  32576. 120094,
  32577. 31146
  32578. ]]
  32579. ]
  32580. }
  32581. }
  32582. ],
  32583. 'UTF8Encoding': true
  32584. };
  32585. });define('echarts/util/mapData/geoJson/ao_men_geo', [], function () {
  32586. return {
  32587. 'type': 'FeatureCollection',
  32588. 'features': [{
  32589. 'type': 'Feature',
  32590. 'id': '8200',
  32591. 'properties': {
  32592. 'name': '澳门',
  32593. 'cp': [
  32594. 113.5715,
  32595. 22.1583
  32596. ],
  32597. 'childNum': 1
  32598. },
  32599. 'geometry': {
  32600. 'type': 'Polygon',
  32601. 'coordinates': ['@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW'],
  32602. 'encodeOffsets': [[
  32603. 116325,
  32604. 22699
  32605. ]]
  32606. }
  32607. }],
  32608. 'UTF8Encoding': true
  32609. };
  32610. });define('echarts/util/mapData/geoJson/bei_jing_geo', [], function () {
  32611. return {
  32612. 'type': 'FeatureCollection',
  32613. 'features': [
  32614. {
  32615. 'type': 'Feature',
  32616. 'id': '110228',
  32617. 'properties': {
  32618. 'name': '密云县',
  32619. 'cp': [
  32620. 117.0923,
  32621. 40.5121
  32622. ],
  32623. 'childNum': 1
  32624. },
  32625. 'geometry': {
  32626. 'type': 'Polygon',
  32627. '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'],
  32628. 'encodeOffsets': [[
  32629. 119561,
  32630. 41684
  32631. ]]
  32632. }
  32633. },
  32634. {
  32635. 'type': 'Feature',
  32636. 'id': '110116',
  32637. 'properties': {
  32638. 'name': '怀柔区',
  32639. 'cp': [
  32640. 116.6377,
  32641. 40.6219
  32642. ],
  32643. 'childNum': 1
  32644. },
  32645. 'geometry': {
  32646. 'type': 'Polygon',
  32647. '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'],
  32648. 'encodeOffsets': [[
  32649. 119314,
  32650. 41552
  32651. ]]
  32652. }
  32653. },
  32654. {
  32655. 'type': 'Feature',
  32656. 'id': '110111',
  32657. 'properties': {
  32658. 'name': '房山区',
  32659. 'cp': [
  32660. 115.8453,
  32661. 39.7163
  32662. ],
  32663. 'childNum': 1
  32664. },
  32665. 'geometry': {
  32666. 'type': 'Polygon',
  32667. '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'],
  32668. 'encodeOffsets': [[
  32669. 118343,
  32670. 40770
  32671. ]]
  32672. }
  32673. },
  32674. {
  32675. 'type': 'Feature',
  32676. 'id': '110229',
  32677. 'properties': {
  32678. 'name': '延庆县',
  32679. 'cp': [
  32680. 116.1543,
  32681. 40.5286
  32682. ],
  32683. 'childNum': 1
  32684. },
  32685. 'geometry': {
  32686. 'type': 'Polygon',
  32687. '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'],
  32688. 'encodeOffsets': [[
  32689. 119262,
  32690. 41751
  32691. ]]
  32692. }
  32693. },
  32694. {
  32695. 'type': 'Feature',
  32696. 'id': '110109',
  32697. 'properties': {
  32698. 'name': '门头沟区',
  32699. 'cp': [
  32700. 115.8,
  32701. 39.9957
  32702. ],
  32703. 'childNum': 1
  32704. },
  32705. 'geometry': {
  32706. 'type': 'Polygon',
  32707. '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'],
  32708. 'encodeOffsets': [[
  32709. 118635,
  32710. 41113
  32711. ]]
  32712. }
  32713. },
  32714. {
  32715. 'type': 'Feature',
  32716. 'id': '110114',
  32717. 'properties': {
  32718. 'name': '昌平区',
  32719. 'cp': [
  32720. 116.1777,
  32721. 40.2134
  32722. ],
  32723. 'childNum': 1
  32724. },
  32725. 'geometry': {
  32726. 'type': 'Polygon',
  32727. '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'],
  32728. 'encodeOffsets': [[
  32729. 118750,
  32730. 41232
  32731. ]]
  32732. }
  32733. },
  32734. {
  32735. 'type': 'Feature',
  32736. 'id': '110115',
  32737. 'properties': {
  32738. 'name': '大兴区',
  32739. 'cp': [
  32740. 116.4716,
  32741. 39.6352
  32742. ],
  32743. 'childNum': 1
  32744. },
  32745. 'geometry': {
  32746. 'type': 'Polygon',
  32747. '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'],
  32748. 'encodeOffsets': [[
  32749. 119042,
  32750. 40704
  32751. ]]
  32752. }
  32753. },
  32754. {
  32755. 'type': 'Feature',
  32756. 'id': '110113',
  32757. 'properties': {
  32758. 'name': '顺义区',
  32759. 'cp': [
  32760. 116.7242,
  32761. 40.1619
  32762. ],
  32763. 'childNum': 1
  32764. },
  32765. 'geometry': {
  32766. 'type': 'Polygon',
  32767. 'coordinates': [
  32768. '@@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',
  32769. '@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP'
  32770. ],
  32771. 'encodeOffsets': [
  32772. [
  32773. 119283,
  32774. 41084
  32775. ],
  32776. [
  32777. 119377,
  32778. 41046
  32779. ]
  32780. ]
  32781. }
  32782. },
  32783. {
  32784. 'type': 'Feature',
  32785. 'id': '110117',
  32786. 'properties': {
  32787. 'name': '平谷区',
  32788. 'cp': [
  32789. 117.1706,
  32790. 40.2052
  32791. ],
  32792. 'childNum': 1
  32793. },
  32794. 'geometry': {
  32795. 'type': 'Polygon',
  32796. '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'],
  32797. 'encodeOffsets': [[
  32798. 119748,
  32799. 41190
  32800. ]]
  32801. }
  32802. },
  32803. {
  32804. 'type': 'Feature',
  32805. 'id': '110112',
  32806. 'properties': {
  32807. 'name': '通州区',
  32808. 'cp': [
  32809. 116.7297,
  32810. 39.8131
  32811. ],
  32812. 'childNum': 1
  32813. },
  32814. 'geometry': {
  32815. 'type': 'Polygon',
  32816. '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'],
  32817. 'encodeOffsets': [[
  32818. 119329,
  32819. 40782
  32820. ]]
  32821. }
  32822. },
  32823. {
  32824. 'type': 'Feature',
  32825. 'id': '110105',
  32826. 'properties': {
  32827. 'name': '朝阳区',
  32828. 'cp': [
  32829. 116.4977,
  32830. 39.949
  32831. ],
  32832. 'childNum': 2
  32833. },
  32834. 'geometry': {
  32835. 'type': 'MultiPolygon',
  32836. 'coordinates': [
  32837. ['@@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'],
  32838. ['@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB']
  32839. ],
  32840. 'encodeOffsets': [
  32841. [[
  32842. 119169,
  32843. 40992
  32844. ]],
  32845. [[
  32846. 119398,
  32847. 41063
  32848. ]]
  32849. ]
  32850. }
  32851. },
  32852. {
  32853. 'type': 'Feature',
  32854. 'id': '110108',
  32855. 'properties': {
  32856. 'name': '海淀区',
  32857. 'cp': [
  32858. 116.2202,
  32859. 40.0239
  32860. ],
  32861. 'childNum': 1
  32862. },
  32863. 'geometry': {
  32864. 'type': 'Polygon',
  32865. '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'],
  32866. 'encodeOffsets': [[
  32867. 118834,
  32868. 41050
  32869. ]]
  32870. }
  32871. },
  32872. {
  32873. 'type': 'Feature',
  32874. 'id': '110106',
  32875. 'properties': {
  32876. 'name': '丰台区',
  32877. 'cp': [
  32878. 116.2683,
  32879. 39.8309
  32880. ],
  32881. 'childNum': 1
  32882. },
  32883. 'geometry': {
  32884. 'type': 'Polygon',
  32885. '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'],
  32886. 'encodeOffsets': [[
  32887. 118958,
  32888. 40846
  32889. ]]
  32890. }
  32891. },
  32892. {
  32893. 'type': 'Feature',
  32894. 'id': '110107',
  32895. 'properties': {
  32896. 'name': '石景山区',
  32897. 'cp': [
  32898. 116.1887,
  32899. 39.9346
  32900. ],
  32901. 'childNum': 1
  32902. },
  32903. 'geometry': {
  32904. 'type': 'Polygon',
  32905. 'coordinates': ['@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD'],
  32906. 'encodeOffsets': [[
  32907. 118940,
  32908. 40953
  32909. ]]
  32910. }
  32911. },
  32912. {
  32913. 'type': 'Feature',
  32914. 'id': '110102',
  32915. 'properties': {
  32916. 'name': '西城区',
  32917. 'cp': [
  32918. 116.3631,
  32919. 39.9353
  32920. ],
  32921. 'childNum': 1
  32922. },
  32923. 'geometry': {
  32924. 'type': 'Polygon',
  32925. 'coordinates': ['@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H'],
  32926. 'encodeOffsets': [[
  32927. 119175,
  32928. 40932
  32929. ]]
  32930. }
  32931. },
  32932. {
  32933. 'type': 'Feature',
  32934. 'id': '110101',
  32935. 'properties': {
  32936. 'name': '东城区',
  32937. 'cp': [
  32938. 116.418,
  32939. 39.9367
  32940. ],
  32941. 'childNum': 1
  32942. },
  32943. 'geometry': {
  32944. 'type': 'Polygon',
  32945. 'coordinates': ['@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J'],
  32946. 'encodeOffsets': [[
  32947. 119182,
  32948. 40921
  32949. ]]
  32950. }
  32951. },
  32952. {
  32953. 'type': 'Feature',
  32954. 'id': '110104',
  32955. 'properties': {
  32956. 'name': '宣武区',
  32957. 'cp': [
  32958. 116.3603,
  32959. 39.8852
  32960. ],
  32961. 'childNum': 1
  32962. },
  32963. 'geometry': {
  32964. 'type': 'Polygon',
  32965. 'coordinates': ['@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N'],
  32966. 'encodeOffsets': [[
  32967. 119118,
  32968. 40855
  32969. ]]
  32970. }
  32971. },
  32972. {
  32973. 'type': 'Feature',
  32974. 'id': '110103',
  32975. 'properties': {
  32976. 'name': '崇文区',
  32977. 'cp': [
  32978. 116.4166,
  32979. 39.8811
  32980. ],
  32981. 'childNum': 1
  32982. },
  32983. 'geometry': {
  32984. 'type': 'Polygon',
  32985. 'coordinates': ['@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H'],
  32986. 'encodeOffsets': [[
  32987. 119175,
  32988. 40829
  32989. ]]
  32990. }
  32991. }
  32992. ],
  32993. 'UTF8Encoding': true
  32994. };
  32995. });define('echarts/util/mapData/geoJson/china_geo', [], function () {
  32996. return {
  32997. 'type': 'FeatureCollection',
  32998. 'features': [
  32999. {
  33000. 'type': 'Feature',
  33001. 'id': 'xin_jiang',
  33002. 'properties': {
  33003. 'name': '新疆',
  33004. 'cp': [
  33005. 84.9023,
  33006. 41.748
  33007. ],
  33008. 'childNum': 18
  33009. },
  33010. 'geometry': {
  33011. 'type': 'Polygon',
  33012. 'coordinates': ['@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ'],
  33013. 'encodeOffsets': [[
  33014. 98730,
  33015. 43786
  33016. ]]
  33017. }
  33018. },
  33019. {
  33020. 'type': 'Feature',
  33021. 'id': 'xi_zang',
  33022. 'properties': {
  33023. 'name': '西藏',
  33024. 'cp': [
  33025. 88.7695,
  33026. 31.6846
  33027. ],
  33028. 'childNum': 7
  33029. },
  33030. 'geometry': {
  33031. 'type': 'Polygon',
  33032. 'coordinates': ['@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ'],
  33033. 'encodeOffsets': [[
  33034. 80911,
  33035. 35146
  33036. ]]
  33037. }
  33038. },
  33039. {
  33040. 'type': 'Feature',
  33041. 'id': 'nei_meng_gu',
  33042. 'properties': {
  33043. 'name': '内蒙古',
  33044. 'cp': [
  33045. 117.5977,
  33046. 44.3408
  33047. ],
  33048. 'childNum': 12
  33049. },
  33050. 'geometry': {
  33051. 'type': 'Polygon',
  33052. 'coordinates': ['@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ'],
  33053. 'encodeOffsets': [[
  33054. 99540,
  33055. 43830
  33056. ]]
  33057. }
  33058. },
  33059. {
  33060. 'type': 'Feature',
  33061. 'id': 'qing_hai',
  33062. 'properties': {
  33063. 'name': '青海',
  33064. 'cp': [
  33065. 96.2402,
  33066. 35.4199
  33067. ],
  33068. 'childNum': 8
  33069. },
  33070. 'geometry': {
  33071. 'type': 'Polygon',
  33072. 'coordinates': ['@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜'],
  33073. 'encodeOffsets': [[
  33074. 91890,
  33075. 36945
  33076. ]]
  33077. }
  33078. },
  33079. {
  33080. 'type': 'Feature',
  33081. 'id': 'si_chuan',
  33082. 'properties': {
  33083. 'name': '四川',
  33084. 'cp': [
  33085. 102.9199,
  33086. 30.1904
  33087. ],
  33088. 'childNum': 21
  33089. },
  33090. 'geometry': {
  33091. 'type': 'Polygon',
  33092. 'coordinates': ['@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ'],
  33093. 'encodeOffsets': [[
  33094. 104220,
  33095. 34336
  33096. ]]
  33097. }
  33098. },
  33099. {
  33100. 'type': 'Feature',
  33101. 'id': 'hei_long_jiang',
  33102. 'properties': {
  33103. 'name': '黑龙江',
  33104. 'cp': [
  33105. 128.1445,
  33106. 48.5156
  33107. ],
  33108. 'childNum': 13
  33109. },
  33110. 'geometry': {
  33111. 'type': 'Polygon',
  33112. 'coordinates': ['@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ'],
  33113. 'encodeOffsets': [[
  33114. 124380,
  33115. 54630
  33116. ]]
  33117. }
  33118. },
  33119. {
  33120. 'type': 'Feature',
  33121. 'id': 'gan_su',
  33122. 'properties': {
  33123. 'name': '甘肃',
  33124. 'cp': [
  33125. 95.7129,
  33126. 40.166
  33127. ],
  33128. 'childNum': 14
  33129. },
  33130. 'geometry': {
  33131. 'type': 'Polygon',
  33132. 'coordinates': ['@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ'],
  33133. 'encodeOffsets': [[
  33134. 98730,
  33135. 43740
  33136. ]]
  33137. }
  33138. },
  33139. {
  33140. 'type': 'Feature',
  33141. 'id': 'yun_nan',
  33142. 'properties': {
  33143. 'name': '云南',
  33144. 'cp': [
  33145. 101.8652,
  33146. 25.1807
  33147. ],
  33148. 'childNum': 16
  33149. },
  33150. 'geometry': {
  33151. 'type': 'Polygon',
  33152. 'coordinates': ['@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ'],
  33153. 'encodeOffsets': [[
  33154. 100530,
  33155. 28800
  33156. ]]
  33157. }
  33158. },
  33159. {
  33160. 'type': 'Feature',
  33161. 'id': 'guang_xi',
  33162. 'properties': {
  33163. 'name': '广西',
  33164. 'cp': [
  33165. 108.2813,
  33166. 23.6426
  33167. ],
  33168. 'childNum': 14
  33169. },
  33170. 'geometry': {
  33171. 'type': 'Polygon',
  33172. 'coordinates': ['@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ'],
  33173. 'encodeOffsets': [[
  33174. 107011,
  33175. 25335
  33176. ]]
  33177. }
  33178. },
  33179. {
  33180. 'type': 'Feature',
  33181. 'id': 'hu_nan',
  33182. 'properties': {
  33183. 'name': '湖南',
  33184. 'cp': [
  33185. 111.5332,
  33186. 27.3779
  33187. ],
  33188. 'childNum': 14
  33189. },
  33190. 'geometry': {
  33191. 'type': 'Polygon',
  33192. 'coordinates': ['@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ'],
  33193. 'encodeOffsets': [[
  33194. 111870,
  33195. 29161
  33196. ]]
  33197. }
  33198. },
  33199. {
  33200. 'type': 'Feature',
  33201. 'id': 'shan_xi_1',
  33202. 'properties': {
  33203. 'name': '陕西',
  33204. 'cp': [
  33205. 109.5996,
  33206. 35.6396
  33207. ],
  33208. 'childNum': 10
  33209. },
  33210. 'geometry': {
  33211. 'type': 'Polygon',
  33212. 'coordinates': ['@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ'],
  33213. 'encodeOffsets': [[
  33214. 108001,
  33215. 33705
  33216. ]]
  33217. }
  33218. },
  33219. {
  33220. 'type': 'Feature',
  33221. 'id': 'guang_dong',
  33222. 'properties': {
  33223. 'name': '广东',
  33224. 'cp': [
  33225. 113.4668,
  33226. 22.8076
  33227. ],
  33228. 'childNum': 21
  33229. },
  33230. 'geometry': {
  33231. 'type': 'Polygon',
  33232. 'coordinates': [
  33233. '@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@',
  33234. '@@X¯aWĀ„@l'
  33235. ],
  33236. 'encodeOffsets': [
  33237. [
  33238. 112411,
  33239. 21916
  33240. ],
  33241. [
  33242. 116325,
  33243. 22697
  33244. ]
  33245. ]
  33246. }
  33247. },
  33248. {
  33249. 'type': 'Feature',
  33250. 'id': 'ji_lin',
  33251. 'properties': {
  33252. 'name': '吉林',
  33253. 'cp': [
  33254. 126.4746,
  33255. 43.5938
  33256. ],
  33257. 'childNum': 9
  33258. },
  33259. 'geometry': {
  33260. 'type': 'Polygon',
  33261. 'coordinates': ['@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ'],
  33262. 'encodeOffsets': [[
  33263. 126181,
  33264. 47341
  33265. ]]
  33266. }
  33267. },
  33268. {
  33269. 'type': 'Feature',
  33270. 'id': 'he_bei',
  33271. 'properties': {
  33272. 'name': '河北',
  33273. 'cp': [
  33274. 115.4004,
  33275. 37.9688
  33276. ],
  33277. 'childNum': 11
  33278. },
  33279. 'geometry': {
  33280. 'type': 'MultiPolygon',
  33281. 'coordinates': [
  33282. ['@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς'],
  33283. ['@@õə@Ƨɛ˜@ŐóƦφô']
  33284. ],
  33285. 'encodeOffsets': [
  33286. [[
  33287. 117271,
  33288. 40455
  33289. ]],
  33290. [[
  33291. 120061,
  33292. 41040
  33293. ]]
  33294. ]
  33295. }
  33296. },
  33297. {
  33298. 'type': 'Feature',
  33299. 'id': 'hu_bei',
  33300. 'properties': {
  33301. 'name': '湖北',
  33302. 'cp': [
  33303. 112.2363,
  33304. 31.1572
  33305. ],
  33306. 'childNum': 17
  33307. },
  33308. 'geometry': {
  33309. 'type': 'Polygon',
  33310. 'coordinates': ['@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎'],
  33311. 'encodeOffsets': [[
  33312. 112860,
  33313. 31905
  33314. ]]
  33315. }
  33316. },
  33317. {
  33318. 'type': 'Feature',
  33319. 'id': 'gui_zhou',
  33320. 'properties': {
  33321. 'name': '贵州',
  33322. 'cp': [
  33323. 106.6113,
  33324. 26.9385
  33325. ],
  33326. 'childNum': 9
  33327. },
  33328. 'geometry': {
  33329. 'type': 'Polygon',
  33330. 'coordinates': ['@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ'],
  33331. 'encodeOffsets': [[
  33332. 106651,
  33333. 27901
  33334. ]]
  33335. }
  33336. },
  33337. {
  33338. 'type': 'Feature',
  33339. 'id': 'shan_dong',
  33340. 'properties': {
  33341. 'name': '山东',
  33342. 'cp': [
  33343. 118.7402,
  33344. 36.4307
  33345. ],
  33346. 'childNum': 17
  33347. },
  33348. 'geometry': {
  33349. 'type': 'Polygon',
  33350. 'coordinates': ['@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒'],
  33351. 'encodeOffsets': [[
  33352. 118261,
  33353. 37036
  33354. ]]
  33355. }
  33356. },
  33357. {
  33358. 'type': 'Feature',
  33359. 'id': 'jiang_xi',
  33360. 'properties': {
  33361. 'name': '江西',
  33362. 'cp': [
  33363. 116.0156,
  33364. 27.29
  33365. ],
  33366. 'childNum': 11
  33367. },
  33368. 'geometry': {
  33369. 'type': 'Polygon',
  33370. 'coordinates': ['@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ'],
  33371. 'encodeOffsets': [[
  33372. 117000,
  33373. 29025
  33374. ]]
  33375. }
  33376. },
  33377. {
  33378. 'type': 'Feature',
  33379. 'id': 'he_nan',
  33380. 'properties': {
  33381. 'name': '河南',
  33382. 'cp': [
  33383. 113.4668,
  33384. 33.8818
  33385. ],
  33386. 'childNum': 17
  33387. },
  33388. 'geometry': {
  33389. 'type': 'Polygon',
  33390. 'coordinates': ['@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐'],
  33391. 'encodeOffsets': [[
  33392. 113040,
  33393. 35416
  33394. ]]
  33395. }
  33396. },
  33397. {
  33398. 'type': 'Feature',
  33399. 'id': 'liao_ning',
  33400. 'properties': {
  33401. 'name': '辽宁',
  33402. 'cp': [
  33403. 122.3438,
  33404. 41.0889
  33405. ],
  33406. 'childNum': 14
  33407. },
  33408. 'geometry': {
  33409. 'type': 'Polygon',
  33410. 'coordinates': ['@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО'],
  33411. 'encodeOffsets': [[
  33412. 122131,
  33413. 42301
  33414. ]]
  33415. }
  33416. },
  33417. {
  33418. 'type': 'Feature',
  33419. 'id': 'shan_xi_2',
  33420. 'properties': {
  33421. 'name': '山西',
  33422. 'cp': [
  33423. 112.4121,
  33424. 37.6611
  33425. ],
  33426. 'childNum': 11
  33427. },
  33428. 'geometry': {
  33429. 'type': 'Polygon',
  33430. 'coordinates': ['@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ'],
  33431. 'encodeOffsets': [[
  33432. 113581,
  33433. 39645
  33434. ]]
  33435. }
  33436. },
  33437. {
  33438. 'type': 'Feature',
  33439. 'id': 'an_hui',
  33440. 'properties': {
  33441. 'name': '安徽',
  33442. 'cp': [
  33443. 117.2461,
  33444. 32.0361
  33445. ],
  33446. 'childNum': 17
  33447. },
  33448. 'geometry': {
  33449. 'type': 'Polygon',
  33450. 'coordinates': ['@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ'],
  33451. 'encodeOffsets': [[
  33452. 119431,
  33453. 34741
  33454. ]]
  33455. }
  33456. },
  33457. {
  33458. 'type': 'Feature',
  33459. 'id': 'fu_jian',
  33460. 'properties': {
  33461. 'name': '福建',
  33462. 'cp': [
  33463. 118.3008,
  33464. 25.9277
  33465. ],
  33466. 'childNum': 9
  33467. },
  33468. 'geometry': {
  33469. 'type': 'Polygon',
  33470. 'coordinates': ['@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ'],
  33471. 'encodeOffsets': [[
  33472. 121321,
  33473. 28981
  33474. ]]
  33475. }
  33476. },
  33477. {
  33478. 'type': 'Feature',
  33479. 'id': 'zhe_jiang',
  33480. 'properties': {
  33481. 'name': '浙江',
  33482. 'cp': [
  33483. 120.498,
  33484. 29.0918
  33485. ],
  33486. 'childNum': 11
  33487. },
  33488. 'geometry': {
  33489. 'type': 'Polygon',
  33490. 'coordinates': ['@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ'],
  33491. 'encodeOffsets': [[
  33492. 121051,
  33493. 30105
  33494. ]]
  33495. }
  33496. },
  33497. {
  33498. 'type': 'Feature',
  33499. 'id': 'jiang_su',
  33500. 'properties': {
  33501. 'name': '江苏',
  33502. 'cp': [
  33503. 120.0586,
  33504. 32.915
  33505. ],
  33506. 'childNum': 13
  33507. },
  33508. 'geometry': {
  33509. 'type': 'Polygon',
  33510. 'coordinates': ['@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ'],
  33511. 'encodeOffsets': [[
  33512. 119161,
  33513. 35460
  33514. ]]
  33515. }
  33516. },
  33517. {
  33518. 'type': 'Feature',
  33519. 'id': 'chong_qing',
  33520. 'properties': {
  33521. 'name': '重庆',
  33522. 'cp': [
  33523. 107.7539,
  33524. 30.1904
  33525. ],
  33526. 'childNum': 40
  33527. },
  33528. 'geometry': {
  33529. 'type': 'Polygon',
  33530. 'coordinates': ['@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ'],
  33531. 'encodeOffsets': [[
  33532. 111150,
  33533. 32446
  33534. ]]
  33535. }
  33536. },
  33537. {
  33538. 'type': 'Feature',
  33539. 'id': 'ning_xia',
  33540. 'properties': {
  33541. 'name': '宁夏',
  33542. 'cp': [
  33543. 105.9961,
  33544. 37.3096
  33545. ],
  33546. 'childNum': 5
  33547. },
  33548. 'geometry': {
  33549. 'type': 'Polygon',
  33550. 'coordinates': ['@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@'],
  33551. 'encodeOffsets': [[
  33552. 106831,
  33553. 38340
  33554. ]]
  33555. }
  33556. },
  33557. {
  33558. 'type': 'Feature',
  33559. 'id': 'hai_nan',
  33560. 'properties': {
  33561. 'name': '海南',
  33562. 'cp': [
  33563. 109.9512,
  33564. 19.2041
  33565. ],
  33566. 'childNum': 18
  33567. },
  33568. 'geometry': {
  33569. 'type': 'Polygon',
  33570. 'coordinates': ['@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ'],
  33571. 'encodeOffsets': [[
  33572. 111240,
  33573. 19846
  33574. ]]
  33575. }
  33576. },
  33577. {
  33578. 'type': 'Feature',
  33579. 'id': 'tai_wan',
  33580. 'properties': {
  33581. 'name': '台湾',
  33582. 'cp': [
  33583. 121.0254,
  33584. 23.5986
  33585. ],
  33586. 'childNum': 1
  33587. },
  33588. 'geometry': {
  33589. 'type': 'Polygon',
  33590. 'coordinates': ['@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ'],
  33591. 'encodeOffsets': [[
  33592. 124831,
  33593. 25650
  33594. ]]
  33595. }
  33596. },
  33597. {
  33598. 'type': 'Feature',
  33599. 'id': 'bei_jing',
  33600. 'properties': {
  33601. 'name': '北京',
  33602. 'cp': [
  33603. 116.4551,
  33604. 40.2539
  33605. ],
  33606. 'childNum': 19
  33607. },
  33608. 'geometry': {
  33609. 'type': 'Polygon',
  33610. 'coordinates': ['@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ'],
  33611. 'encodeOffsets': [[
  33612. 120241,
  33613. 41176
  33614. ]]
  33615. }
  33616. },
  33617. {
  33618. 'type': 'Feature',
  33619. 'id': 'tian_jin',
  33620. 'properties': {
  33621. 'name': '天津',
  33622. 'cp': [
  33623. 117.4219,
  33624. 39.4189
  33625. ],
  33626. 'childNum': 18
  33627. },
  33628. 'geometry': {
  33629. 'type': 'Polygon',
  33630. 'coordinates': ['@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО'],
  33631. 'encodeOffsets': [[
  33632. 119610,
  33633. 40545
  33634. ]]
  33635. }
  33636. },
  33637. {
  33638. 'type': 'Feature',
  33639. 'id': 'shang_hai',
  33640. 'properties': {
  33641. 'name': '上海',
  33642. 'cp': [
  33643. 121.4648,
  33644. 31.2891
  33645. ],
  33646. 'childNum': 19
  33647. },
  33648. 'geometry': {
  33649. 'type': 'Polygon',
  33650. 'coordinates': ['@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒'],
  33651. 'encodeOffsets': [[
  33652. 123840,
  33653. 31771
  33654. ]]
  33655. }
  33656. },
  33657. {
  33658. 'type': 'Feature',
  33659. 'id': 'xiang_gang',
  33660. 'properties': {
  33661. 'name': '香港',
  33662. 'cp': [
  33663. 114.2578,
  33664. 22.3242
  33665. ],
  33666. 'childNum': 1
  33667. },
  33668. 'geometry': {
  33669. 'type': 'Polygon',
  33670. 'coordinates': ['@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@'],
  33671. 'encodeOffsets': [[
  33672. 117361,
  33673. 22950
  33674. ]]
  33675. }
  33676. },
  33677. {
  33678. 'type': 'Feature',
  33679. 'id': 'ao_men',
  33680. 'properties': {
  33681. 'name': '澳门',
  33682. 'cp': [
  33683. 113.5547,
  33684. 22.1484
  33685. ],
  33686. 'childNum': 1
  33687. },
  33688. 'geometry': {
  33689. 'type': 'Polygon',
  33690. 'coordinates': ['@@X¯aWĀ„@l'],
  33691. 'encodeOffsets': [[
  33692. 116325,
  33693. 22697
  33694. ]]
  33695. }
  33696. }
  33697. ],
  33698. 'UTF8Encoding': true
  33699. };
  33700. });define('echarts/util/mapData/geoJson/chong_qing_geo', [], function () {
  33701. return {
  33702. 'type': 'FeatureCollection',
  33703. 'features': [
  33704. {
  33705. 'type': 'Feature',
  33706. 'id': '500242',
  33707. 'properties': {
  33708. 'name': '酉阳土家族苗族自治县',
  33709. 'cp': [
  33710. 108.8196,
  33711. 28.8666
  33712. ],
  33713. 'childNum': 1
  33714. },
  33715. 'geometry': {
  33716. 'type': 'Polygon',
  33717. '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Ž'],
  33718. 'encodeOffsets': [[
  33719. 110914,
  33720. 29695
  33721. ]]
  33722. }
  33723. },
  33724. {
  33725. 'type': 'Feature',
  33726. 'id': '500236',
  33727. 'properties': {
  33728. 'name': '奉节县',
  33729. 'cp': [
  33730. 109.3909,
  33731. 30.9265
  33732. ],
  33733. 'childNum': 1
  33734. },
  33735. 'geometry': {
  33736. 'type': 'Polygon',
  33737. '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'],
  33738. 'encodeOffsets': [[
  33739. 111781,
  33740. 31658
  33741. ]]
  33742. }
  33743. },
  33744. {
  33745. 'type': 'Feature',
  33746. 'id': '500238',
  33747. 'properties': {
  33748. 'name': '巫溪县',
  33749. 'cp': [
  33750. 109.3359,
  33751. 31.4813
  33752. ],
  33753. 'childNum': 1
  33754. },
  33755. 'geometry': {
  33756. 'type': 'Polygon',
  33757. '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'],
  33758. 'encodeOffsets': [[
  33759. 111488,
  33760. 32361
  33761. ]]
  33762. }
  33763. },
  33764. {
  33765. 'type': 'Feature',
  33766. 'id': '500234',
  33767. 'properties': {
  33768. 'name': '开县',
  33769. 'cp': [
  33770. 108.4131,
  33771. 31.2561
  33772. ],
  33773. 'childNum': 1
  33774. },
  33775. 'geometry': {
  33776. 'type': 'Polygon',
  33777. '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'],
  33778. 'encodeOffsets': [[
  33779. 111150,
  33780. 32434
  33781. ]]
  33782. }
  33783. },
  33784. {
  33785. 'type': 'Feature',
  33786. 'id': '500243',
  33787. 'properties': {
  33788. 'name': '彭水苗族土家族自治县',
  33789. 'cp': [
  33790. 108.2043,
  33791. 29.3994
  33792. ],
  33793. 'childNum': 1
  33794. },
  33795. 'geometry': {
  33796. 'type': 'Polygon',
  33797. '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¦'],
  33798. 'encodeOffsets': [[
  33799. 110408,
  33800. 29729
  33801. ]]
  33802. }
  33803. },
  33804. {
  33805. 'type': 'Feature',
  33806. 'id': '500235',
  33807. 'properties': {
  33808. 'name': '云阳县',
  33809. 'cp': [
  33810. 108.8306,
  33811. 31.0089
  33812. ],
  33813. 'childNum': 1
  33814. },
  33815. 'geometry': {
  33816. 'type': 'Polygon',
  33817. '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'],
  33818. 'encodeOffsets': [[
  33819. 111016,
  33820. 31742
  33821. ]]
  33822. }
  33823. },
  33824. {
  33825. 'type': 'Feature',
  33826. 'id': '500101',
  33827. 'properties': {
  33828. 'name': '万州区',
  33829. 'cp': [
  33830. 108.3911,
  33831. 30.6958
  33832. ],
  33833. 'childNum': 1
  33834. },
  33835. 'geometry': {
  33836. 'type': 'Polygon',
  33837. '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ƒ„'],
  33838. 'encodeOffsets': [[
  33839. 110464,
  33840. 31551
  33841. ]]
  33842. }
  33843. },
  33844. {
  33845. 'type': 'Feature',
  33846. 'id': '500229',
  33847. 'properties': {
  33848. 'name': '城口县',
  33849. 'cp': [
  33850. 108.7756,
  33851. 31.9098
  33852. ],
  33853. 'childNum': 1
  33854. },
  33855. 'geometry': {
  33856. 'type': 'Polygon',
  33857. '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'],
  33858. 'encodeOffsets': [[
  33859. 111893,
  33860. 32513
  33861. ]]
  33862. }
  33863. },
  33864. {
  33865. 'type': 'Feature',
  33866. 'id': '500116',
  33867. 'properties': {
  33868. 'name': '江津区',
  33869. 'cp': [
  33870. 106.2158,
  33871. 28.9874
  33872. ],
  33873. 'childNum': 1
  33874. },
  33875. 'geometry': {
  33876. 'type': 'Polygon',
  33877. '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Ü'],
  33878. 'encodeOffsets': [[
  33879. 108585,
  33880. 30032
  33881. ]]
  33882. }
  33883. },
  33884. {
  33885. 'type': 'Feature',
  33886. 'id': '500240',
  33887. 'properties': {
  33888. 'name': '石柱土家族自治县',
  33889. 'cp': [
  33890. 108.2813,
  33891. 30.1025
  33892. ],
  33893. 'childNum': 1
  33894. },
  33895. 'geometry': {
  33896. 'type': 'Polygon',
  33897. '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'],
  33898. 'encodeOffsets': [[
  33899. 110588,
  33900. 30769
  33901. ]]
  33902. }
  33903. },
  33904. {
  33905. 'type': 'Feature',
  33906. 'id': '500237',
  33907. 'properties': {
  33908. 'name': '巫山县',
  33909. 'cp': [
  33910. 109.8853,
  33911. 31.1188
  33912. ],
  33913. 'childNum': 1
  33914. },
  33915. 'geometry': {
  33916. 'type': 'Polygon',
  33917. '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'],
  33918. 'encodeOffsets': [[
  33919. 112399,
  33920. 31917
  33921. ]]
  33922. }
  33923. },
  33924. {
  33925. 'type': 'Feature',
  33926. 'id': '500102',
  33927. 'properties': {
  33928. 'name': '涪陵区',
  33929. 'cp': [
  33930. 107.3364,
  33931. 29.6796
  33932. ],
  33933. 'childNum': 1
  33934. },
  33935. 'geometry': {
  33936. 'type': 'Polygon',
  33937. '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'],
  33938. 'encodeOffsets': [[
  33939. 109508,
  33940. 30207
  33941. ]]
  33942. }
  33943. },
  33944. {
  33945. 'type': 'Feature',
  33946. 'id': '500230',
  33947. 'properties': {
  33948. 'name': '丰都县',
  33949. 'cp': [
  33950. 107.8418,
  33951. 29.9048
  33952. ],
  33953. 'childNum': 1
  33954. },
  33955. 'geometry': {
  33956. 'type': 'Polygon',
  33957. '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'],
  33958. 'encodeOffsets': [[
  33959. 110048,
  33960. 30713
  33961. ]]
  33962. }
  33963. },
  33964. {
  33965. 'type': 'Feature',
  33966. 'id': '500232',
  33967. 'properties': {
  33968. 'name': '武隆县',
  33969. 'cp': [
  33970. 107.655,
  33971. 29.35
  33972. ],
  33973. 'childNum': 1
  33974. },
  33975. 'geometry': {
  33976. 'type': 'Polygon',
  33977. '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¦„`„„'],
  33978. 'encodeOffsets': [[
  33979. 110262,
  33980. 30291
  33981. ]]
  33982. }
  33983. },
  33984. {
  33985. 'type': 'Feature',
  33986. 'id': '500119',
  33987. 'properties': {
  33988. 'name': '南川区',
  33989. 'cp': [
  33990. 107.1716,
  33991. 29.1302
  33992. ],
  33993. 'childNum': 1
  33994. },
  33995. 'geometry': {
  33996. 'type': 'Polygon',
  33997. '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'],
  33998. 'encodeOffsets': [[
  33999. 109463,
  34000. 29830
  34001. ]]
  34002. }
  34003. },
  34004. {
  34005. 'type': 'Feature',
  34006. 'id': '500241',
  34007. 'properties': {
  34008. 'name': '秀山土家族苗族自治县',
  34009. 'cp': [
  34010. 109.0173,
  34011. 28.5205
  34012. ],
  34013. 'childNum': 1
  34014. },
  34015. 'geometry': {
  34016. 'type': 'Polygon',
  34017. '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'],
  34018. 'encodeOffsets': [[
  34019. 111330,
  34020. 29183
  34021. ]]
  34022. }
  34023. },
  34024. {
  34025. 'type': 'Feature',
  34026. 'id': '500114',
  34027. 'properties': {
  34028. 'name': '黔江区',
  34029. 'cp': [
  34030. 108.7207,
  34031. 29.4708
  34032. ],
  34033. 'childNum': 1
  34034. },
  34035. 'geometry': {
  34036. 'type': 'Polygon',
  34037. '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'],
  34038. 'encodeOffsets': [[
  34039. 111106,
  34040. 30420
  34041. ]]
  34042. }
  34043. },
  34044. {
  34045. 'type': 'Feature',
  34046. 'id': '500117',
  34047. 'properties': {
  34048. 'name': '合川区',
  34049. 'cp': [
  34050. 106.3257,
  34051. 30.108
  34052. ],
  34053. 'childNum': 1
  34054. },
  34055. 'geometry': {
  34056. 'type': 'Polygon',
  34057. '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'],
  34058. 'encodeOffsets': [[
  34059. 108529,
  34060. 31101
  34061. ]]
  34062. }
  34063. },
  34064. {
  34065. 'type': 'Feature',
  34066. 'id': '500222',
  34067. 'properties': {
  34068. 'name': '綦江县',
  34069. 'cp': [
  34070. 106.6553,
  34071. 28.8171
  34072. ],
  34073. 'childNum': 1
  34074. },
  34075. 'geometry': {
  34076. 'type': 'Polygon',
  34077. '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¤'],
  34078. 'encodeOffsets': [[
  34079. 109137,
  34080. 29779
  34081. ]]
  34082. }
  34083. },
  34084. {
  34085. 'type': 'Feature',
  34086. 'id': '500233',
  34087. 'properties': {
  34088. 'name': '忠县',
  34089. 'cp': [
  34090. 107.8967,
  34091. 30.3223
  34092. ],
  34093. 'childNum': 1
  34094. },
  34095. 'geometry': {
  34096. 'type': 'Polygon',
  34097. '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'],
  34098. 'encodeOffsets': [[
  34099. 110239,
  34100. 31146
  34101. ]]
  34102. }
  34103. },
  34104. {
  34105. 'type': 'Feature',
  34106. 'id': '500228',
  34107. 'properties': {
  34108. 'name': '梁平县',
  34109. 'cp': [
  34110. 107.7429,
  34111. 30.6519
  34112. ],
  34113. 'childNum': 1
  34114. },
  34115. 'geometry': {
  34116. 'type': 'Polygon',
  34117. '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'],
  34118. 'encodeOffsets': [[
  34119. 109980,
  34120. 31247
  34121. ]]
  34122. }
  34123. },
  34124. {
  34125. 'type': 'Feature',
  34126. 'id': '500113',
  34127. 'properties': {
  34128. 'name': '巴南区',
  34129. 'cp': [
  34130. 106.7322,
  34131. 29.4214
  34132. ],
  34133. 'childNum': 1
  34134. },
  34135. 'geometry': {
  34136. 'type': 'Polygon',
  34137. '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'],
  34138. 'encodeOffsets': [[
  34139. 108990,
  34140. 30061
  34141. ]]
  34142. }
  34143. },
  34144. {
  34145. 'type': 'Feature',
  34146. 'id': '500223',
  34147. 'properties': {
  34148. 'name': '潼南县',
  34149. 'cp': [
  34150. 105.7764,
  34151. 30.1135
  34152. ],
  34153. 'childNum': 1
  34154. },
  34155. 'geometry': {
  34156. 'type': 'Polygon',
  34157. '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'],
  34158. 'encodeOffsets': [[
  34159. 108529,
  34160. 31101
  34161. ]]
  34162. }
  34163. },
  34164. {
  34165. 'type': 'Feature',
  34166. 'id': '500118',
  34167. 'properties': {
  34168. 'name': '永川区',
  34169. 'cp': [
  34170. 105.8643,
  34171. 29.2566
  34172. ],
  34173. 'childNum': 1
  34174. },
  34175. 'geometry': {
  34176. 'type': 'Polygon',
  34177. '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'],
  34178. 'encodeOffsets': [[
  34179. 108192,
  34180. 30038
  34181. ]]
  34182. }
  34183. },
  34184. {
  34185. 'type': 'Feature',
  34186. 'id': '500231',
  34187. 'properties': {
  34188. 'name': '垫江县',
  34189. 'cp': [
  34190. 107.4573,
  34191. 30.2454
  34192. ],
  34193. 'childNum': 1
  34194. },
  34195. 'geometry': {
  34196. 'type': 'Polygon',
  34197. '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'],
  34198. 'encodeOffsets': [[
  34199. 109812,
  34200. 30961
  34201. ]]
  34202. }
  34203. },
  34204. {
  34205. 'type': 'Feature',
  34206. 'id': '500112',
  34207. 'properties': {
  34208. 'name': '渝北区',
  34209. 'cp': [
  34210. 106.7212,
  34211. 29.8499
  34212. ],
  34213. 'childNum': 1
  34214. },
  34215. 'geometry': {
  34216. 'type': 'Polygon',
  34217. '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'],
  34218. 'encodeOffsets': [[
  34219. 109013,
  34220. 30381
  34221. ]]
  34222. }
  34223. },
  34224. {
  34225. 'type': 'Feature',
  34226. 'id': '500115',
  34227. 'properties': {
  34228. 'name': '长寿区',
  34229. 'cp': [
  34230. 107.1606,
  34231. 29.9762
  34232. ],
  34233. 'childNum': 1
  34234. },
  34235. 'geometry': {
  34236. 'type': 'Polygon',
  34237. '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'],
  34238. 'encodeOffsets': [[
  34239. 109429,
  34240. 30747
  34241. ]]
  34242. }
  34243. },
  34244. {
  34245. 'type': 'Feature',
  34246. 'id': '500225',
  34247. 'properties': {
  34248. 'name': '大足县',
  34249. 'cp': [
  34250. 105.7544,
  34251. 29.6136
  34252. ],
  34253. 'childNum': 1
  34254. },
  34255. 'geometry': {
  34256. 'type': 'Polygon',
  34257. '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'],
  34258. 'encodeOffsets': [[
  34259. 108270,
  34260. 30578
  34261. ]]
  34262. }
  34263. },
  34264. {
  34265. 'type': 'Feature',
  34266. 'id': '500224',
  34267. 'properties': {
  34268. 'name': '铜梁县',
  34269. 'cp': [
  34270. 106.0291,
  34271. 29.8059
  34272. ],
  34273. 'childNum': 1
  34274. },
  34275. 'geometry': {
  34276. 'type': 'Polygon',
  34277. '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'],
  34278. 'encodeOffsets': [[
  34279. 108316,
  34280. 30527
  34281. ]]
  34282. }
  34283. },
  34284. {
  34285. 'type': 'Feature',
  34286. 'id': '500226',
  34287. 'properties': {
  34288. 'name': '荣昌县',
  34289. 'cp': [
  34290. 105.5127,
  34291. 29.4708
  34292. ],
  34293. 'childNum': 1
  34294. },
  34295. 'geometry': {
  34296. 'type': 'Polygon',
  34297. '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š@'],
  34298. 'encodeOffsets': [[
  34299. 108012,
  34300. 30392
  34301. ]]
  34302. }
  34303. },
  34304. {
  34305. 'type': 'Feature',
  34306. 'id': '500227',
  34307. 'properties': {
  34308. 'name': '璧山县',
  34309. 'cp': [
  34310. 106.2048,
  34311. 29.5807
  34312. ],
  34313. 'childNum': 1
  34314. },
  34315. 'geometry': {
  34316. 'type': 'Polygon',
  34317. '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'],
  34318. 'encodeOffsets': [[
  34319. 108585,
  34320. 30032
  34321. ]]
  34322. }
  34323. },
  34324. {
  34325. 'type': 'Feature',
  34326. 'id': '500109',
  34327. 'properties': {
  34328. 'name': '北碚区',
  34329. 'cp': [
  34330. 106.5674,
  34331. 29.8883
  34332. ],
  34333. 'childNum': 1
  34334. },
  34335. 'geometry': {
  34336. 'type': 'Polygon',
  34337. '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'],
  34338. 'encodeOffsets': [[
  34339. 108855,
  34340. 30449
  34341. ]]
  34342. }
  34343. },
  34344. {
  34345. 'type': 'Feature',
  34346. 'id': '500110',
  34347. 'properties': {
  34348. 'name': '万盛区',
  34349. 'cp': [
  34350. 106.908,
  34351. 28.9325
  34352. ],
  34353. 'childNum': 1
  34354. },
  34355. 'geometry': {
  34356. 'type': 'Polygon',
  34357. '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'],
  34358. 'encodeOffsets': [[
  34359. 109452,
  34360. 29779
  34361. ]]
  34362. }
  34363. },
  34364. {
  34365. 'type': 'Feature',
  34366. 'id': '500107',
  34367. 'properties': {
  34368. 'name': '九龙坡区',
  34369. 'cp': [
  34370. 106.3586,
  34371. 29.4049
  34372. ],
  34373. 'childNum': 1
  34374. },
  34375. 'geometry': {
  34376. 'type': 'Polygon',
  34377. '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'],
  34378. 'encodeOffsets': [[
  34379. 108799,
  34380. 30241
  34381. ]]
  34382. }
  34383. },
  34384. {
  34385. 'type': 'Feature',
  34386. 'id': '500106',
  34387. 'properties': {
  34388. 'name': '沙坪坝区',
  34389. 'cp': [
  34390. 106.3696,
  34391. 29.6191
  34392. ],
  34393. 'childNum': 1
  34394. },
  34395. 'geometry': {
  34396. 'type': 'Polygon',
  34397. 'coordinates': ['@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL'],
  34398. 'encodeOffsets': [[
  34399. 108799,
  34400. 30241
  34401. ]]
  34402. }
  34403. },
  34404. {
  34405. 'type': 'Feature',
  34406. 'id': '500108',
  34407. 'properties': {
  34408. 'name': '南岸区',
  34409. 'cp': [
  34410. 106.6663,
  34411. 29.5367
  34412. ],
  34413. 'childNum': 1
  34414. },
  34415. 'geometry': {
  34416. 'type': 'Polygon',
  34417. 'coordinates': ['@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n'],
  34418. 'encodeOffsets': [[
  34419. 109092,
  34420. 30241
  34421. ]]
  34422. }
  34423. },
  34424. {
  34425. 'type': 'Feature',
  34426. 'id': '500105',
  34427. 'properties': {
  34428. 'name': '江北区',
  34429. 'cp': [
  34430. 106.8311,
  34431. 29.6191
  34432. ],
  34433. 'childNum': 1
  34434. },
  34435. 'geometry': {
  34436. 'type': 'Polygon',
  34437. 'coordinates': ['@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l'],
  34438. 'encodeOffsets': [[
  34439. 109013,
  34440. 30319
  34441. ]]
  34442. }
  34443. },
  34444. {
  34445. 'type': 'Feature',
  34446. 'id': '500104',
  34447. 'properties': {
  34448. 'name': '大渡口区',
  34449. 'cp': [
  34450. 106.4905,
  34451. 29.4214
  34452. ],
  34453. 'childNum': 1
  34454. },
  34455. 'geometry': {
  34456. 'type': 'Polygon',
  34457. 'coordinates': ['@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U'],
  34458. 'encodeOffsets': [[
  34459. 109080,
  34460. 30190
  34461. ]]
  34462. }
  34463. },
  34464. {
  34465. 'type': 'Feature',
  34466. 'id': '500111',
  34467. 'properties': {
  34468. 'name': '双桥区',
  34469. 'cp': [
  34470. 105.7874,
  34471. 29.4928
  34472. ],
  34473. 'childNum': 1
  34474. },
  34475. 'geometry': {
  34476. 'type': 'Polygon',
  34477. 'coordinates': ['@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK'],
  34478. 'encodeOffsets': [[
  34479. 108372,
  34480. 30235
  34481. ]]
  34482. }
  34483. },
  34484. {
  34485. 'type': 'Feature',
  34486. 'id': '500103',
  34487. 'properties': {
  34488. 'name': '渝中区',
  34489. 'cp': [
  34490. 106.5344,
  34491. 29.5477
  34492. ],
  34493. 'childNum': 1
  34494. },
  34495. 'geometry': {
  34496. 'type': 'Polygon',
  34497. 'coordinates': ['@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@'],
  34498. 'encodeOffsets': [[
  34499. 109036,
  34500. 30257
  34501. ]]
  34502. }
  34503. }
  34504. ],
  34505. 'UTF8Encoding': true
  34506. };
  34507. });define('echarts/util/mapData/geoJson/fu_jian_geo', [], function () {
  34508. return {
  34509. 'type': 'FeatureCollection',
  34510. 'features': [
  34511. {
  34512. 'type': 'Feature',
  34513. 'id': '3507',
  34514. 'properties': {
  34515. 'name': '南平市',
  34516. 'cp': [
  34517. 118.136,
  34518. 27.2845
  34519. ],
  34520. 'childNum': 10
  34521. },
  34522. 'geometry': {
  34523. 'type': 'Polygon',
  34524. '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'],
  34525. 'encodeOffsets': [[
  34526. 122119,
  34527. 28086
  34528. ]]
  34529. }
  34530. },
  34531. {
  34532. 'type': 'Feature',
  34533. 'id': '3504',
  34534. 'properties': {
  34535. 'name': '三明市',
  34536. 'cp': [
  34537. 117.5317,
  34538. 26.3013
  34539. ],
  34540. 'childNum': 11
  34541. },
  34542. 'geometry': {
  34543. 'type': 'Polygon',
  34544. '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'],
  34545. 'encodeOffsets': [[
  34546. 119858,
  34547. 27754
  34548. ]]
  34549. }
  34550. },
  34551. {
  34552. 'type': 'Feature',
  34553. 'id': '3508',
  34554. 'properties': {
  34555. 'name': '龙岩市',
  34556. 'cp': [
  34557. 116.8066,
  34558. 25.2026
  34559. ],
  34560. 'childNum': 7
  34561. },
  34562. 'geometry': {
  34563. 'type': 'Polygon',
  34564. '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'],
  34565. 'encodeOffsets': [[
  34566. 119194,
  34567. 26657
  34568. ]]
  34569. }
  34570. },
  34571. {
  34572. 'type': 'Feature',
  34573. 'id': '3509',
  34574. 'properties': {
  34575. 'name': '宁德市',
  34576. 'cp': [
  34577. 119.6521,
  34578. 26.9824
  34579. ],
  34580. 'childNum': 9
  34581. },
  34582. 'geometry': {
  34583. 'type': 'Polygon',
  34584. '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'],
  34585. 'encodeOffsets': [[
  34586. 121816,
  34587. 27816
  34588. ]]
  34589. }
  34590. },
  34591. {
  34592. 'type': 'Feature',
  34593. 'id': '3501',
  34594. 'properties': {
  34595. 'name': '福州市',
  34596. 'cp': [
  34597. 119.4543,
  34598. 25.9222
  34599. ],
  34600. 'childNum': 9
  34601. },
  34602. 'geometry': {
  34603. 'type': 'Polygon',
  34604. '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„'],
  34605. 'encodeOffsets': [[
  34606. 121253,
  34607. 26511
  34608. ]]
  34609. }
  34610. },
  34611. {
  34612. 'type': 'Feature',
  34613. 'id': '3506',
  34614. 'properties': {
  34615. 'name': '漳州市',
  34616. 'cp': [
  34617. 117.5757,
  34618. 24.3732
  34619. ],
  34620. 'childNum': 10
  34621. },
  34622. 'geometry': {
  34623. 'type': 'Polygon',
  34624. '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'],
  34625. 'encodeOffsets': [[
  34626. 119712,
  34627. 24953
  34628. ]]
  34629. }
  34630. },
  34631. {
  34632. 'type': 'Feature',
  34633. 'id': '3505',
  34634. 'properties': {
  34635. 'name': '泉州市',
  34636. 'cp': [
  34637. 118.3228,
  34638. 25.1147
  34639. ],
  34640. 'childNum': 9
  34641. },
  34642. 'geometry': {
  34643. 'type': 'Polygon',
  34644. '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'],
  34645. 'encodeOffsets': [[
  34646. 120398,
  34647. 25797
  34648. ]]
  34649. }
  34650. },
  34651. {
  34652. 'type': 'Feature',
  34653. 'id': '3503',
  34654. 'properties': {
  34655. 'name': '莆田市',
  34656. 'cp': [
  34657. 119.0918,
  34658. 25.3455
  34659. ],
  34660. 'childNum': 2
  34661. },
  34662. 'geometry': {
  34663. 'type': 'Polygon',
  34664. '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'],
  34665. 'encodeOffsets': [[
  34666. 121388,
  34667. 26264
  34668. ]]
  34669. }
  34670. },
  34671. {
  34672. 'type': 'Feature',
  34673. 'id': '3502',
  34674. 'properties': {
  34675. 'name': '厦门市',
  34676. 'cp': [
  34677. 118.1689,
  34678. 24.6478
  34679. ],
  34680. 'childNum': 1
  34681. },
  34682. 'geometry': {
  34683. 'type': 'Polygon',
  34684. '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'],
  34685. 'encodeOffsets': [[
  34686. 120747,
  34687. 25465
  34688. ]]
  34689. }
  34690. }
  34691. ],
  34692. 'UTF8Encoding': true
  34693. };
  34694. });define('echarts/util/mapData/geoJson/gan_su_geo', [], function () {
  34695. return {
  34696. 'type': 'FeatureCollection',
  34697. 'features': [
  34698. {
  34699. 'type': 'Feature',
  34700. 'id': '6209',
  34701. 'properties': {
  34702. 'name': '酒泉市',
  34703. 'cp': [
  34704. 96.2622,
  34705. 40.4517
  34706. ],
  34707. 'childNum': 8
  34708. },
  34709. 'geometry': {
  34710. 'type': 'Polygon',
  34711. '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ťÇğÑ'],
  34712. 'encodeOffsets': [[
  34713. 101892,
  34714. 40821
  34715. ]]
  34716. }
  34717. },
  34718. {
  34719. 'type': 'Feature',
  34720. 'id': '6207',
  34721. 'properties': {
  34722. 'name': '张掖市',
  34723. 'cp': [
  34724. 99.7998,
  34725. 38.7433
  34726. ],
  34727. 'childNum': 9
  34728. },
  34729. 'geometry': {
  34730. 'type': 'Polygon',
  34731. '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'],
  34732. 'encodeOffsets': [[
  34733. 99720,
  34734. 40090
  34735. ]]
  34736. }
  34737. },
  34738. {
  34739. 'type': 'Feature',
  34740. 'id': '6230',
  34741. 'properties': {
  34742. 'name': '甘南藏族自治州',
  34743. 'cp': [
  34744. 102.9199,
  34745. 34.6893
  34746. ],
  34747. 'childNum': 9
  34748. },
  34749. 'geometry': {
  34750. 'type': 'Polygon',
  34751. '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'],
  34752. 'encodeOffsets': [[
  34753. 105210,
  34754. 36349
  34755. ]]
  34756. }
  34757. },
  34758. {
  34759. 'type': 'Feature',
  34760. 'id': '6206',
  34761. 'properties': {
  34762. 'name': '武威市',
  34763. 'cp': [
  34764. 103.0188,
  34765. 38.1061
  34766. ],
  34767. 'childNum': 4
  34768. },
  34769. 'geometry': {
  34770. 'type': 'Polygon',
  34771. '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™˜ƛɞÝƨů'],
  34772. 'encodeOffsets': [[
  34773. 106336,
  34774. 38543
  34775. ]]
  34776. }
  34777. },
  34778. {
  34779. 'type': 'Feature',
  34780. 'id': '6212',
  34781. 'properties': {
  34782. 'name': '陇南市',
  34783. 'cp': [
  34784. 105.304,
  34785. 33.5632
  34786. ],
  34787. 'childNum': 9
  34788. },
  34789. 'geometry': {
  34790. 'type': 'Polygon',
  34791. '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@¼'],
  34792. 'encodeOffsets': [[
  34793. 106527,
  34794. 34943
  34795. ]]
  34796. }
  34797. },
  34798. {
  34799. 'type': 'Feature',
  34800. 'id': '6210',
  34801. 'properties': {
  34802. 'name': '庆阳市',
  34803. 'cp': [
  34804. 107.5342,
  34805. 36.2
  34806. ],
  34807. 'childNum': 8
  34808. },
  34809. 'geometry': {
  34810. 'type': 'Polygon',
  34811. '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'],
  34812. 'encodeOffsets': [[
  34813. 111229,
  34814. 36383
  34815. ]]
  34816. }
  34817. },
  34818. {
  34819. 'type': 'Feature',
  34820. 'id': '6204',
  34821. 'properties': {
  34822. 'name': '白银市',
  34823. 'cp': [
  34824. 104.8645,
  34825. 36.5076
  34826. ],
  34827. 'childNum': 6
  34828. },
  34829. 'geometry': {
  34830. 'type': 'Polygon',
  34831. '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„°'],
  34832. 'encodeOffsets': [[
  34833. 106077,
  34834. 37885
  34835. ]]
  34836. }
  34837. },
  34838. {
  34839. 'type': 'Feature',
  34840. 'id': '6211',
  34841. 'properties': {
  34842. 'name': '定西市',
  34843. 'cp': [
  34844. 104.5569,
  34845. 35.0848
  34846. ],
  34847. 'childNum': 7
  34848. },
  34849. 'geometry': {
  34850. 'type': 'Polygon',
  34851. '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@'],
  34852. 'encodeOffsets': [[
  34853. 106122,
  34854. 36794
  34855. ]]
  34856. }
  34857. },
  34858. {
  34859. 'type': 'Feature',
  34860. 'id': '6205',
  34861. 'properties': {
  34862. 'name': '天水市',
  34863. 'cp': [
  34864. 105.6445,
  34865. 34.6289
  34866. ],
  34867. 'childNum': 6
  34868. },
  34869. 'geometry': {
  34870. 'type': 'Polygon',
  34871. '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„‚܁'],
  34872. 'encodeOffsets': [[
  34873. 108180,
  34874. 35984
  34875. ]]
  34876. }
  34877. },
  34878. {
  34879. 'type': 'Feature',
  34880. 'id': '6201',
  34881. 'properties': {
  34882. 'name': '兰州市',
  34883. 'cp': [
  34884. 103.5901,
  34885. 36.3043
  34886. ],
  34887. 'childNum': 5
  34888. },
  34889. 'geometry': {
  34890. 'type': 'MultiPolygon',
  34891. 'coordinates': [
  34892. ['@@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'],
  34893. ['@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢnĢƒVLU‚°k']
  34894. ],
  34895. 'encodeOffsets': [
  34896. [[
  34897. 105188,
  34898. 37649
  34899. ]],
  34900. [[
  34901. 106077,
  34902. 37885
  34903. ]]
  34904. ]
  34905. }
  34906. },
  34907. {
  34908. 'type': 'Feature',
  34909. 'id': '6208',
  34910. 'properties': {
  34911. 'name': '平凉市',
  34912. 'cp': [
  34913. 107.0728,
  34914. 35.321
  34915. ],
  34916. 'childNum': 7
  34917. },
  34918. 'geometry': {
  34919. 'type': 'Polygon',
  34920. 'coordinates': [
  34921. '@@Æ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„ƒ„',
  34922. '@@@Žż@™mlkƒġk'
  34923. ],
  34924. 'encodeOffsets': [
  34925. [
  34926. 107877,
  34927. 36338
  34928. ],
  34929. [
  34930. 108439,
  34931. 36265
  34932. ]
  34933. ]
  34934. }
  34935. },
  34936. {
  34937. 'type': 'Feature',
  34938. 'id': '6229',
  34939. 'properties': {
  34940. 'name': '临夏回族自治州',
  34941. 'cp': [
  34942. 103.2715,
  34943. 35.5737
  34944. ],
  34945. 'childNum': 8
  34946. },
  34947. 'geometry': {
  34948. 'type': 'Polygon',
  34949. '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'],
  34950. 'encodeOffsets': [[
  34951. 105548,
  34952. 37075
  34953. ]]
  34954. }
  34955. },
  34956. {
  34957. 'type': 'Feature',
  34958. 'id': '6203',
  34959. 'properties': {
  34960. 'name': '金昌市',
  34961. 'cp': [
  34962. 102.074,
  34963. 38.5126
  34964. ],
  34965. 'childNum': 2
  34966. },
  34967. 'geometry': {
  34968. 'type': 'Polygon',
  34969. '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`'],
  34970. 'encodeOffsets': [[
  34971. 103849,
  34972. 38970
  34973. ]]
  34974. }
  34975. },
  34976. {
  34977. 'type': 'Feature',
  34978. 'id': '6202',
  34979. 'properties': {
  34980. 'name': '嘉峪关市',
  34981. 'cp': [
  34982. 98.1738,
  34983. 39.8035
  34984. ],
  34985. 'childNum': 1
  34986. },
  34987. 'geometry': {
  34988. 'type': 'Polygon',
  34989. 'coordinates': ['@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb'],
  34990. 'encodeOffsets': [[
  34991. 100182,
  34992. 40664
  34993. ]]
  34994. }
  34995. }
  34996. ],
  34997. 'UTF8Encoding': true
  34998. };
  34999. });define('echarts/util/mapData/geoJson/guang_dong_geo', [], function () {
  35000. return {
  35001. 'type': 'FeatureCollection',
  35002. 'features': [
  35003. {
  35004. 'type': 'Feature',
  35005. 'id': '4418',
  35006. 'properties': {
  35007. 'name': '清远市',
  35008. 'cp': [
  35009. 112.9175,
  35010. 24.3292
  35011. ],
  35012. 'childNum': 8
  35013. },
  35014. 'geometry': {
  35015. 'type': 'Polygon',
  35016. 'coordinates': ['@@lǯkÿƒaV¯™VaÈU„¥ÆDŽ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'],
  35017. 'encodeOffsets': [[
  35018. 115707,
  35019. 25527
  35020. ]]
  35021. }
  35022. },
  35023. {
  35024. 'type': 'Feature',
  35025. 'id': '4402',
  35026. 'properties': {
  35027. 'name': '韶关市',
  35028. 'cp': [
  35029. 113.7964,
  35030. 24.7028
  35031. ],
  35032. 'childNum': 8
  35033. },
  35034. 'geometry': {
  35035. 'type': 'Polygon',
  35036. '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ƒ@Å¥'],
  35037. 'encodeOffsets': [[
  35038. 117147,
  35039. 25549
  35040. ]]
  35041. }
  35042. },
  35043. {
  35044. 'type': 'Feature',
  35045. 'id': '4408',
  35046. 'properties': {
  35047. 'name': '湛江市',
  35048. 'cp': [
  35049. 110.3577,
  35050. 20.9894
  35051. ],
  35052. 'childNum': 6
  35053. },
  35054. 'geometry': {
  35055. 'type': 'Polygon',
  35056. '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Æ@'],
  35057. 'encodeOffsets': [[
  35058. 113040,
  35059. 22416
  35060. ]]
  35061. }
  35062. },
  35063. {
  35064. 'type': 'Feature',
  35065. 'id': '4414',
  35066. 'properties': {
  35067. 'name': '梅州市',
  35068. 'cp': [
  35069. 116.1255,
  35070. 24.1534
  35071. ],
  35072. 'childNum': 8
  35073. },
  35074. 'geometry': {
  35075. 'type': 'Polygon',
  35076. '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'],
  35077. 'encodeOffsets': [[
  35078. 118125,
  35079. 24419
  35080. ]]
  35081. }
  35082. },
  35083. {
  35084. 'type': 'Feature',
  35085. 'id': '4416',
  35086. 'properties': {
  35087. 'name': '河源市',
  35088. 'cp': [
  35089. 114.917,
  35090. 23.9722
  35091. ],
  35092. 'childNum': 6
  35093. },
  35094. 'geometry': {
  35095. 'type': 'Polygon',
  35096. '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'],
  35097. 'encodeOffsets': [[
  35098. 117057,
  35099. 25167
  35100. ]]
  35101. }
  35102. },
  35103. {
  35104. 'type': 'Feature',
  35105. 'id': '4412',
  35106. 'properties': {
  35107. 'name': '肇庆市',
  35108. 'cp': [
  35109. 112.1265,
  35110. 23.5822
  35111. ],
  35112. 'childNum': 7
  35113. },
  35114. 'geometry': {
  35115. 'type': 'Polygon',
  35116. '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'],
  35117. 'encodeOffsets': [[
  35118. 114627,
  35119. 24818
  35120. ]]
  35121. }
  35122. },
  35123. {
  35124. 'type': 'Feature',
  35125. 'id': '4413',
  35126. 'properties': {
  35127. 'name': '惠州市',
  35128. 'cp': [
  35129. 114.6204,
  35130. 23.1647
  35131. ],
  35132. 'childNum': 4
  35133. },
  35134. 'geometry': {
  35135. 'type': 'Polygon',
  35136. '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'],
  35137. 'encodeOffsets': [[
  35138. 116776,
  35139. 24492
  35140. ]]
  35141. }
  35142. },
  35143. {
  35144. 'type': 'Feature',
  35145. 'id': '4409',
  35146. 'properties': {
  35147. 'name': '茂名市',
  35148. 'cp': [
  35149. 111.0059,
  35150. 22.0221
  35151. ],
  35152. 'childNum': 5
  35153. },
  35154. 'geometry': {
  35155. 'type': 'Polygon',
  35156. '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œš'],
  35157. 'encodeOffsets': [[
  35158. 113761,
  35159. 23237
  35160. ]]
  35161. }
  35162. },
  35163. {
  35164. 'type': 'Feature',
  35165. 'id': '4407',
  35166. 'properties': {
  35167. 'name': '江门市',
  35168. 'cp': [
  35169. 112.6318,
  35170. 22.1484
  35171. ],
  35172. 'childNum': 5
  35173. },
  35174. 'geometry': {
  35175. 'type': 'Polygon',
  35176. '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¦'],
  35177. 'encodeOffsets': [[
  35178. 114852,
  35179. 22928
  35180. ]]
  35181. }
  35182. },
  35183. {
  35184. 'type': 'Feature',
  35185. 'id': '4417',
  35186. 'properties': {
  35187. 'name': '阳江市',
  35188. 'cp': [
  35189. 111.8298,
  35190. 22.0715
  35191. ],
  35192. 'childNum': 4
  35193. },
  35194. 'geometry': {
  35195. 'type': 'Polygon',
  35196. '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Ž„'],
  35197. 'encodeOffsets': [[
  35198. 114053,
  35199. 22782
  35200. ]]
  35201. }
  35202. },
  35203. {
  35204. 'type': 'Feature',
  35205. 'id': '4453',
  35206. 'properties': {
  35207. 'name': '云浮市',
  35208. 'cp': [
  35209. 111.7859,
  35210. 22.8516
  35211. ],
  35212. 'childNum': 5
  35213. },
  35214. 'geometry': {
  35215. 'type': 'Polygon',
  35216. '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'],
  35217. 'encodeOffsets': [[
  35218. 114053,
  35219. 23873
  35220. ]]
  35221. }
  35222. },
  35223. {
  35224. 'type': 'Feature',
  35225. 'id': '4401',
  35226. 'properties': {
  35227. 'name': '广州市',
  35228. 'cp': [
  35229. 113.5107,
  35230. 23.2196
  35231. ],
  35232. 'childNum': 13
  35233. },
  35234. 'geometry': {
  35235. 'type': 'Polygon',
  35236. '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'],
  35237. 'encodeOffsets': [[
  35238. 115673,
  35239. 24019
  35240. ]]
  35241. }
  35242. },
  35243. {
  35244. 'type': 'Feature',
  35245. 'id': '4415',
  35246. 'properties': {
  35247. 'name': '汕尾市',
  35248. 'cp': [
  35249. 115.5762,
  35250. 23.0438
  35251. ],
  35252. 'childNum': 4
  35253. },
  35254. 'geometry': {
  35255. 'type': 'Polygon',
  35256. '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'],
  35257. 'encodeOffsets': [[
  35258. 118193,
  35259. 23806
  35260. ]]
  35261. }
  35262. },
  35263. {
  35264. 'type': 'Feature',
  35265. 'id': '4452',
  35266. 'properties': {
  35267. 'name': '揭阳市',
  35268. 'cp': [
  35269. 116.1255,
  35270. 23.313
  35271. ],
  35272. 'childNum': 5
  35273. },
  35274. 'geometry': {
  35275. 'type': 'Polygon',
  35276. '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¦ÝÆ'],
  35277. 'encodeOffsets': [[
  35278. 118384,
  35279. 24036
  35280. ]]
  35281. }
  35282. },
  35283. {
  35284. 'type': 'Feature',
  35285. 'id': '4404',
  35286. 'properties': {
  35287. 'name': '珠海市',
  35288. 'cp': [
  35289. 113.7305,
  35290. 22.1155
  35291. ],
  35292. 'childNum': 1
  35293. },
  35294. 'geometry': {
  35295. 'type': 'Polygon',
  35296. 'coordinates': [
  35297. '@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçƏ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒVğōŁŻƒķJ@Ț',
  35298. '@@X¯kmèVbnJ‚™'
  35299. ],
  35300. 'encodeOffsets': [
  35301. [
  35302. 115774,
  35303. 22602
  35304. ],
  35305. [
  35306. 116325,
  35307. 22697
  35308. ]
  35309. ]
  35310. }
  35311. },
  35312. {
  35313. 'type': 'Feature',
  35314. 'id': '4406',
  35315. 'properties': {
  35316. 'name': '佛山市',
  35317. 'cp': [
  35318. 112.8955,
  35319. 23.1097
  35320. ],
  35321. 'childNum': 1
  35322. },
  35323. 'geometry': {
  35324. 'type': 'Polygon',
  35325. '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Ċ'],
  35326. 'encodeOffsets': [[
  35327. 115088,
  35328. 23316
  35329. ]]
  35330. }
  35331. },
  35332. {
  35333. 'type': 'Feature',
  35334. 'id': '4451',
  35335. 'properties': {
  35336. 'name': '潮州市',
  35337. 'cp': [
  35338. 116.7847,
  35339. 23.8293
  35340. ],
  35341. 'childNum': 3
  35342. },
  35343. 'geometry': {
  35344. 'type': 'Polygon',
  35345. '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'],
  35346. 'encodeOffsets': [[
  35347. 119161,
  35348. 24306
  35349. ]]
  35350. }
  35351. },
  35352. {
  35353. 'type': 'Feature',
  35354. 'id': '4405',
  35355. 'properties': {
  35356. 'name': '汕头市',
  35357. 'cp': [
  35358. 117.1692,
  35359. 23.3405
  35360. ],
  35361. 'childNum': 2
  35362. },
  35363. 'geometry': {
  35364. 'type': 'Polygon',
  35365. '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'],
  35366. 'encodeOffsets': [[
  35367. 119251,
  35368. 24059
  35369. ]]
  35370. }
  35371. },
  35372. {
  35373. 'type': 'Feature',
  35374. 'id': '4403',
  35375. 'properties': {
  35376. 'name': '深圳市',
  35377. 'cp': [
  35378. 114.5435,
  35379. 22.5439
  35380. ],
  35381. 'childNum': 1
  35382. },
  35383. 'geometry': {
  35384. 'type': 'Polygon',
  35385. '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Ĭ™Æ'],
  35386. 'encodeOffsets': [[
  35387. 116404,
  35388. 23265
  35389. ]]
  35390. }
  35391. },
  35392. {
  35393. 'type': 'Feature',
  35394. 'id': '4419',
  35395. 'properties': {
  35396. 'name': '东莞市',
  35397. 'cp': [
  35398. 113.8953,
  35399. 22.901
  35400. ],
  35401. 'childNum': 1
  35402. },
  35403. 'geometry': {
  35404. 'type': 'Polygon',
  35405. 'coordinates': ['@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy'],
  35406. 'encodeOffsets': [[
  35407. 116573,
  35408. 23670
  35409. ]]
  35410. }
  35411. },
  35412. {
  35413. 'type': 'Feature',
  35414. 'id': '4420',
  35415. 'properties': {
  35416. 'name': '中山市',
  35417. 'cp': [
  35418. 113.4229,
  35419. 22.478
  35420. ],
  35421. 'childNum': 1
  35422. },
  35423. 'geometry': {
  35424. 'type': 'Polygon',
  35425. 'coordinates': ['@@‚XœÒlmšV°ôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš'],
  35426. 'encodeOffsets': [[
  35427. 115887,
  35428. 23209
  35429. ]]
  35430. }
  35431. }
  35432. ],
  35433. 'UTF8Encoding': true
  35434. };
  35435. });define('echarts/util/mapData/geoJson/guang_xi_geo', [], function () {
  35436. return {
  35437. 'type': 'FeatureCollection',
  35438. 'features': [
  35439. {
  35440. 'type': 'Feature',
  35441. 'id': '4510',
  35442. 'properties': {
  35443. 'name': '百色市',
  35444. 'cp': [
  35445. 106.6003,
  35446. 23.9227
  35447. ],
  35448. 'childNum': 12
  35449. },
  35450. 'geometry': {
  35451. 'type': 'Polygon',
  35452. '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@'],
  35453. 'encodeOffsets': [[
  35454. 109126,
  35455. 25684
  35456. ]]
  35457. }
  35458. },
  35459. {
  35460. 'type': 'Feature',
  35461. 'id': '4512',
  35462. 'properties': {
  35463. 'name': '河池市',
  35464. 'cp': [
  35465. 107.8638,
  35466. 24.5819
  35467. ],
  35468. 'childNum': 11
  35469. },
  35470. 'geometry': {
  35471. 'type': 'Polygon',
  35472. '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'],
  35473. 'encodeOffsets': [[
  35474. 109126,
  35475. 25684
  35476. ]]
  35477. }
  35478. },
  35479. {
  35480. 'type': 'Feature',
  35481. 'id': '4503',
  35482. 'properties': {
  35483. 'name': '桂林市',
  35484. 'cp': [
  35485. 110.5554,
  35486. 25.318
  35487. ],
  35488. 'childNum': 13
  35489. },
  35490. 'geometry': {
  35491. 'type': 'Polygon',
  35492. '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'],
  35493. 'encodeOffsets': [[
  35494. 112399,
  35495. 26500
  35496. ]]
  35497. }
  35498. },
  35499. {
  35500. 'type': 'Feature',
  35501. 'id': '4501',
  35502. 'properties': {
  35503. 'name': '南宁市',
  35504. 'cp': [
  35505. 108.479,
  35506. 23.1152
  35507. ],
  35508. 'childNum': 7
  35509. },
  35510. 'geometry': {
  35511. 'type': 'Polygon',
  35512. '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'],
  35513. 'encodeOffsets': [[
  35514. 109958,
  35515. 23806
  35516. ]]
  35517. }
  35518. },
  35519. {
  35520. 'type': 'Feature',
  35521. 'id': '4502',
  35522. 'properties': {
  35523. 'name': '柳州市',
  35524. 'cp': [
  35525. 109.3799,
  35526. 24.9774
  35527. ],
  35528. 'childNum': 7
  35529. },
  35530. 'geometry': {
  35531. 'type': 'Polygon',
  35532. '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'],
  35533. 'encodeOffsets': [[
  35534. 112399,
  35535. 26500
  35536. ]]
  35537. }
  35538. },
  35539. {
  35540. 'type': 'Feature',
  35541. 'id': '4514',
  35542. 'properties': {
  35543. 'name': '崇左市',
  35544. 'cp': [
  35545. 107.3364,
  35546. 22.4725
  35547. ],
  35548. 'childNum': 7
  35549. },
  35550. 'geometry': {
  35551. 'type': 'Polygon',
  35552. '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'],
  35553. 'encodeOffsets': [[
  35554. 109227,
  35555. 23440
  35556. ]]
  35557. }
  35558. },
  35559. {
  35560. 'type': 'Feature',
  35561. 'id': '4513',
  35562. 'properties': {
  35563. 'name': '来宾市',
  35564. 'cp': [
  35565. 109.7095,
  35566. 23.8403
  35567. ],
  35568. 'childNum': 6
  35569. },
  35570. 'geometry': {
  35571. 'type': 'Polygon',
  35572. '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„'],
  35573. 'encodeOffsets': [[
  35574. 111083,
  35575. 24599
  35576. ]]
  35577. }
  35578. },
  35579. {
  35580. 'type': 'Feature',
  35581. 'id': '4509',
  35582. 'properties': {
  35583. 'name': '玉林市',
  35584. 'cp': [
  35585. 110.2148,
  35586. 22.3792
  35587. ],
  35588. 'childNum': 6
  35589. },
  35590. 'geometry': {
  35591. 'type': 'Polygon',
  35592. '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'],
  35593. 'encodeOffsets': [[
  35594. 112478,
  35595. 22872
  35596. ]]
  35597. }
  35598. },
  35599. {
  35600. 'type': 'Feature',
  35601. 'id': '4504',
  35602. 'properties': {
  35603. 'name': '梧州市',
  35604. 'cp': [
  35605. 110.9949,
  35606. 23.5052
  35607. ],
  35608. 'childNum': 6
  35609. },
  35610. 'geometry': {
  35611. 'type': 'Polygon',
  35612. '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ƒ@'],
  35613. 'encodeOffsets': [[
  35614. 112973,
  35615. 24863
  35616. ]]
  35617. }
  35618. },
  35619. {
  35620. 'type': 'Feature',
  35621. 'id': '4511',
  35622. 'properties': {
  35623. 'name': '贺州市',
  35624. 'cp': [
  35625. 111.3135,
  35626. 24.4006
  35627. ],
  35628. 'childNum': 4
  35629. },
  35630. 'geometry': {
  35631. 'type': 'Polygon',
  35632. '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'],
  35633. 'encodeOffsets': [[
  35634. 113220,
  35635. 24947
  35636. ]]
  35637. }
  35638. },
  35639. {
  35640. 'type': 'Feature',
  35641. 'id': '4507',
  35642. 'properties': {
  35643. 'name': '钦州市',
  35644. 'cp': [
  35645. 109.0283,
  35646. 22.0935
  35647. ],
  35648. 'childNum': 3
  35649. },
  35650. 'geometry': {
  35651. 'type': 'Polygon',
  35652. '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@'],
  35653. 'encodeOffsets': [[
  35654. 110881,
  35655. 22742
  35656. ]]
  35657. }
  35658. },
  35659. {
  35660. 'type': 'Feature',
  35661. 'id': '4508',
  35662. 'properties': {
  35663. 'name': '贵港市',
  35664. 'cp': [
  35665. 109.9402,
  35666. 23.3459
  35667. ],
  35668. 'childNum': 3
  35669. },
  35670. 'geometry': {
  35671. 'type': 'Polygon',
  35672. '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‚'],
  35673. 'encodeOffsets': [[
  35674. 112568,
  35675. 24255
  35676. ]]
  35677. }
  35678. },
  35679. {
  35680. 'type': 'Feature',
  35681. 'id': '4506',
  35682. 'properties': {
  35683. 'name': '防城港市',
  35684. 'cp': [
  35685. 108.0505,
  35686. 21.9287
  35687. ],
  35688. 'childNum': 3
  35689. },
  35690. 'geometry': {
  35691. 'type': 'Polygon',
  35692. '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'],
  35693. 'encodeOffsets': [[
  35694. 110070,
  35695. 22174
  35696. ]]
  35697. }
  35698. },
  35699. {
  35700. 'type': 'Feature',
  35701. 'id': '4505',
  35702. 'properties': {
  35703. 'name': '北海市',
  35704. 'cp': [
  35705. 109.314,
  35706. 21.6211
  35707. ],
  35708. 'childNum': 2
  35709. },
  35710. 'geometry': {
  35711. 'type': 'Polygon',
  35712. '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'],
  35713. 'encodeOffsets': [[
  35714. 112242,
  35715. 22444
  35716. ]]
  35717. }
  35718. }
  35719. ],
  35720. 'UTF8Encoding': true
  35721. };
  35722. });define('echarts/util/mapData/geoJson/gui_zhou_geo', [], function () {
  35723. return {
  35724. 'type': 'FeatureCollection',
  35725. 'features': [
  35726. {
  35727. 'type': 'Feature',
  35728. 'id': '5203',
  35729. 'properties': {
  35730. 'name': '遵义市',
  35731. 'cp': [
  35732. 106.908,
  35733. 28.1744
  35734. ],
  35735. 'childNum': 14
  35736. },
  35737. 'geometry': {
  35738. 'type': 'MultiPolygon',
  35739. 'coordinates': [
  35740. ['@@@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'],
  35741. ['@@@KlKkUUVVX']
  35742. ],
  35743. 'encodeOffsets': [
  35744. [[
  35745. 108799,
  35746. 29239
  35747. ]],
  35748. [[
  35749. 110532,
  35750. 27822
  35751. ]]
  35752. ]
  35753. }
  35754. },
  35755. {
  35756. 'type': 'Feature',
  35757. 'id': '5226',
  35758. 'properties': {
  35759. 'name': '黔东南苗族侗族自治州',
  35760. 'cp': [
  35761. 108.4241,
  35762. 26.4166
  35763. ],
  35764. 'childNum': 17
  35765. },
  35766. 'geometry': {
  35767. 'type': 'MultiPolygon',
  35768. 'coordinates': [
  35769. [
  35770. '@@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',
  35771. '@@@KlKkUUVVX'
  35772. ],
  35773. ['@@UUVUkUmV@ln@VXVK@K']
  35774. ],
  35775. 'encodeOffsets': [
  35776. [
  35777. [
  35778. 110318,
  35779. 27214
  35780. ],
  35781. [
  35782. 110532,
  35783. 27822
  35784. ]
  35785. ],
  35786. [[
  35787. 112219,
  35788. 27394
  35789. ]]
  35790. ]
  35791. }
  35792. },
  35793. {
  35794. 'type': 'Feature',
  35795. 'id': '5224',
  35796. 'properties': {
  35797. 'name': '毕节地区',
  35798. 'cp': [
  35799. 105.1611,
  35800. 27.0648
  35801. ],
  35802. 'childNum': 8
  35803. },
  35804. 'geometry': {
  35805. 'type': 'Polygon',
  35806. 'coordinates': [
  35807. '@@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',
  35808. '@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ'
  35809. ],
  35810. 'encodeOffsets': [
  35811. [
  35812. 108552,
  35813. 28412
  35814. ],
  35815. [
  35816. 107213,
  35817. 27445
  35818. ]
  35819. ]
  35820. }
  35821. },
  35822. {
  35823. 'type': 'Feature',
  35824. 'id': '5227',
  35825. 'properties': {
  35826. 'name': '黔南布依族苗族自治州',
  35827. 'cp': [
  35828. 107.2485,
  35829. 25.8398
  35830. ],
  35831. 'childNum': 12
  35832. },
  35833. 'geometry': {
  35834. 'type': 'Polygon',
  35835. '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'],
  35836. 'encodeOffsets': [[
  35837. 108912,
  35838. 26905
  35839. ]]
  35840. }
  35841. },
  35842. {
  35843. 'type': 'Feature',
  35844. 'id': '5222',
  35845. 'properties': {
  35846. 'name': '铜仁地区',
  35847. 'cp': [
  35848. 108.6218,
  35849. 28.0096
  35850. ],
  35851. 'childNum': 10
  35852. },
  35853. 'geometry': {
  35854. 'type': 'Polygon',
  35855. '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'],
  35856. 'encodeOffsets': [[
  35857. 110667,
  35858. 29785
  35859. ]]
  35860. }
  35861. },
  35862. {
  35863. 'type': 'Feature',
  35864. 'id': '5223',
  35865. 'properties': {
  35866. 'name': '黔西南布依族苗族自治州',
  35867. 'cp': [
  35868. 105.5347,
  35869. 25.3949
  35870. ],
  35871. 'childNum': 8
  35872. },
  35873. 'geometry': {
  35874. 'type': 'Polygon',
  35875. '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'],
  35876. 'encodeOffsets': [[
  35877. 107157,
  35878. 25965
  35879. ]]
  35880. }
  35881. },
  35882. {
  35883. 'type': 'Feature',
  35884. 'id': '5202',
  35885. 'properties': {
  35886. 'name': '六盘水市',
  35887. 'cp': [
  35888. 104.7546,
  35889. 26.0925
  35890. ],
  35891. 'childNum': 5
  35892. },
  35893. 'geometry': {
  35894. 'type': 'MultiPolygon',
  35895. 'coordinates': [
  35896. ['@@ô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'],
  35897. ['@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa']
  35898. ],
  35899. 'encodeOffsets': [
  35900. [[
  35901. 107089,
  35902. 27181
  35903. ]],
  35904. [[
  35905. 107213,
  35906. 27479
  35907. ]]
  35908. ]
  35909. }
  35910. },
  35911. {
  35912. 'type': 'Feature',
  35913. 'id': '5204',
  35914. 'properties': {
  35915. 'name': '安顺市',
  35916. 'cp': [
  35917. 105.9082,
  35918. 25.9882
  35919. ],
  35920. 'childNum': 6
  35921. },
  35922. 'geometry': {
  35923. 'type': 'Polygon',
  35924. '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@'],
  35925. 'encodeOffsets': [[
  35926. 108237,
  35927. 26792
  35928. ]]
  35929. }
  35930. },
  35931. {
  35932. 'type': 'Feature',
  35933. 'id': '5201',
  35934. 'properties': {
  35935. 'name': '贵阳市',
  35936. 'cp': [
  35937. 106.6992,
  35938. 26.7682
  35939. ],
  35940. 'childNum': 5
  35941. },
  35942. 'geometry': {
  35943. 'type': 'Polygon',
  35944. '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'],
  35945. 'encodeOffsets': [[
  35946. 108945,
  35947. 27760
  35948. ]]
  35949. }
  35950. }
  35951. ],
  35952. 'UTF8Encoding': true
  35953. };
  35954. });define('echarts/util/mapData/geoJson/hai_nan_geo', [], function () {
  35955. return {
  35956. 'type': 'FeatureCollection',
  35957. 'features': [
  35958. {
  35959. 'type': 'Feature',
  35960. 'id': '469003',
  35961. 'properties': {
  35962. 'name': '儋州市',
  35963. 'cp': [
  35964. 109.3291,
  35965. 19.5653
  35966. ],
  35967. 'childNum': 1
  35968. },
  35969. 'geometry': {
  35970. 'type': 'Polygon',
  35971. '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Ÿ”'],
  35972. 'encodeOffsets': [[
  35973. 111506,
  35974. 20018
  35975. ]]
  35976. }
  35977. },
  35978. {
  35979. 'type': 'Feature',
  35980. 'id': '469005',
  35981. 'properties': {
  35982. 'name': '文昌市',
  35983. 'cp': [
  35984. 110.8905,
  35985. 19.7823
  35986. ],
  35987. 'childNum': 1
  35988. },
  35989. 'geometry': {
  35990. 'type': 'Polygon',
  35991. '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åà'],
  35992. 'encodeOffsets': [[
  35993. 113115,
  35994. 20665
  35995. ]]
  35996. }
  35997. },
  35998. {
  35999. 'type': 'Feature',
  36000. 'id': '469033',
  36001. 'properties': {
  36002. 'name': '乐东黎族自治县',
  36003. 'cp': [
  36004. 109.0283,
  36005. 18.6301
  36006. ],
  36007. 'childNum': 1
  36008. },
  36009. 'geometry': {
  36010. 'type': 'Polygon',
  36011. '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ø'],
  36012. 'encodeOffsets': [[
  36013. 111263,
  36014. 19164
  36015. ]]
  36016. }
  36017. },
  36018. {
  36019. 'type': 'Feature',
  36020. 'id': '4602',
  36021. 'properties': {
  36022. 'name': '三亚市',
  36023. 'cp': [
  36024. 109.3716,
  36025. 18.3698
  36026. ],
  36027. 'childNum': 1
  36028. },
  36029. 'geometry': {
  36030. 'type': 'Polygon',
  36031. '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'],
  36032. 'encodeOffsets': [[
  36033. 111547,
  36034. 18737
  36035. ]]
  36036. }
  36037. },
  36038. {
  36039. 'type': 'Feature',
  36040. 'id': '469036',
  36041. 'properties': {
  36042. 'name': '琼中黎族苗族自治县',
  36043. 'cp': [
  36044. 109.8413,
  36045. 19.0736
  36046. ],
  36047. 'childNum': 1
  36048. },
  36049. 'geometry': {
  36050. 'type': 'Polygon',
  36051. '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'],
  36052. 'encodeOffsets': [[
  36053. 112153,
  36054. 19488
  36055. ]]
  36056. }
  36057. },
  36058. {
  36059. 'type': 'Feature',
  36060. 'id': '469007',
  36061. 'properties': {
  36062. 'name': '东方市',
  36063. 'cp': [
  36064. 108.8498,
  36065. 19.0414
  36066. ],
  36067. 'childNum': 1
  36068. },
  36069. 'geometry': {
  36070. 'type': 'Polygon',
  36071. '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'],
  36072. 'encodeOffsets': [[
  36073. 111208,
  36074. 19833
  36075. ]]
  36076. }
  36077. },
  36078. {
  36079. 'type': 'Feature',
  36080. 'id': '4601',
  36081. 'properties': {
  36082. 'name': '海口市',
  36083. 'cp': [
  36084. 110.3893,
  36085. 19.8516
  36086. ],
  36087. 'childNum': 1
  36088. },
  36089. 'geometry': {
  36090. 'type': 'Polygon',
  36091. '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^ÍÞ'],
  36092. 'encodeOffsets': [[
  36093. 112711,
  36094. 20572
  36095. ]]
  36096. }
  36097. },
  36098. {
  36099. 'type': 'Feature',
  36100. 'id': '469006',
  36101. 'properties': {
  36102. 'name': '万宁市',
  36103. 'cp': [
  36104. 110.3137,
  36105. 18.8388
  36106. ],
  36107. 'childNum': 1
  36108. },
  36109. 'geometry': {
  36110. 'type': 'Polygon',
  36111. '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`'],
  36112. 'encodeOffsets': [[
  36113. 112657,
  36114. 19182
  36115. ]]
  36116. }
  36117. },
  36118. {
  36119. 'type': 'Feature',
  36120. 'id': '469027',
  36121. 'properties': {
  36122. 'name': '澄迈县',
  36123. 'cp': [
  36124. 109.9937,
  36125. 19.7314
  36126. ],
  36127. 'childNum': 1
  36128. },
  36129. 'geometry': {
  36130. 'type': 'Polygon',
  36131. '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'],
  36132. 'encodeOffsets': [[
  36133. 112385,
  36134. 19987
  36135. ]]
  36136. }
  36137. },
  36138. {
  36139. 'type': 'Feature',
  36140. 'id': '469030',
  36141. 'properties': {
  36142. 'name': '白沙黎族自治县',
  36143. 'cp': [
  36144. 109.3703,
  36145. 19.211
  36146. ],
  36147. 'childNum': 1
  36148. },
  36149. 'geometry': {
  36150. 'type': 'Polygon',
  36151. '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^'],
  36152. 'encodeOffsets': [[
  36153. 111665,
  36154. 19890
  36155. ]]
  36156. }
  36157. },
  36158. {
  36159. 'type': 'Feature',
  36160. 'id': '469002',
  36161. 'properties': {
  36162. 'name': '琼海市',
  36163. 'cp': [
  36164. 110.4208,
  36165. 19.224
  36166. ],
  36167. 'childNum': 1
  36168. },
  36169. 'geometry': {
  36170. 'type': 'Polygon',
  36171. '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'],
  36172. 'encodeOffsets': [[
  36173. 112763,
  36174. 19595
  36175. ]]
  36176. }
  36177. },
  36178. {
  36179. 'type': 'Feature',
  36180. 'id': '469031',
  36181. 'properties': {
  36182. 'name': '昌江黎族自治县',
  36183. 'cp': [
  36184. 109.0407,
  36185. 19.2137
  36186. ],
  36187. 'childNum': 1
  36188. },
  36189. 'geometry': {
  36190. 'type': 'Polygon',
  36191. '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Œ¹ '],
  36192. 'encodeOffsets': [[
  36193. 111208,
  36194. 19833
  36195. ]]
  36196. }
  36197. },
  36198. {
  36199. 'type': 'Feature',
  36200. 'id': '469028',
  36201. 'properties': {
  36202. 'name': '临高县',
  36203. 'cp': [
  36204. 109.6957,
  36205. 19.8063
  36206. ],
  36207. 'childNum': 1
  36208. },
  36209. 'geometry': {
  36210. 'type': 'Polygon',
  36211. '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ê'],
  36212. 'encodeOffsets': [[
  36213. 112122,
  36214. 20431
  36215. ]]
  36216. }
  36217. },
  36218. {
  36219. 'type': 'Feature',
  36220. 'id': '469034',
  36221. 'properties': {
  36222. 'name': '陵水黎族自治县',
  36223. 'cp': [
  36224. 109.9924,
  36225. 18.5415
  36226. ],
  36227. 'childNum': 1
  36228. },
  36229. 'geometry': {
  36230. 'type': 'Polygon',
  36231. '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'],
  36232. 'encodeOffsets': [[
  36233. 112409,
  36234. 19261
  36235. ]]
  36236. }
  36237. },
  36238. {
  36239. 'type': 'Feature',
  36240. 'id': '469026',
  36241. 'properties': {
  36242. 'name': '屯昌县',
  36243. 'cp': [
  36244. 110.0377,
  36245. 19.362
  36246. ],
  36247. 'childNum': 1
  36248. },
  36249. 'geometry': {
  36250. 'type': 'Polygon',
  36251. '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@'],
  36252. 'encodeOffsets': [[
  36253. 112513,
  36254. 19852
  36255. ]]
  36256. }
  36257. },
  36258. {
  36259. 'type': 'Feature',
  36260. 'id': '469025',
  36261. 'properties': {
  36262. 'name': '定安县',
  36263. 'cp': [
  36264. 110.3384,
  36265. 19.4698
  36266. ],
  36267. 'childNum': 1
  36268. },
  36269. 'geometry': {
  36270. 'type': 'Polygon',
  36271. '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'],
  36272. 'encodeOffsets': [[
  36273. 112903,
  36274. 20139
  36275. ]]
  36276. }
  36277. },
  36278. {
  36279. 'type': 'Feature',
  36280. 'id': '469035',
  36281. 'properties': {
  36282. 'name': '保亭黎族苗族自治县',
  36283. 'cp': [
  36284. 109.6284,
  36285. 18.6108
  36286. ],
  36287. 'childNum': 1
  36288. },
  36289. 'geometry': {
  36290. 'type': 'Polygon',
  36291. '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'],
  36292. 'encodeOffsets': [[
  36293. 112031,
  36294. 19071
  36295. ]]
  36296. }
  36297. },
  36298. {
  36299. 'type': 'Feature',
  36300. 'id': '469001',
  36301. 'properties': {
  36302. 'name': '五指山市',
  36303. 'cp': [
  36304. 109.5282,
  36305. 18.8299
  36306. ],
  36307. 'childNum': 1
  36308. },
  36309. 'geometry': {
  36310. 'type': 'Polygon',
  36311. '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'],
  36312. 'encodeOffsets': [[
  36313. 111973,
  36314. 19401
  36315. ]]
  36316. }
  36317. }
  36318. ],
  36319. 'UTF8Encoding': true
  36320. };
  36321. });define('echarts/util/mapData/geoJson/hei_long_jiang_geo', [], function () {
  36322. return {
  36323. 'type': 'FeatureCollection',
  36324. 'features': [
  36325. {
  36326. 'type': 'Feature',
  36327. 'id': '2311',
  36328. 'properties': {
  36329. 'name': '黑河市',
  36330. 'cp': [
  36331. 127.1448,
  36332. 49.2957
  36333. ],
  36334. 'childNum': 6
  36335. },
  36336. 'geometry': {
  36337. 'type': 'Polygon',
  36338. '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݂Ý@'],
  36339. 'encodeOffsets': [[
  36340. 127744,
  36341. 50102
  36342. ]]
  36343. }
  36344. },
  36345. {
  36346. 'type': 'Feature',
  36347. 'id': '2327',
  36348. 'properties': {
  36349. 'name': '大兴安岭地区',
  36350. 'cp': [
  36351. 124.1016,
  36352. 52.2345
  36353. ],
  36354. 'childNum': 3
  36355. },
  36356. 'geometry': {
  36357. 'type': 'Polygon',
  36358. '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š¥'],
  36359. 'encodeOffsets': [[
  36360. 130084,
  36361. 52206
  36362. ]]
  36363. }
  36364. },
  36365. {
  36366. 'type': 'Feature',
  36367. 'id': '2301',
  36368. 'properties': {
  36369. 'name': '哈尔滨市',
  36370. 'cp': [
  36371. 127.9688,
  36372. 45.368
  36373. ],
  36374. 'childNum': 11
  36375. },
  36376. 'geometry': {
  36377. 'type': 'Polygon',
  36378. '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'],
  36379. 'encodeOffsets': [[
  36380. 128712,
  36381. 46604
  36382. ]]
  36383. }
  36384. },
  36385. {
  36386. 'type': 'Feature',
  36387. 'id': '2302',
  36388. 'properties': {
  36389. 'name': '齐齐哈尔市',
  36390. 'cp': [
  36391. 124.541,
  36392. 47.5818
  36393. ],
  36394. 'childNum': 11
  36395. },
  36396. 'geometry': {
  36397. 'type': 'Polygon',
  36398. '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'],
  36399. 'encodeOffsets': [[
  36400. 127744,
  36401. 50102
  36402. ]]
  36403. }
  36404. },
  36405. {
  36406. 'type': 'Feature',
  36407. 'id': '2310',
  36408. 'properties': {
  36409. 'name': '牡丹江市',
  36410. 'cp': [
  36411. 129.7815,
  36412. 44.7089
  36413. ],
  36414. 'childNum': 7
  36415. },
  36416. 'geometry': {
  36417. 'type': 'Polygon',
  36418. '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'],
  36419. 'encodeOffsets': [[
  36420. 132672,
  36421. 46936
  36422. ]]
  36423. }
  36424. },
  36425. {
  36426. 'type': 'Feature',
  36427. 'id': '2312',
  36428. 'properties': {
  36429. 'name': '绥化市',
  36430. 'cp': [
  36431. 126.7163,
  36432. 46.8018
  36433. ],
  36434. 'childNum': 10
  36435. },
  36436. 'geometry': {
  36437. 'type': 'Polygon',
  36438. '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È'],
  36439. 'encodeOffsets': [[
  36440. 128352,
  36441. 48421
  36442. ]]
  36443. }
  36444. },
  36445. {
  36446. 'type': 'Feature',
  36447. 'id': '2307',
  36448. 'properties': {
  36449. 'name': '伊春市',
  36450. 'cp': [
  36451. 129.1992,
  36452. 47.9608
  36453. ],
  36454. 'childNum': 3
  36455. },
  36456. 'geometry': {
  36457. 'type': 'Polygon',
  36458. '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°¦@'],
  36459. 'encodeOffsets': [[
  36460. 131637,
  36461. 48556
  36462. ]]
  36463. }
  36464. },
  36465. {
  36466. 'type': 'Feature',
  36467. 'id': '2308',
  36468. 'properties': {
  36469. 'name': '佳木斯市',
  36470. 'cp': [
  36471. 133.0005,
  36472. 47.5763
  36473. ],
  36474. 'childNum': 7
  36475. },
  36476. 'geometry': {
  36477. 'type': 'Polygon',
  36478. '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'],
  36479. 'encodeOffsets': [[
  36480. 132615,
  36481. 47740
  36482. ]]
  36483. }
  36484. },
  36485. {
  36486. 'type': 'Feature',
  36487. 'id': '2303',
  36488. 'properties': {
  36489. 'name': '鸡西市',
  36490. 'cp': [
  36491. 132.7917,
  36492. 45.7361
  36493. ],
  36494. 'childNum': 4
  36495. },
  36496. 'geometry': {
  36497. 'type': 'Polygon',
  36498. '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œÆ'],
  36499. 'encodeOffsets': [[
  36500. 133921,
  36501. 46716
  36502. ]]
  36503. }
  36504. },
  36505. {
  36506. 'type': 'Feature',
  36507. 'id': '2305',
  36508. 'properties': {
  36509. 'name': '双鸭山市',
  36510. 'cp': [
  36511. 133.5938,
  36512. 46.7523
  36513. ],
  36514. 'childNum': 5
  36515. },
  36516. 'geometry': {
  36517. 'type': 'Polygon',
  36518. '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'],
  36519. 'encodeOffsets': [[
  36520. 137577,
  36521. 48578
  36522. ]]
  36523. }
  36524. },
  36525. {
  36526. 'type': 'Feature',
  36527. 'id': '2306',
  36528. 'properties': {
  36529. 'name': '大庆市',
  36530. 'cp': [
  36531. 124.7717,
  36532. 46.4282
  36533. ],
  36534. 'childNum': 5
  36535. },
  36536. 'geometry': {
  36537. 'type': 'Polygon',
  36538. '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„ĉ'],
  36539. 'encodeOffsets': [[
  36540. 128352,
  36541. 48421
  36542. ]]
  36543. }
  36544. },
  36545. {
  36546. 'type': 'Feature',
  36547. 'id': '2304',
  36548. 'properties': {
  36549. 'name': '鹤岗市',
  36550. 'cp': [
  36551. 130.4407,
  36552. 47.7081
  36553. ],
  36554. 'childNum': 3
  36555. },
  36556. 'geometry': {
  36557. 'type': 'Polygon',
  36558. '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„°'],
  36559. 'encodeOffsets': [[
  36560. 132998,
  36561. 49478
  36562. ]]
  36563. }
  36564. },
  36565. {
  36566. 'type': 'Feature',
  36567. 'id': '2309',
  36568. 'properties': {
  36569. 'name': '七台河市',
  36570. 'cp': [
  36571. 131.2756,
  36572. 45.9558
  36573. ],
  36574. 'childNum': 2
  36575. },
  36576. 'geometry': {
  36577. 'type': 'Polygon',
  36578. '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º@Ķ°'],
  36579. 'encodeOffsets': [[
  36580. 133369,
  36581. 47228
  36582. ]]
  36583. }
  36584. }
  36585. ],
  36586. 'UTF8Encoding': true
  36587. };
  36588. });define('echarts/util/mapData/geoJson/he_bei_geo', [], function () {
  36589. return {
  36590. 'type': 'FeatureCollection',
  36591. 'features': [
  36592. {
  36593. 'type': 'Feature',
  36594. 'id': '1308',
  36595. 'properties': {
  36596. 'name': '承德市',
  36597. 'cp': [
  36598. 117.5757,
  36599. 41.4075
  36600. ],
  36601. 'childNum': 11
  36602. },
  36603. 'geometry': {
  36604. 'type': 'Polygon',
  36605. '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š'],
  36606. 'encodeOffsets': [[
  36607. 118868,
  36608. 42784
  36609. ]]
  36610. }
  36611. },
  36612. {
  36613. 'type': 'Feature',
  36614. 'id': '1307',
  36615. 'properties': {
  36616. 'name': '张家口市',
  36617. 'cp': [
  36618. 115.1477,
  36619. 40.8527
  36620. ],
  36621. 'childNum': 15
  36622. },
  36623. 'geometry': {
  36624. 'type': 'Polygon',
  36625. '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¥ÆÑ@¥Þ@'],
  36626. 'encodeOffsets': [[
  36627. 118868,
  36628. 42784
  36629. ]]
  36630. }
  36631. },
  36632. {
  36633. 'type': 'Feature',
  36634. 'id': '1306',
  36635. 'properties': {
  36636. 'name': '保定市',
  36637. 'cp': [
  36638. 115.0488,
  36639. 39.0948
  36640. ],
  36641. 'childNum': 23
  36642. },
  36643. 'geometry': {
  36644. 'type': 'Polygon',
  36645. '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'],
  36646. 'encodeOffsets': [[
  36647. 117304,
  36648. 40512
  36649. ]]
  36650. }
  36651. },
  36652. {
  36653. 'type': 'Feature',
  36654. 'id': '1302',
  36655. 'properties': {
  36656. 'name': '唐山市',
  36657. 'cp': [
  36658. 118.4766,
  36659. 39.6826
  36660. ],
  36661. 'childNum': 11
  36662. },
  36663. 'geometry': {
  36664. 'type': 'Polygon',
  36665. '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'],
  36666. 'encodeOffsets': [[
  36667. 120398,
  36668. 41159
  36669. ]]
  36670. }
  36671. },
  36672. {
  36673. 'type': 'Feature',
  36674. 'id': '1309',
  36675. 'properties': {
  36676. 'name': '沧州市',
  36677. 'cp': [
  36678. 116.8286,
  36679. 38.2104
  36680. ],
  36681. 'childNum': 15
  36682. },
  36683. 'geometry': {
  36684. 'type': 'Polygon',
  36685. '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@'],
  36686. 'encodeOffsets': [[
  36687. 118485,
  36688. 39280
  36689. ]]
  36690. }
  36691. },
  36692. {
  36693. 'type': 'Feature',
  36694. 'id': '1301',
  36695. 'properties': {
  36696. 'name': '石家庄市',
  36697. 'cp': [
  36698. 114.4995,
  36699. 38.1006
  36700. ],
  36701. 'childNum': 19
  36702. },
  36703. 'geometry': {
  36704. 'type': 'Polygon',
  36705. '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'],
  36706. 'encodeOffsets': [[
  36707. 116562,
  36708. 39691
  36709. ]]
  36710. }
  36711. },
  36712. {
  36713. 'type': 'Feature',
  36714. 'id': '1305',
  36715. 'properties': {
  36716. 'name': '邢台市',
  36717. 'cp': [
  36718. 114.8071,
  36719. 37.2821
  36720. ],
  36721. 'childNum': 18
  36722. },
  36723. 'geometry': {
  36724. 'type': 'Polygon',
  36725. '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'],
  36726. 'encodeOffsets': [[
  36727. 116764,
  36728. 38346
  36729. ]]
  36730. }
  36731. },
  36732. {
  36733. 'type': 'Feature',
  36734. 'id': '1304',
  36735. 'properties': {
  36736. 'name': '邯郸市',
  36737. 'cp': [
  36738. 114.4775,
  36739. 36.535
  36740. ],
  36741. 'childNum': 18
  36742. },
  36743. 'geometry': {
  36744. 'type': 'Polygon',
  36745. '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'],
  36746. 'encodeOffsets': [[
  36747. 116528,
  36748. 37885
  36749. ]]
  36750. }
  36751. },
  36752. {
  36753. 'type': 'Feature',
  36754. 'id': '1303',
  36755. 'properties': {
  36756. 'name': '秦皇岛市',
  36757. 'cp': [
  36758. 119.2126,
  36759. 40.0232
  36760. ],
  36761. 'childNum': 5
  36762. },
  36763. 'geometry': {
  36764. 'type': 'Polygon',
  36765. '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'],
  36766. 'encodeOffsets': [[
  36767. 121411,
  36768. 41254
  36769. ]]
  36770. }
  36771. },
  36772. {
  36773. 'type': 'Feature',
  36774. 'id': '1311',
  36775. 'properties': {
  36776. 'name': '衡水市',
  36777. 'cp': [
  36778. 115.8838,
  36779. 37.7161
  36780. ],
  36781. 'childNum': 11
  36782. },
  36783. 'geometry': {
  36784. 'type': 'Polygon',
  36785. '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¦°@'],
  36786. 'encodeOffsets': [[
  36787. 118024,
  36788. 38549
  36789. ]]
  36790. }
  36791. },
  36792. {
  36793. 'type': 'Feature',
  36794. 'id': '1310',
  36795. 'properties': {
  36796. 'name': '廊坊市',
  36797. 'cp': [
  36798. 116.521,
  36799. 39.0509
  36800. ],
  36801. 'childNum': 9
  36802. },
  36803. 'geometry': {
  36804. 'type': 'MultiPolygon',
  36805. 'coordinates': [
  36806. ['@@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'],
  36807. ['@@@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']
  36808. ],
  36809. 'encodeOffsets': [
  36810. [[
  36811. 119037,
  36812. 40467
  36813. ]],
  36814. [[
  36815. 119970,
  36816. 40776
  36817. ]]
  36818. ]
  36819. }
  36820. }
  36821. ],
  36822. 'UTF8Encoding': true
  36823. };
  36824. });define('echarts/util/mapData/geoJson/he_nan_geo', [], function () {
  36825. return {
  36826. 'type': 'FeatureCollection',
  36827. 'features': [
  36828. {
  36829. 'type': 'Feature',
  36830. 'id': '4113',
  36831. 'properties': {
  36832. 'name': '南阳市',
  36833. 'cp': [
  36834. 112.4011,
  36835. 33.0359
  36836. ],
  36837. 'childNum': 12
  36838. },
  36839. 'geometry': {
  36840. 'type': 'Polygon',
  36841. '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'],
  36842. 'encodeOffsets': [[
  36843. 113671,
  36844. 34364
  36845. ]]
  36846. }
  36847. },
  36848. {
  36849. 'type': 'Feature',
  36850. 'id': '4115',
  36851. 'properties': {
  36852. 'name': '信阳市',
  36853. 'cp': [
  36854. 114.8291,
  36855. 32.0197
  36856. ],
  36857. 'childNum': 9
  36858. },
  36859. 'geometry': {
  36860. 'type': 'Polygon',
  36861. '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'],
  36862. 'encodeOffsets': [[
  36863. 116551,
  36864. 33385
  36865. ]]
  36866. }
  36867. },
  36868. {
  36869. 'type': 'Feature',
  36870. 'id': '4103',
  36871. 'properties': {
  36872. 'name': '洛阳市',
  36873. 'cp': [
  36874. 112.0605,
  36875. 34.3158
  36876. ],
  36877. 'childNum': 11
  36878. },
  36879. 'geometry': {
  36880. 'type': 'Polygon',
  36881. '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'],
  36882. 'encodeOffsets': [[
  36883. 114683,
  36884. 35551
  36885. ]]
  36886. }
  36887. },
  36888. {
  36889. 'type': 'Feature',
  36890. 'id': '4117',
  36891. 'properties': {
  36892. 'name': '驻马店市',
  36893. 'cp': [
  36894. 114.1589,
  36895. 32.9041
  36896. ],
  36897. 'childNum': 10
  36898. },
  36899. 'geometry': {
  36900. 'type': 'Polygon',
  36901. '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'],
  36902. 'encodeOffsets': [[
  36903. 115920,
  36904. 33863
  36905. ]]
  36906. }
  36907. },
  36908. {
  36909. 'type': 'Feature',
  36910. 'id': '4116',
  36911. 'properties': {
  36912. 'name': '周口市',
  36913. 'cp': [
  36914. 114.873,
  36915. 33.6951
  36916. ],
  36917. 'childNum': 10
  36918. },
  36919. 'geometry': {
  36920. 'type': 'Polygon',
  36921. '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'],
  36922. 'encodeOffsets': [[
  36923. 116832,
  36924. 34527
  36925. ]]
  36926. }
  36927. },
  36928. {
  36929. 'type': 'Feature',
  36930. 'id': '4114',
  36931. 'properties': {
  36932. 'name': '商丘市',
  36933. 'cp': [
  36934. 115.741,
  36935. 34.2828
  36936. ],
  36937. 'childNum': 8
  36938. },
  36939. 'geometry': {
  36940. 'type': 'Polygon',
  36941. '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'],
  36942. 'encodeOffsets': [[
  36943. 118024,
  36944. 35680
  36945. ]]
  36946. }
  36947. },
  36948. {
  36949. 'type': 'Feature',
  36950. 'id': '4112',
  36951. 'properties': {
  36952. 'name': '三门峡市',
  36953. 'cp': [
  36954. 110.8301,
  36955. 34.3158
  36956. ],
  36957. 'childNum': 6
  36958. },
  36959. 'geometry': {
  36960. 'type': 'Polygon',
  36961. '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„_'],
  36962. 'encodeOffsets': [[
  36963. 114661,
  36964. 35911
  36965. ]]
  36966. }
  36967. },
  36968. {
  36969. 'type': 'Feature',
  36970. 'id': '4107',
  36971. 'properties': {
  36972. 'name': '新乡市',
  36973. 'cp': [
  36974. 114.2029,
  36975. 35.3595
  36976. ],
  36977. 'childNum': 9
  36978. },
  36979. 'geometry': {
  36980. 'type': 'Polygon',
  36981. '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'],
  36982. 'encodeOffsets': [[
  36983. 116100,
  36984. 36349
  36985. ]]
  36986. }
  36987. },
  36988. {
  36989. 'type': 'Feature',
  36990. 'id': '4104',
  36991. 'properties': {
  36992. 'name': '平顶山市',
  36993. 'cp': [
  36994. 112.9724,
  36995. 33.739
  36996. ],
  36997. 'childNum': 8
  36998. },
  36999. 'geometry': {
  37000. 'type': 'Polygon',
  37001. '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'],
  37002. 'encodeOffsets': [[
  37003. 114942,
  37004. 34527
  37005. ]]
  37006. }
  37007. },
  37008. {
  37009. 'type': 'Feature',
  37010. 'id': '4101',
  37011. 'properties': {
  37012. 'name': '郑州市',
  37013. 'cp': [
  37014. 113.4668,
  37015. 34.6234
  37016. ],
  37017. 'childNum': 8
  37018. },
  37019. 'geometry': {
  37020. 'type': 'Polygon',
  37021. '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'],
  37022. 'encodeOffsets': [[
  37023. 115617,
  37024. 35584
  37025. ]]
  37026. }
  37027. },
  37028. {
  37029. 'type': 'Feature',
  37030. 'id': '4105',
  37031. 'properties': {
  37032. 'name': '安阳市',
  37033. 'cp': [
  37034. 114.5325,
  37035. 36.0022
  37036. ],
  37037. 'childNum': 6
  37038. },
  37039. 'geometry': {
  37040. 'type': 'Polygon',
  37041. '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™'],
  37042. 'encodeOffsets': [[
  37043. 117676,
  37044. 36917
  37045. ]]
  37046. }
  37047. },
  37048. {
  37049. 'type': 'Feature',
  37050. 'id': '4102',
  37051. 'properties': {
  37052. 'name': '开封市',
  37053. 'cp': [
  37054. 114.5764,
  37055. 34.6124
  37056. ],
  37057. 'childNum': 6
  37058. },
  37059. 'geometry': {
  37060. 'type': 'Polygon',
  37061. '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ꄘ'],
  37062. 'encodeOffsets': [[
  37063. 116641,
  37064. 35280
  37065. ]]
  37066. }
  37067. },
  37068. {
  37069. 'type': 'Feature',
  37070. 'id': '4108',
  37071. 'properties': {
  37072. 'name': '焦作市',
  37073. 'cp': [
  37074. 112.8406,
  37075. 35.1508
  37076. ],
  37077. 'childNum': 8
  37078. },
  37079. 'geometry': {
  37080. 'type': 'Polygon',
  37081. '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'],
  37082. 'encodeOffsets': [[
  37083. 114728,
  37084. 35888
  37085. ]]
  37086. }
  37087. },
  37088. {
  37089. 'type': 'Feature',
  37090. 'id': '4110',
  37091. 'properties': {
  37092. 'name': '许昌市',
  37093. 'cp': [
  37094. 113.6975,
  37095. 34.0466
  37096. ],
  37097. 'childNum': 6
  37098. },
  37099. 'geometry': {
  37100. 'type': 'Polygon',
  37101. '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'],
  37102. 'encodeOffsets': [[
  37103. 115797,
  37104. 35089
  37105. ]]
  37106. }
  37107. },
  37108. {
  37109. 'type': 'Feature',
  37110. 'id': '4109',
  37111. 'properties': {
  37112. 'name': '濮阳市',
  37113. 'cp': [
  37114. 115.1917,
  37115. 35.799
  37116. ],
  37117. 'childNum': 6
  37118. },
  37119. 'geometry': {
  37120. 'type': 'Polygon',
  37121. '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'],
  37122. 'encodeOffsets': [[
  37123. 117642,
  37124. 36501
  37125. ]]
  37126. }
  37127. },
  37128. {
  37129. 'type': 'Feature',
  37130. 'id': '4111',
  37131. 'properties': {
  37132. 'name': '漯河市',
  37133. 'cp': [
  37134. 113.8733,
  37135. 33.6951
  37136. ],
  37137. 'childNum': 3
  37138. },
  37139. 'geometry': {
  37140. 'type': 'Polygon',
  37141. '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êƎ'],
  37142. 'encodeOffsets': [[
  37143. 116348,
  37144. 34431
  37145. ]]
  37146. }
  37147. },
  37148. {
  37149. 'type': 'Feature',
  37150. 'id': '4106',
  37151. 'properties': {
  37152. 'name': '鹤壁市',
  37153. 'cp': [
  37154. 114.3787,
  37155. 35.744
  37156. ],
  37157. 'childNum': 3
  37158. },
  37159. 'geometry': {
  37160. 'type': 'Polygon',
  37161. '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'],
  37162. 'encodeOffsets': [[
  37163. 117158,
  37164. 36338
  37165. ]]
  37166. }
  37167. }
  37168. ],
  37169. 'UTF8Encoding': true
  37170. };
  37171. });define('echarts/util/mapData/geoJson/hu_bei_geo', [], function () {
  37172. return {
  37173. 'type': 'FeatureCollection',
  37174. 'features': [
  37175. {
  37176. 'type': 'Feature',
  37177. 'id': '4228',
  37178. 'properties': {
  37179. 'name': '恩施土家族苗族自治州',
  37180. 'cp': [
  37181. 109.5007,
  37182. 30.2563
  37183. ],
  37184. 'childNum': 8
  37185. },
  37186. 'geometry': {
  37187. 'type': 'Polygon',
  37188. '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š'],
  37189. 'encodeOffsets': [[
  37190. 112816,
  37191. 32052
  37192. ]]
  37193. }
  37194. },
  37195. {
  37196. 'type': 'Feature',
  37197. 'id': '4203',
  37198. 'properties': {
  37199. 'name': '十堰市',
  37200. 'cp': [
  37201. 110.5115,
  37202. 32.3877
  37203. ],
  37204. 'childNum': 9
  37205. },
  37206. 'geometry': {
  37207. 'type': 'MultiPolygon',
  37208. 'coordinates': [
  37209. ['@@@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'],
  37210. ['@@mUkUUm@nllVKXXVK']
  37211. ],
  37212. 'encodeOffsets': [
  37213. [[
  37214. 113918,
  37215. 33739
  37216. ]],
  37217. [[
  37218. 113817,
  37219. 32811
  37220. ]]
  37221. ]
  37222. }
  37223. },
  37224. {
  37225. 'type': 'Feature',
  37226. 'id': '4205',
  37227. 'properties': {
  37228. 'name': '宜昌市',
  37229. 'cp': [
  37230. 111.1707,
  37231. 30.7617
  37232. ],
  37233. 'childNum': 9
  37234. },
  37235. 'geometry': {
  37236. 'type': 'Polygon',
  37237. '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'],
  37238. 'encodeOffsets': [[
  37239. 112906,
  37240. 30961
  37241. ]]
  37242. }
  37243. },
  37244. {
  37245. 'type': 'Feature',
  37246. 'id': '4206',
  37247. 'properties': {
  37248. 'name': '襄樊市',
  37249. 'cp': [
  37250. 111.9397,
  37251. 31.9263
  37252. ],
  37253. 'childNum': 7
  37254. },
  37255. 'geometry': {
  37256. 'type': 'Polygon',
  37257. 'coordinates': [
  37258. '@@@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™`ƒš',
  37259. '@@kUUm@nllVKXXVKmU'
  37260. ],
  37261. 'encodeOffsets': [
  37262. [
  37263. 113423,
  37264. 32597
  37265. ],
  37266. [
  37267. 113794,
  37268. 32800
  37269. ]
  37270. ]
  37271. }
  37272. },
  37273. {
  37274. 'type': 'Feature',
  37275. 'id': '4211',
  37276. 'properties': {
  37277. 'name': '黄冈市',
  37278. 'cp': [
  37279. 115.2686,
  37280. 30.6628
  37281. ],
  37282. 'childNum': 10
  37283. },
  37284. 'geometry': {
  37285. 'type': 'Polygon',
  37286. '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'],
  37287. 'encodeOffsets': [[
  37288. 117181,
  37289. 32063
  37290. ]]
  37291. }
  37292. },
  37293. {
  37294. 'type': 'Feature',
  37295. 'id': '4210',
  37296. 'properties': {
  37297. 'name': '荆州市',
  37298. 'cp': [
  37299. 113.291,
  37300. 30.0092
  37301. ],
  37302. 'childNum': 7
  37303. },
  37304. 'geometry': {
  37305. 'type': 'Polygon',
  37306. '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'],
  37307. 'encodeOffsets': [[
  37308. 113918,
  37309. 30764
  37310. ]]
  37311. }
  37312. },
  37313. {
  37314. 'type': 'Feature',
  37315. 'id': '4208',
  37316. 'properties': {
  37317. 'name': '荆门市',
  37318. 'cp': [
  37319. 112.6758,
  37320. 30.9979
  37321. ],
  37322. 'childNum': 4
  37323. },
  37324. 'geometry': {
  37325. 'type': 'Polygon',
  37326. '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'],
  37327. 'encodeOffsets': [[
  37328. 114548,
  37329. 31984
  37330. ]]
  37331. }
  37332. },
  37333. {
  37334. 'type': 'Feature',
  37335. 'id': '4212',
  37336. 'properties': {
  37337. 'name': '咸宁市',
  37338. 'cp': [
  37339. 114.2578,
  37340. 29.6631
  37341. ],
  37342. 'childNum': 6
  37343. },
  37344. 'geometry': {
  37345. 'type': 'Polygon',
  37346. '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'],
  37347. 'encodeOffsets': [[
  37348. 116303,
  37349. 30567
  37350. ]]
  37351. }
  37352. },
  37353. {
  37354. 'type': 'Feature',
  37355. 'id': '4213',
  37356. 'properties': {
  37357. 'name': '随州市',
  37358. 'cp': [
  37359. 113.4338,
  37360. 31.8768
  37361. ],
  37362. 'childNum': 2
  37363. },
  37364. 'geometry': {
  37365. 'type': 'Polygon',
  37366. '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'],
  37367. 'encodeOffsets': [[
  37368. 115830,
  37369. 33154
  37370. ]]
  37371. }
  37372. },
  37373. {
  37374. 'type': 'Feature',
  37375. 'id': '4209',
  37376. 'properties': {
  37377. 'name': '孝感市',
  37378. 'cp': [
  37379. 113.9502,
  37380. 31.1188
  37381. ],
  37382. 'childNum': 7
  37383. },
  37384. 'geometry': {
  37385. 'type': 'Polygon',
  37386. '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'],
  37387. 'encodeOffsets': [[
  37388. 116033,
  37389. 32091
  37390. ]]
  37391. }
  37392. },
  37393. {
  37394. 'type': 'Feature',
  37395. 'id': '4201',
  37396. 'properties': {
  37397. 'name': '武汉市',
  37398. 'cp': [
  37399. 114.3896,
  37400. 30.6628
  37401. ],
  37402. 'childNum': 1
  37403. },
  37404. 'geometry': {
  37405. 'type': 'Polygon',
  37406. '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'],
  37407. 'encodeOffsets': [[
  37408. 117000,
  37409. 32097
  37410. ]]
  37411. }
  37412. },
  37413. {
  37414. 'type': 'Feature',
  37415. 'id': '4202',
  37416. 'properties': {
  37417. 'name': '黄石市',
  37418. 'cp': [
  37419. 115.0159,
  37420. 29.9213
  37421. ],
  37422. 'childNum': 3
  37423. },
  37424. 'geometry': {
  37425. 'type': 'Polygon',
  37426. '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'],
  37427. 'encodeOffsets': [[
  37428. 117282,
  37429. 30685
  37430. ]]
  37431. }
  37432. },
  37433. {
  37434. 'type': 'Feature',
  37435. 'id': '429021',
  37436. 'properties': {
  37437. 'name': '神农架林区',
  37438. 'cp': [
  37439. 110.4565,
  37440. 31.5802
  37441. ],
  37442. 'childNum': 1
  37443. },
  37444. 'geometry': {
  37445. 'type': 'Polygon',
  37446. '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š„'],
  37447. 'encodeOffsets': [[
  37448. 112624,
  37449. 32266
  37450. ]]
  37451. }
  37452. },
  37453. {
  37454. 'type': 'Feature',
  37455. 'id': '429006',
  37456. 'properties': {
  37457. 'name': '天门市',
  37458. 'cp': [
  37459. 113.0273,
  37460. 30.6409
  37461. ],
  37462. 'childNum': 1
  37463. },
  37464. 'geometry': {
  37465. 'type': 'Polygon',
  37466. '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'],
  37467. 'encodeOffsets': [[
  37468. 116056,
  37469. 31636
  37470. ]]
  37471. }
  37472. },
  37473. {
  37474. 'type': 'Feature',
  37475. 'id': '429004',
  37476. 'properties': {
  37477. 'name': '仙桃市',
  37478. 'cp': [
  37479. 113.3789,
  37480. 30.3003
  37481. ],
  37482. 'childNum': 1
  37483. },
  37484. 'geometry': {
  37485. 'type': 'Polygon',
  37486. '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'],
  37487. 'encodeOffsets': [[
  37488. 115662,
  37489. 31259
  37490. ]]
  37491. }
  37492. },
  37493. {
  37494. 'type': 'Feature',
  37495. 'id': '429005',
  37496. 'properties': {
  37497. 'name': '潜江市',
  37498. 'cp': [
  37499. 112.7637,
  37500. 30.3607
  37501. ],
  37502. 'childNum': 1
  37503. },
  37504. 'geometry': {
  37505. 'type': 'Polygon',
  37506. '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'],
  37507. 'encodeOffsets': [[
  37508. 115234,
  37509. 31118
  37510. ]]
  37511. }
  37512. },
  37513. {
  37514. 'type': 'Feature',
  37515. 'id': '4207',
  37516. 'properties': {
  37517. 'name': '鄂州市',
  37518. 'cp': [
  37519. 114.7302,
  37520. 30.4102
  37521. ],
  37522. 'childNum': 1
  37523. },
  37524. 'geometry': {
  37525. 'type': 'Polygon',
  37526. '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@'],
  37527. 'encodeOffsets': [[
  37528. 117541,
  37529. 31349
  37530. ]]
  37531. }
  37532. }
  37533. ],
  37534. 'UTF8Encoding': true
  37535. };
  37536. });define('echarts/util/mapData/geoJson/hu_nan_geo', [], function () {
  37537. return {
  37538. 'type': 'FeatureCollection',
  37539. 'features': [
  37540. {
  37541. 'type': 'Feature',
  37542. 'id': '4312',
  37543. 'properties': {
  37544. 'name': '怀化市',
  37545. 'cp': [
  37546. 109.9512,
  37547. 27.4438
  37548. ],
  37549. 'childNum': 12
  37550. },
  37551. 'geometry': {
  37552. 'type': 'Polygon',
  37553. 'coordinates': [
  37554. '@@@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',
  37555. '@@XLVKVXVKUa@UUUmV@l'
  37556. ],
  37557. 'encodeOffsets': [
  37558. [
  37559. 112050,
  37560. 28384
  37561. ],
  37562. [
  37563. 112174,
  37564. 27394
  37565. ]
  37566. ]
  37567. }
  37568. },
  37569. {
  37570. 'type': 'Feature',
  37571. 'id': '4311',
  37572. 'properties': {
  37573. 'name': '永州市',
  37574. 'cp': [
  37575. 111.709,
  37576. 25.752
  37577. ],
  37578. 'childNum': 10
  37579. },
  37580. 'geometry': {
  37581. 'type': 'Polygon',
  37582. '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'],
  37583. 'encodeOffsets': [[
  37584. 113671,
  37585. 26989
  37586. ]]
  37587. }
  37588. },
  37589. {
  37590. 'type': 'Feature',
  37591. 'id': '4305',
  37592. 'properties': {
  37593. 'name': '邵阳市',
  37594. 'cp': [
  37595. 110.9619,
  37596. 26.8121
  37597. ],
  37598. 'childNum': 10
  37599. },
  37600. 'geometry': {
  37601. 'type': 'Polygon',
  37602. '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@'],
  37603. 'encodeOffsets': [[
  37604. 113535,
  37605. 28322
  37606. ]]
  37607. }
  37608. },
  37609. {
  37610. 'type': 'Feature',
  37611. 'id': '4310',
  37612. 'properties': {
  37613. 'name': '郴州市',
  37614. 'cp': [
  37615. 113.2361,
  37616. 25.8673
  37617. ],
  37618. 'childNum': 10
  37619. },
  37620. 'geometry': {
  37621. 'type': 'Polygon',
  37622. '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'],
  37623. 'encodeOffsets': [[
  37624. 114930,
  37625. 26747
  37626. ]]
  37627. }
  37628. },
  37629. {
  37630. 'type': 'Feature',
  37631. 'id': '4307',
  37632. 'properties': {
  37633. 'name': '常德市',
  37634. 'cp': [
  37635. 111.4014,
  37636. 29.2676
  37637. ],
  37638. 'childNum': 8
  37639. },
  37640. 'geometry': {
  37641. 'type': 'Polygon',
  37642. '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@'],
  37643. 'encodeOffsets': [[
  37644. 114976,
  37645. 30201
  37646. ]]
  37647. }
  37648. },
  37649. {
  37650. 'type': 'Feature',
  37651. 'id': '4331',
  37652. 'properties': {
  37653. 'name': '湘西土家族苗族自治州',
  37654. 'cp': [
  37655. 109.7864,
  37656. 28.6743
  37657. ],
  37658. 'childNum': 8
  37659. },
  37660. 'geometry': {
  37661. 'type': 'Polygon',
  37662. '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'],
  37663. 'encodeOffsets': [[
  37664. 112354,
  37665. 30325
  37666. ]]
  37667. }
  37668. },
  37669. {
  37670. 'type': 'Feature',
  37671. 'id': '4304',
  37672. 'properties': {
  37673. 'name': '衡阳市',
  37674. 'cp': [
  37675. 112.4121,
  37676. 26.7902
  37677. ],
  37678. 'childNum': 9
  37679. },
  37680. 'geometry': {
  37681. 'type': 'Polygon',
  37682. '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'],
  37683. 'encodeOffsets': [[
  37684. 114222,
  37685. 27484
  37686. ]]
  37687. }
  37688. },
  37689. {
  37690. 'type': 'Feature',
  37691. 'id': '4306',
  37692. 'properties': {
  37693. 'name': '岳阳市',
  37694. 'cp': [
  37695. 113.2361,
  37696. 29.1357
  37697. ],
  37698. 'childNum': 7
  37699. },
  37700. 'geometry': {
  37701. 'type': 'Polygon',
  37702. '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'],
  37703. 'encodeOffsets': [[
  37704. 116888,
  37705. 29526
  37706. ]]
  37707. }
  37708. },
  37709. {
  37710. 'type': 'Feature',
  37711. 'id': '4309',
  37712. 'properties': {
  37713. 'name': '益阳市',
  37714. 'cp': [
  37715. 111.731,
  37716. 28.3832
  37717. ],
  37718. 'childNum': 5
  37719. },
  37720. 'geometry': {
  37721. 'type': 'Polygon',
  37722. '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'],
  37723. 'encodeOffsets': [[
  37724. 113378,
  37725. 28981
  37726. ]]
  37727. }
  37728. },
  37729. {
  37730. 'type': 'Feature',
  37731. 'id': '4301',
  37732. 'properties': {
  37733. 'name': '长沙市',
  37734. 'cp': [
  37735. 113.0823,
  37736. 28.2568
  37737. ],
  37738. 'childNum': 5
  37739. },
  37740. 'geometry': {
  37741. 'type': 'Polygon',
  37742. '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'],
  37743. 'encodeOffsets': [[
  37744. 114582,
  37745. 28694
  37746. ]]
  37747. }
  37748. },
  37749. {
  37750. 'type': 'Feature',
  37751. 'id': '4302',
  37752. 'properties': {
  37753. 'name': '株洲市',
  37754. 'cp': [
  37755. 113.5327,
  37756. 27.0319
  37757. ],
  37758. 'childNum': 6
  37759. },
  37760. 'geometry': {
  37761. 'type': 'Polygon',
  37762. '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š'],
  37763. 'encodeOffsets': [[
  37764. 115774,
  37765. 28587
  37766. ]]
  37767. }
  37768. },
  37769. {
  37770. 'type': 'Feature',
  37771. 'id': '4308',
  37772. 'properties': {
  37773. 'name': '张家界市',
  37774. 'cp': [
  37775. 110.5115,
  37776. 29.328
  37777. ],
  37778. 'childNum': 3
  37779. },
  37780. 'geometry': {
  37781. 'type': 'Polygon',
  37782. '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„@Ċ¼'],
  37783. 'encodeOffsets': [[
  37784. 113288,
  37785. 30471
  37786. ]]
  37787. }
  37788. },
  37789. {
  37790. 'type': 'Feature',
  37791. 'id': '4313',
  37792. 'properties': {
  37793. 'name': '娄底市',
  37794. 'cp': [
  37795. 111.6431,
  37796. 27.7185
  37797. ],
  37798. 'childNum': 5
  37799. },
  37800. 'geometry': {
  37801. 'type': 'Polygon',
  37802. '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š@'],
  37803. 'encodeOffsets': [[
  37804. 113682,
  37805. 28699
  37806. ]]
  37807. }
  37808. },
  37809. {
  37810. 'type': 'Feature',
  37811. 'id': '4303',
  37812. 'properties': {
  37813. 'name': '湘潭市',
  37814. 'cp': [
  37815. 112.5439,
  37816. 27.7075
  37817. ],
  37818. 'childNum': 4
  37819. },
  37820. 'geometry': {
  37821. 'type': 'Polygon',
  37822. '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„'],
  37823. 'encodeOffsets': [[
  37824. 114683,
  37825. 28576
  37826. ]]
  37827. }
  37828. }
  37829. ],
  37830. 'UTF8Encoding': true
  37831. };
  37832. });define('echarts/util/mapData/geoJson/jiang_su_geo', [], function () {
  37833. return {
  37834. 'type': 'FeatureCollection',
  37835. 'features': [
  37836. {
  37837. 'type': 'Feature',
  37838. 'id': '3209',
  37839. 'properties': {
  37840. 'name': '盐城市',
  37841. 'cp': [
  37842. 120.2234,
  37843. 33.5577
  37844. ],
  37845. 'childNum': 8
  37846. },
  37847. 'geometry': {
  37848. 'type': 'Polygon',
  37849. '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'],
  37850. 'encodeOffsets': [[
  37851. 122344,
  37852. 34504
  37853. ]]
  37854. }
  37855. },
  37856. {
  37857. 'type': 'Feature',
  37858. 'id': '3203',
  37859. 'properties': {
  37860. 'name': '徐州市',
  37861. 'cp': [
  37862. 117.5208,
  37863. 34.3268
  37864. ],
  37865. 'childNum': 7
  37866. },
  37867. 'geometry': {
  37868. 'type': 'Polygon',
  37869. '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'],
  37870. 'encodeOffsets': [[
  37871. 121005,
  37872. 35213
  37873. ]]
  37874. }
  37875. },
  37876. {
  37877. 'type': 'Feature',
  37878. 'id': '3206',
  37879. 'properties': {
  37880. 'name': '南通市',
  37881. 'cp': [
  37882. 121.1023,
  37883. 32.1625
  37884. ],
  37885. 'childNum': 7
  37886. },
  37887. 'geometry': {
  37888. 'type': 'Polygon',
  37889. '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'],
  37890. 'encodeOffsets': [[
  37891. 123087,
  37892. 33385
  37893. ]]
  37894. }
  37895. },
  37896. {
  37897. 'type': 'Feature',
  37898. 'id': '3208',
  37899. 'properties': {
  37900. 'name': '淮安市',
  37901. 'cp': [
  37902. 118.927,
  37903. 33.4039
  37904. ],
  37905. 'childNum': 5
  37906. },
  37907. 'geometry': {
  37908. 'type': 'Polygon',
  37909. '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è@Æ'],
  37910. 'encodeOffsets': [[
  37911. 121062,
  37912. 33975
  37913. ]]
  37914. }
  37915. },
  37916. {
  37917. 'type': 'Feature',
  37918. 'id': '3205',
  37919. 'properties': {
  37920. 'name': '苏州市',
  37921. 'cp': [
  37922. 120.6519,
  37923. 31.3989
  37924. ],
  37925. 'childNum': 6
  37926. },
  37927. 'geometry': {
  37928. 'type': 'Polygon',
  37929. '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'],
  37930. 'encodeOffsets': [[
  37931. 122794,
  37932. 31917
  37933. ]]
  37934. }
  37935. },
  37936. {
  37937. 'type': 'Feature',
  37938. 'id': '3213',
  37939. 'properties': {
  37940. 'name': '宿迁市',
  37941. 'cp': [
  37942. 118.5535,
  37943. 33.7775
  37944. ],
  37945. 'childNum': 4
  37946. },
  37947. 'geometry': {
  37948. 'type': 'Polygon',
  37949. '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'],
  37950. 'encodeOffsets': [[
  37951. 121005,
  37952. 34560
  37953. ]]
  37954. }
  37955. },
  37956. {
  37957. 'type': 'Feature',
  37958. 'id': '3207',
  37959. 'properties': {
  37960. 'name': '连云港市',
  37961. 'cp': [
  37962. 119.1248,
  37963. 34.552
  37964. ],
  37965. 'childNum': 5
  37966. },
  37967. 'geometry': {
  37968. 'type': 'Polygon',
  37969. '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'],
  37970. 'encodeOffsets': [[
  37971. 121253,
  37972. 35264
  37973. ]]
  37974. }
  37975. },
  37976. {
  37977. 'type': 'Feature',
  37978. 'id': '3210',
  37979. 'properties': {
  37980. 'name': '扬州市',
  37981. 'cp': [
  37982. 119.4653,
  37983. 32.8162
  37984. ],
  37985. 'childNum': 5
  37986. },
  37987. 'geometry': {
  37988. 'type': 'Polygon',
  37989. '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@'],
  37990. 'encodeOffsets': [[
  37991. 121928,
  37992. 33244
  37993. ]]
  37994. }
  37995. },
  37996. {
  37997. 'type': 'Feature',
  37998. 'id': '3201',
  37999. 'properties': {
  38000. 'name': '南京市',
  38001. 'cp': [
  38002. 118.8062,
  38003. 31.9208
  38004. ],
  38005. 'childNum': 3
  38006. },
  38007. 'geometry': {
  38008. 'type': 'Polygon',
  38009. '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'],
  38010. 'encodeOffsets': [[
  38011. 121928,
  38012. 33244
  38013. ]]
  38014. }
  38015. },
  38016. {
  38017. 'type': 'Feature',
  38018. 'id': '3212',
  38019. 'properties': {
  38020. 'name': '泰州市',
  38021. 'cp': [
  38022. 120.0586,
  38023. 32.5525
  38024. ],
  38025. 'childNum': 5
  38026. },
  38027. 'geometry': {
  38028. 'type': 'Polygon',
  38029. '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'],
  38030. 'encodeOffsets': [[
  38031. 122592,
  38032. 34015
  38033. ]]
  38034. }
  38035. },
  38036. {
  38037. 'type': 'Feature',
  38038. 'id': '3202',
  38039. 'properties': {
  38040. 'name': '无锡市',
  38041. 'cp': [
  38042. 120.3442,
  38043. 31.5527
  38044. ],
  38045. 'childNum': 3
  38046. },
  38047. 'geometry': {
  38048. 'type': 'Polygon',
  38049. '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'],
  38050. 'encodeOffsets': [[
  38051. 123064,
  38052. 32513
  38053. ]]
  38054. }
  38055. },
  38056. {
  38057. 'type': 'Feature',
  38058. 'id': '3204',
  38059. 'properties': {
  38060. 'name': '常州市',
  38061. 'cp': [
  38062. 119.4543,
  38063. 31.5582
  38064. ],
  38065. 'childNum': 3
  38066. },
  38067. 'geometry': {
  38068. 'type': 'Polygon',
  38069. '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¼'],
  38070. 'encodeOffsets': [[
  38071. 122097,
  38072. 32389
  38073. ]]
  38074. }
  38075. },
  38076. {
  38077. 'type': 'Feature',
  38078. 'id': '3211',
  38079. 'properties': {
  38080. 'name': '镇江市',
  38081. 'cp': [
  38082. 119.4763,
  38083. 31.9702
  38084. ],
  38085. 'childNum': 4
  38086. },
  38087. 'geometry': {
  38088. 'type': 'Polygon',
  38089. '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'],
  38090. 'encodeOffsets': [[
  38091. 122097,
  38092. 32997
  38093. ]]
  38094. }
  38095. }
  38096. ],
  38097. 'UTF8Encoding': true
  38098. };
  38099. });define('echarts/util/mapData/geoJson/jiang_xi_geo', [], function () {
  38100. return {
  38101. 'type': 'FeatureCollection',
  38102. 'features': [
  38103. {
  38104. 'type': 'Feature',
  38105. 'id': '3607',
  38106. 'properties': {
  38107. 'name': '赣州市',
  38108. 'cp': [
  38109. 115.2795,
  38110. 25.8124
  38111. ],
  38112. 'childNum': 18
  38113. },
  38114. 'geometry': {
  38115. 'type': 'Polygon',
  38116. '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'],
  38117. 'encodeOffsets': [[
  38118. 116753,
  38119. 26596
  38120. ]]
  38121. }
  38122. },
  38123. {
  38124. 'type': 'Feature',
  38125. 'id': '3608',
  38126. 'properties': {
  38127. 'name': '吉安市',
  38128. 'cp': [
  38129. 114.884,
  38130. 26.9659
  38131. ],
  38132. 'childNum': 12
  38133. },
  38134. 'geometry': {
  38135. 'type': 'Polygon',
  38136. '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'],
  38137. 'encodeOffsets': [[
  38138. 116652,
  38139. 27608
  38140. ]]
  38141. }
  38142. },
  38143. {
  38144. 'type': 'Feature',
  38145. 'id': '3611',
  38146. 'properties': {
  38147. 'name': '上饶市',
  38148. 'cp': [
  38149. 117.8613,
  38150. 28.7292
  38151. ],
  38152. 'childNum': 12
  38153. },
  38154. 'geometry': {
  38155. 'type': 'Polygon',
  38156. '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'],
  38157. 'encodeOffsets': [[
  38158. 119194,
  38159. 29751
  38160. ]]
  38161. }
  38162. },
  38163. {
  38164. 'type': 'Feature',
  38165. 'id': '3604',
  38166. 'properties': {
  38167. 'name': '九江市',
  38168. 'cp': [
  38169. 115.4224,
  38170. 29.3774
  38171. ],
  38172. 'childNum': 12
  38173. },
  38174. 'geometry': {
  38175. 'type': 'Polygon',
  38176. '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„ƒ'],
  38177. 'encodeOffsets': [[
  38178. 119487,
  38179. 30319
  38180. ]]
  38181. }
  38182. },
  38183. {
  38184. 'type': 'Feature',
  38185. 'id': '3610',
  38186. 'properties': {
  38187. 'name': '抚州市',
  38188. 'cp': [
  38189. 116.4441,
  38190. 27.4933
  38191. ],
  38192. 'childNum': 11
  38193. },
  38194. 'geometry': {
  38195. 'type': 'Polygon',
  38196. '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@°Þ'],
  38197. 'encodeOffsets': [[
  38198. 118508,
  38199. 28396
  38200. ]]
  38201. }
  38202. },
  38203. {
  38204. 'type': 'Feature',
  38205. 'id': '3609',
  38206. 'properties': {
  38207. 'name': '宜春市',
  38208. 'cp': [
  38209. 115.0159,
  38210. 28.3228
  38211. ],
  38212. 'childNum': 10
  38213. },
  38214. 'geometry': {
  38215. 'type': 'Polygon',
  38216. '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'],
  38217. 'encodeOffsets': [[
  38218. 116652,
  38219. 28666
  38220. ]]
  38221. }
  38222. },
  38223. {
  38224. 'type': 'Feature',
  38225. 'id': '3601',
  38226. 'properties': {
  38227. 'name': '南昌市',
  38228. 'cp': [
  38229. 116.0046,
  38230. 28.6633
  38231. ],
  38232. 'childNum': 6
  38233. },
  38234. 'geometry': {
  38235. 'type': 'Polygon',
  38236. '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'],
  38237. 'encodeOffsets': [[
  38238. 118249,
  38239. 29700
  38240. ]]
  38241. }
  38242. },
  38243. {
  38244. 'type': 'Feature',
  38245. 'id': '3602',
  38246. 'properties': {
  38247. 'name': '景德镇市',
  38248. 'cp': [
  38249. 117.334,
  38250. 29.3225
  38251. ],
  38252. 'childNum': 3
  38253. },
  38254. 'geometry': {
  38255. 'type': 'Polygon',
  38256. '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'],
  38257. 'encodeOffsets': [[
  38258. 119903,
  38259. 30409
  38260. ]]
  38261. }
  38262. },
  38263. {
  38264. 'type': 'Feature',
  38265. 'id': '3603',
  38266. 'properties': {
  38267. 'name': '萍乡市',
  38268. 'cp': [
  38269. 113.9282,
  38270. 27.4823
  38271. ],
  38272. 'childNum': 4
  38273. },
  38274. 'geometry': {
  38275. 'type': 'Polygon',
  38276. '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'],
  38277. 'encodeOffsets': [[
  38278. 116652,
  38279. 28666
  38280. ]]
  38281. }
  38282. },
  38283. {
  38284. 'type': 'Feature',
  38285. 'id': '3606',
  38286. 'properties': {
  38287. 'name': '鹰潭市',
  38288. 'cp': [
  38289. 117.0813,
  38290. 28.2349
  38291. ],
  38292. 'childNum': 3
  38293. },
  38294. 'geometry': {
  38295. 'type': 'Polygon',
  38296. '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'],
  38297. 'encodeOffsets': [[
  38298. 119599,
  38299. 29025
  38300. ]]
  38301. }
  38302. },
  38303. {
  38304. 'type': 'Feature',
  38305. 'id': '3605',
  38306. 'properties': {
  38307. 'name': '新余市',
  38308. 'cp': [
  38309. 114.95,
  38310. 27.8174
  38311. ],
  38312. 'childNum': 2
  38313. },
  38314. 'geometry': {
  38315. 'type': 'Polygon',
  38316. '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'],
  38317. 'encodeOffsets': [[
  38318. 118182,
  38319. 28542
  38320. ]]
  38321. }
  38322. }
  38323. ],
  38324. 'UTF8Encoding': true
  38325. };
  38326. });define('echarts/util/mapData/geoJson/ji_lin_geo', [], function () {
  38327. return {
  38328. 'type': 'FeatureCollection',
  38329. 'features': [
  38330. {
  38331. 'type': 'Feature',
  38332. 'id': '2224',
  38333. 'properties': {
  38334. 'name': '延边朝鲜族自治州',
  38335. 'cp': [
  38336. 129.397,
  38337. 43.2587
  38338. ],
  38339. 'childNum': 8
  38340. },
  38341. 'geometry': {
  38342. 'type': 'Polygon',
  38343. '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Ž'],
  38344. 'encodeOffsets': [[
  38345. 131086,
  38346. 44798
  38347. ]]
  38348. }
  38349. },
  38350. {
  38351. 'type': 'Feature',
  38352. 'id': '2202',
  38353. 'properties': {
  38354. 'name': '吉林市',
  38355. 'cp': [
  38356. 126.8372,
  38357. 43.6047
  38358. ],
  38359. 'childNum': 6
  38360. },
  38361. 'geometry': {
  38362. 'type': 'Polygon',
  38363. '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„š'],
  38364. 'encodeOffsets': [[
  38365. 128701,
  38366. 44303
  38367. ]]
  38368. }
  38369. },
  38370. {
  38371. 'type': 'Feature',
  38372. 'id': '2208',
  38373. 'properties': {
  38374. 'name': '白城市',
  38375. 'cp': [
  38376. 123.0029,
  38377. 45.2637
  38378. ],
  38379. 'childNum': 5
  38380. },
  38381. 'geometry': {
  38382. 'type': 'Polygon',
  38383. '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ƒ'],
  38384. 'encodeOffsets': [[
  38385. 127350,
  38386. 46553
  38387. ]]
  38388. }
  38389. },
  38390. {
  38391. 'type': 'Feature',
  38392. 'id': '2207',
  38393. 'properties': {
  38394. 'name': '松原市',
  38395. 'cp': [
  38396. 124.0906,
  38397. 44.7198
  38398. ],
  38399. 'childNum': 5
  38400. },
  38401. 'geometry': {
  38402. 'type': 'Polygon',
  38403. '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'],
  38404. 'encodeOffsets': [[
  38405. 126068,
  38406. 45580
  38407. ]]
  38408. }
  38409. },
  38410. {
  38411. 'type': 'Feature',
  38412. 'id': '2201',
  38413. 'properties': {
  38414. 'name': '长春市',
  38415. 'cp': [
  38416. 125.8154,
  38417. 44.2584
  38418. ],
  38419. 'childNum': 5
  38420. },
  38421. 'geometry': {
  38422. 'type': 'Polygon',
  38423. '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'],
  38424. 'encodeOffsets': [[
  38425. 128262,
  38426. 45940
  38427. ]]
  38428. }
  38429. },
  38430. {
  38431. 'type': 'Feature',
  38432. 'id': '2206',
  38433. 'properties': {
  38434. 'name': '白山市',
  38435. 'cp': [
  38436. 127.2217,
  38437. 42.0941
  38438. ],
  38439. 'childNum': 5
  38440. },
  38441. 'geometry': {
  38442. 'type': 'Polygon',
  38443. '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'],
  38444. 'encodeOffsets': [[
  38445. 129567,
  38446. 43262
  38447. ]]
  38448. }
  38449. },
  38450. {
  38451. 'type': 'Feature',
  38452. 'id': '2205',
  38453. 'properties': {
  38454. 'name': '通化市',
  38455. 'cp': [
  38456. 125.9583,
  38457. 41.8579
  38458. ],
  38459. 'childNum': 7
  38460. },
  38461. 'geometry': {
  38462. 'type': 'Polygon',
  38463. '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'],
  38464. 'encodeOffsets': [[
  38465. 128273,
  38466. 43330
  38467. ]]
  38468. }
  38469. },
  38470. {
  38471. 'type': 'Feature',
  38472. 'id': '2203',
  38473. 'properties': {
  38474. 'name': '四平市',
  38475. 'cp': [
  38476. 124.541,
  38477. 43.4894
  38478. ],
  38479. 'childNum': 5
  38480. },
  38481. 'geometry': {
  38482. 'type': 'Polygon',
  38483. '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¯þ'],
  38484. 'encodeOffsets': [[
  38485. 126293,
  38486. 45124
  38487. ]]
  38488. }
  38489. },
  38490. {
  38491. 'type': 'Feature',
  38492. 'id': '2204',
  38493. 'properties': {
  38494. 'name': '辽源市',
  38495. 'cp': [
  38496. 125.343,
  38497. 42.7643
  38498. ],
  38499. 'childNum': 3
  38500. },
  38501. 'geometry': {
  38502. 'type': 'Polygon',
  38503. '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'],
  38504. 'encodeOffsets': [[
  38505. 127879,
  38506. 44168
  38507. ]]
  38508. }
  38509. }
  38510. ],
  38511. 'UTF8Encoding': true
  38512. };
  38513. });define('echarts/util/mapData/geoJson/liao_ning_geo', [], function () {
  38514. return {
  38515. 'type': 'FeatureCollection',
  38516. 'features': [
  38517. {
  38518. 'type': 'Feature',
  38519. 'id': '2102',
  38520. 'properties': {
  38521. 'name': '大连市',
  38522. 'cp': [
  38523. 122.2229,
  38524. 39.4409
  38525. ],
  38526. 'childNum': 5
  38527. },
  38528. 'geometry': {
  38529. 'type': 'Polygon',
  38530. '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„‚°²¤'],
  38531. 'encodeOffsets': [[
  38532. 124786,
  38533. 41102
  38534. ]]
  38535. }
  38536. },
  38537. {
  38538. 'type': 'Feature',
  38539. 'id': '2113',
  38540. 'properties': {
  38541. 'name': '朝阳市',
  38542. 'cp': [
  38543. 120.0696,
  38544. 41.4899
  38545. ],
  38546. 'childNum': 6
  38547. },
  38548. 'geometry': {
  38549. 'type': 'Polygon',
  38550. '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'],
  38551. 'encodeOffsets': [[
  38552. 123919,
  38553. 43262
  38554. ]]
  38555. }
  38556. },
  38557. {
  38558. 'type': 'Feature',
  38559. 'id': '2106',
  38560. 'properties': {
  38561. 'name': '丹东市',
  38562. 'cp': [
  38563. 124.541,
  38564. 40.4242
  38565. ],
  38566. 'childNum': 4
  38567. },
  38568. 'geometry': {
  38569. 'type': 'Polygon',
  38570. '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'],
  38571. 'encodeOffsets': [[
  38572. 126372,
  38573. 40967
  38574. ]]
  38575. }
  38576. },
  38577. {
  38578. 'type': 'Feature',
  38579. 'id': '2112',
  38580. 'properties': {
  38581. 'name': '铁岭市',
  38582. 'cp': [
  38583. 124.2773,
  38584. 42.7423
  38585. ],
  38586. 'childNum': 7
  38587. },
  38588. 'geometry': {
  38589. 'type': 'Polygon',
  38590. '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'],
  38591. 'encodeOffsets': [[
  38592. 126720,
  38593. 43572
  38594. ]]
  38595. }
  38596. },
  38597. {
  38598. 'type': 'Feature',
  38599. 'id': '2101',
  38600. 'properties': {
  38601. 'name': '沈阳市',
  38602. 'cp': [
  38603. 123.1238,
  38604. 42.1216
  38605. ],
  38606. 'childNum': 5
  38607. },
  38608. 'geometry': {
  38609. 'type': 'Polygon',
  38610. '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'],
  38611. 'encodeOffsets': [[
  38612. 125359,
  38613. 43139
  38614. ]]
  38615. }
  38616. },
  38617. {
  38618. 'type': 'Feature',
  38619. 'id': '2104',
  38620. 'properties': {
  38621. 'name': '抚顺市',
  38622. 'cp': [
  38623. 124.585,
  38624. 41.8579
  38625. ],
  38626. 'childNum': 4
  38627. },
  38628. 'geometry': {
  38629. 'type': 'Polygon',
  38630. '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'],
  38631. 'encodeOffsets': [[
  38632. 126754,
  38633. 42992
  38634. ]]
  38635. }
  38636. },
  38637. {
  38638. 'type': 'Feature',
  38639. 'id': '2114',
  38640. 'properties': {
  38641. 'name': '葫芦岛市',
  38642. 'cp': [
  38643. 120.1575,
  38644. 40.578
  38645. ],
  38646. 'childNum': 4
  38647. },
  38648. 'geometry': {
  38649. 'type': 'Polygon',
  38650. '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„'],
  38651. 'encodeOffsets': [[
  38652. 122097,
  38653. 41575
  38654. ]]
  38655. }
  38656. },
  38657. {
  38658. 'type': 'Feature',
  38659. 'id': '2109',
  38660. 'properties': {
  38661. 'name': '阜新市',
  38662. 'cp': [
  38663. 122.0032,
  38664. 42.2699
  38665. ],
  38666. 'childNum': 4
  38667. },
  38668. 'geometry': {
  38669. 'type': 'Polygon',
  38670. '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'],
  38671. 'encodeOffsets': [[
  38672. 123919,
  38673. 43262
  38674. ]]
  38675. }
  38676. },
  38677. {
  38678. 'type': 'Feature',
  38679. 'id': '2107',
  38680. 'properties': {
  38681. 'name': '锦州市',
  38682. 'cp': [
  38683. 121.6626,
  38684. 41.4294
  38685. ],
  38686. 'childNum': 5
  38687. },
  38688. 'geometry': {
  38689. 'type': 'Polygon',
  38690. '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'],
  38691. 'encodeOffsets': [[
  38692. 123694,
  38693. 42391
  38694. ]]
  38695. }
  38696. },
  38697. {
  38698. 'type': 'Feature',
  38699. 'id': '2103',
  38700. 'properties': {
  38701. 'name': '鞍山市',
  38702. 'cp': [
  38703. 123.0798,
  38704. 40.6055
  38705. ],
  38706. 'childNum': 4
  38707. },
  38708. 'geometry': {
  38709. 'type': 'Polygon',
  38710. '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'],
  38711. 'encodeOffsets': [[
  38712. 125123,
  38713. 42447
  38714. ]]
  38715. }
  38716. },
  38717. {
  38718. 'type': 'Feature',
  38719. 'id': '2105',
  38720. 'properties': {
  38721. 'name': '本溪市',
  38722. 'cp': [
  38723. 124.1455,
  38724. 41.1987
  38725. ],
  38726. 'childNum': 3
  38727. },
  38728. 'geometry': {
  38729. 'type': 'Polygon',
  38730. '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'],
  38731. 'encodeOffsets': [[
  38732. 126552,
  38733. 41839
  38734. ]]
  38735. }
  38736. },
  38737. {
  38738. 'type': 'Feature',
  38739. 'id': '2108',
  38740. 'properties': {
  38741. 'name': '营口市',
  38742. 'cp': [
  38743. 122.4316,
  38744. 40.4297
  38745. ],
  38746. 'childNum': 4
  38747. },
  38748. 'geometry': {
  38749. 'type': 'Polygon',
  38750. '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'],
  38751. 'encodeOffsets': [[
  38752. 124786,
  38753. 41102
  38754. ]]
  38755. }
  38756. },
  38757. {
  38758. 'type': 'Feature',
  38759. 'id': '2110',
  38760. 'properties': {
  38761. 'name': '辽阳市',
  38762. 'cp': [
  38763. 123.4094,
  38764. 41.1383
  38765. ],
  38766. 'childNum': 5
  38767. },
  38768. 'geometry': {
  38769. 'type': 'Polygon',
  38770. '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'],
  38771. 'encodeOffsets': [[
  38772. 125562,
  38773. 42194
  38774. ]]
  38775. }
  38776. },
  38777. {
  38778. 'type': 'Feature',
  38779. 'id': '2111',
  38780. 'properties': {
  38781. 'name': '盘锦市',
  38782. 'cp': [
  38783. 121.9482,
  38784. 41.0449
  38785. ],
  38786. 'childNum': 3
  38787. },
  38788. 'geometry': {
  38789. 'type': 'Polygon',
  38790. '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'],
  38791. 'encodeOffsets': [[
  38792. 124392,
  38793. 41822
  38794. ]]
  38795. }
  38796. }
  38797. ],
  38798. 'UTF8Encoding': true
  38799. };
  38800. });define('echarts/util/mapData/geoJson/nei_meng_gu_geo', [], function () {
  38801. return {
  38802. 'type': 'FeatureCollection',
  38803. 'features': [
  38804. {
  38805. 'type': 'Feature',
  38806. 'id': '1507',
  38807. 'properties': {
  38808. 'name': '呼伦贝尔市',
  38809. 'cp': [
  38810. 120.8057,
  38811. 50.2185
  38812. ],
  38813. 'childNum': 13
  38814. },
  38815. 'geometry': {
  38816. 'type': 'Polygon',
  38817. '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™ċ™°é¯¹'],
  38818. 'encodeOffsets': [[
  38819. 128194,
  38820. 51014
  38821. ]]
  38822. }
  38823. },
  38824. {
  38825. 'type': 'Feature',
  38826. 'id': '1529',
  38827. 'properties': {
  38828. 'name': '阿拉善盟',
  38829. 'cp': [
  38830. 102.019,
  38831. 40.1001
  38832. ],
  38833. 'childNum': 3
  38834. },
  38835. 'geometry': {
  38836. 'type': 'Polygon',
  38837. '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Þ»Ȯź'],
  38838. 'encodeOffsets': [[
  38839. 107764,
  38840. 42750
  38841. ]]
  38842. }
  38843. },
  38844. {
  38845. 'type': 'Feature',
  38846. 'id': '1525',
  38847. 'properties': {
  38848. 'name': '锡林郭勒盟',
  38849. 'cp': [
  38850. 115.6421,
  38851. 44.176
  38852. ],
  38853. 'childNum': 12
  38854. },
  38855. 'geometry': {
  38856. 'type': 'Polygon',
  38857. '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ȁƜ'],
  38858. 'encodeOffsets': [[
  38859. 113817,
  38860. 44421
  38861. ]]
  38862. }
  38863. },
  38864. {
  38865. 'type': 'Feature',
  38866. 'id': '1506',
  38867. 'properties': {
  38868. 'name': '鄂尔多斯市',
  38869. 'cp': [
  38870. 108.9734,
  38871. 39.2487
  38872. ],
  38873. 'childNum': 8
  38874. },
  38875. 'geometry': {
  38876. 'type': 'Polygon',
  38877. '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Ċ'],
  38878. 'encodeOffsets': [[
  38879. 109542,
  38880. 39983
  38881. ]]
  38882. }
  38883. },
  38884. {
  38885. 'type': 'Feature',
  38886. 'id': '1504',
  38887. 'properties': {
  38888. 'name': '赤峰市',
  38889. 'cp': [
  38890. 118.6743,
  38891. 43.2642
  38892. ],
  38893. 'childNum': 10
  38894. },
  38895. 'geometry': {
  38896. 'type': 'Polygon',
  38897. '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Āšè'],
  38898. 'encodeOffsets': [[
  38899. 122232,
  38900. 46328
  38901. ]]
  38902. }
  38903. },
  38904. {
  38905. 'type': 'Feature',
  38906. 'id': '1508',
  38907. 'properties': {
  38908. 'name': '巴彦淖尔市',
  38909. 'cp': [
  38910. 107.5562,
  38911. 41.3196
  38912. ],
  38913. 'childNum': 7
  38914. },
  38915. 'geometry': {
  38916. 'type': 'Polygon',
  38917. '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ǠšƐ'],
  38918. 'encodeOffsets': [[
  38919. 107764,
  38920. 42750
  38921. ]]
  38922. }
  38923. },
  38924. {
  38925. 'type': 'Feature',
  38926. 'id': '1505',
  38927. 'properties': {
  38928. 'name': '通辽市',
  38929. 'cp': [
  38930. 121.4758,
  38931. 43.9673
  38932. ],
  38933. 'childNum': 8
  38934. },
  38935. 'geometry': {
  38936. 'type': 'Polygon',
  38937. '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ɱłō¦'],
  38938. 'encodeOffsets': [[
  38939. 122097,
  38940. 46379
  38941. ]]
  38942. }
  38943. },
  38944. {
  38945. 'type': 'Feature',
  38946. 'id': '1509',
  38947. 'properties': {
  38948. 'name': '乌兰察布市',
  38949. 'cp': [
  38950. 112.5769,
  38951. 41.77
  38952. ],
  38953. 'childNum': 11
  38954. },
  38955. 'geometry': {
  38956. 'type': 'Polygon',
  38957. '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ȁńʇʹó˂ƽŎ›Æţ¦'],
  38958. 'encodeOffsets': [[
  38959. 112984,
  38960. 43763
  38961. ]]
  38962. }
  38963. },
  38964. {
  38965. 'type': 'Feature',
  38966. 'id': '1522',
  38967. 'properties': {
  38968. 'name': '兴安盟',
  38969. 'cp': [
  38970. 121.3879,
  38971. 46.1426
  38972. ],
  38973. 'childNum': 6
  38974. },
  38975. 'geometry': {
  38976. 'type': 'Polygon',
  38977. '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'],
  38978. 'encodeOffsets': [[
  38979. 122412,
  38980. 48482
  38981. ]]
  38982. }
  38983. },
  38984. {
  38985. 'type': 'Feature',
  38986. 'id': '1502',
  38987. 'properties': {
  38988. 'name': '包头市',
  38989. 'cp': [
  38990. 110.3467,
  38991. 41.4899
  38992. ],
  38993. 'childNum': 5
  38994. },
  38995. 'geometry': {
  38996. 'type': 'Polygon',
  38997. '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›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ'],
  38998. 'encodeOffsets': [[
  38999. 112017,
  39000. 43465
  39001. ]]
  39002. }
  39003. },
  39004. {
  39005. 'type': 'Feature',
  39006. 'id': '1501',
  39007. 'properties': {
  39008. 'name': '呼和浩特市',
  39009. 'cp': [
  39010. 111.4124,
  39011. 40.4901
  39012. ],
  39013. 'childNum': 6
  39014. },
  39015. 'geometry': {
  39016. 'type': 'Polygon',
  39017. 'coordinates': ['@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸÑ°„ɲĕš°Ŏn'],
  39018. 'encodeOffsets': [[
  39019. 114098,
  39020. 42312
  39021. ]]
  39022. }
  39023. },
  39024. {
  39025. 'type': 'Feature',
  39026. 'id': '1503',
  39027. 'properties': {
  39028. 'name': '乌海市',
  39029. 'cp': [
  39030. 106.886,
  39031. 39.4739
  39032. ],
  39033. 'childNum': 1
  39034. },
  39035. 'geometry': {
  39036. 'type': 'Polygon',
  39037. 'coordinates': ['@@Ș°ÇīXњŗ@ȍlkƒlUŁ±īĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„k¤„x™œ@Ĭ'],
  39038. 'encodeOffsets': [[
  39039. 109317,
  39040. 40799
  39041. ]]
  39042. }
  39043. }
  39044. ],
  39045. 'UTF8Encoding': true
  39046. };
  39047. });define('echarts/util/mapData/geoJson/ning_xia_geo', [], function () {
  39048. return {
  39049. 'type': 'FeatureCollection',
  39050. 'features': [
  39051. {
  39052. 'type': 'Feature',
  39053. 'id': '6403',
  39054. 'properties': {
  39055. 'name': '吴忠市',
  39056. 'cp': [
  39057. 106.853,
  39058. 37.3755
  39059. ],
  39060. 'childNum': 4
  39061. },
  39062. 'geometry': {
  39063. 'type': 'Polygon',
  39064. '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¯@'],
  39065. 'encodeOffsets': [[
  39066. 108124,
  39067. 38605
  39068. ]]
  39069. }
  39070. },
  39071. {
  39072. 'type': 'Feature',
  39073. 'id': '6405',
  39074. 'properties': {
  39075. 'name': '中卫市',
  39076. 'cp': [
  39077. 105.4028,
  39078. 36.9525
  39079. ],
  39080. 'childNum': 3
  39081. },
  39082. 'geometry': {
  39083. 'type': 'Polygon',
  39084. '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ô@'],
  39085. 'encodeOffsets': [[
  39086. 108124,
  39087. 38605
  39088. ]]
  39089. }
  39090. },
  39091. {
  39092. 'type': 'Feature',
  39093. 'id': '6404',
  39094. 'properties': {
  39095. 'name': '固原市',
  39096. 'cp': [
  39097. 106.1389,
  39098. 35.9363
  39099. ],
  39100. 'childNum': 6
  39101. },
  39102. 'geometry': {
  39103. 'type': 'MultiPolygon',
  39104. 'coordinates': [
  39105. ['@@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'],
  39106. ['@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX']
  39107. ],
  39108. 'encodeOffsets': [
  39109. [[
  39110. 108023,
  39111. 37052
  39112. ]],
  39113. [[
  39114. 108541,
  39115. 36299
  39116. ]]
  39117. ]
  39118. }
  39119. },
  39120. {
  39121. 'type': 'Feature',
  39122. 'id': '6401',
  39123. 'properties': {
  39124. 'name': '银川市',
  39125. 'cp': [
  39126. 106.3586,
  39127. 38.1775
  39128. ],
  39129. 'childNum': 4
  39130. },
  39131. 'geometry': {
  39132. 'type': 'Polygon',
  39133. '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'],
  39134. 'encodeOffsets': [[
  39135. 108563,
  39136. 39803
  39137. ]]
  39138. }
  39139. },
  39140. {
  39141. 'type': 'Feature',
  39142. 'id': '6402',
  39143. 'properties': {
  39144. 'name': '石嘴山市',
  39145. 'cp': [
  39146. 106.4795,
  39147. 39.0015
  39148. ],
  39149. 'childNum': 2
  39150. },
  39151. 'geometry': {
  39152. 'type': 'Polygon',
  39153. '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@¯'],
  39154. 'encodeOffsets': [[
  39155. 109542,
  39156. 39938
  39157. ]]
  39158. }
  39159. }
  39160. ],
  39161. 'UTF8Encoding': true
  39162. };
  39163. });define('echarts/util/mapData/geoJson/qing_hai_geo', [], function () {
  39164. return {
  39165. 'type': 'FeatureCollection',
  39166. 'features': [
  39167. {
  39168. 'type': 'Feature',
  39169. 'id': '6328',
  39170. 'properties': {
  39171. 'name': '海西蒙古族藏族自治州',
  39172. 'cp': [
  39173. 94.9768,
  39174. 37.1118
  39175. ],
  39176. 'childNum': 7
  39177. },
  39178. 'geometry': {
  39179. 'type': 'MultiPolygon',
  39180. 'coordinates': [
  39181. ['@@„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@Ѳ±ƒğVUĢƒƨ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ôÑ'],
  39182. ['@@„@šƒ„@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„']
  39183. ],
  39184. 'encodeOffsets': [
  39185. [[
  39186. 100452,
  39187. 39719
  39188. ]],
  39189. [[
  39190. 91980,
  39191. 35742
  39192. ]]
  39193. ]
  39194. }
  39195. },
  39196. {
  39197. 'type': 'Feature',
  39198. 'id': '6327',
  39199. 'properties': {
  39200. 'name': '玉树藏族自治州',
  39201. 'cp': [
  39202. 93.5925,
  39203. 33.9368
  39204. ],
  39205. 'childNum': 6
  39206. },
  39207. 'geometry': {
  39208. 'type': 'Polygon',
  39209. 'coordinates': ['@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐaĢƒô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¦'],
  39210. 'encodeOffsets': [[
  39211. 93285,
  39212. 37030
  39213. ]]
  39214. }
  39215. },
  39216. {
  39217. 'type': 'Feature',
  39218. 'id': '6326',
  39219. 'properties': {
  39220. 'name': '果洛藏族自治州',
  39221. 'cp': [
  39222. 99.3823,
  39223. 34.0466
  39224. ],
  39225. 'childNum': 6
  39226. },
  39227. 'geometry': {
  39228. 'type': 'Polygon',
  39229. '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¦‚‚@²Č脦‚è'],
  39230. 'encodeOffsets': [[
  39231. 99709,
  39232. 36130
  39233. ]]
  39234. }
  39235. },
  39236. {
  39237. 'type': 'Feature',
  39238. 'id': '6325',
  39239. 'properties': {
  39240. 'name': '海南藏族自治州',
  39241. 'cp': [
  39242. 100.3711,
  39243. 35.9418
  39244. ],
  39245. 'childNum': 5
  39246. },
  39247. 'geometry': {
  39248. 'type': 'Polygon',
  39249. '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ôôŚ'],
  39250. 'encodeOffsets': [[
  39251. 101712,
  39252. 37632
  39253. ]]
  39254. }
  39255. },
  39256. {
  39257. 'type': 'Feature',
  39258. 'id': '6322',
  39259. 'properties': {
  39260. 'name': '海北藏族自治州',
  39261. 'cp': [
  39262. 100.3711,
  39263. 37.9138
  39264. ],
  39265. 'childNum': 4
  39266. },
  39267. 'geometry': {
  39268. 'type': 'Polygon',
  39269. '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@'],
  39270. 'encodeOffsets': [[
  39271. 105087,
  39272. 37992
  39273. ]]
  39274. }
  39275. },
  39276. {
  39277. 'type': 'Feature',
  39278. 'id': '6323',
  39279. 'properties': {
  39280. 'name': '黄南藏族自治州',
  39281. 'cp': [
  39282. 101.5686,
  39283. 35.1178
  39284. ],
  39285. 'childNum': 4
  39286. },
  39287. 'geometry': {
  39288. 'type': 'Polygon',
  39289. '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'],
  39290. 'encodeOffsets': [[
  39291. 103984,
  39292. 36344
  39293. ]]
  39294. }
  39295. },
  39296. {
  39297. 'type': 'Feature',
  39298. 'id': '6321',
  39299. 'properties': {
  39300. 'name': '海东地区',
  39301. 'cp': [
  39302. 102.3706,
  39303. 36.2988
  39304. ],
  39305. 'childNum': 6
  39306. },
  39307. 'geometry': {
  39308. 'type': 'Polygon',
  39309. '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'],
  39310. 'encodeOffsets': [[
  39311. 104108,
  39312. 37030
  39313. ]]
  39314. }
  39315. },
  39316. {
  39317. 'type': 'Feature',
  39318. 'id': '6301',
  39319. 'properties': {
  39320. 'name': '西宁市',
  39321. 'cp': [
  39322. 101.4038,
  39323. 36.8207
  39324. ],
  39325. 'childNum': 4
  39326. },
  39327. 'geometry': {
  39328. 'type': 'Polygon',
  39329. '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š@ĢÓ'],
  39330. 'encodeOffsets': [[
  39331. 104356,
  39332. 38042
  39333. ]]
  39334. }
  39335. }
  39336. ],
  39337. 'UTF8Encoding': true
  39338. };
  39339. });define('echarts/util/mapData/geoJson/shang_hai_geo', [], function () {
  39340. return {
  39341. 'type': 'FeatureCollection',
  39342. 'features': [
  39343. {
  39344. 'type': 'Feature',
  39345. 'id': '310230',
  39346. 'properties': {
  39347. 'name': '崇明县',
  39348. 'cp': [
  39349. 121.5637,
  39350. 31.5383
  39351. ],
  39352. 'childNum': 1
  39353. },
  39354. 'geometry': {
  39355. 'type': 'Polygon',
  39356. '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“'],
  39357. 'encodeOffsets': [[
  39358. 124908,
  39359. 32105
  39360. ]]
  39361. }
  39362. },
  39363. {
  39364. 'type': 'Feature',
  39365. 'id': '310119',
  39366. 'properties': {
  39367. 'name': '南汇区',
  39368. 'cp': [
  39369. 121.8755,
  39370. 30.954
  39371. ],
  39372. 'childNum': 1
  39373. },
  39374. 'geometry': {
  39375. 'type': 'Polygon',
  39376. '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Ƥ~'],
  39377. 'encodeOffsets': [[
  39378. 124854,
  39379. 31907
  39380. ]]
  39381. }
  39382. },
  39383. {
  39384. 'type': 'Feature',
  39385. 'id': '310120',
  39386. 'properties': {
  39387. 'name': '奉贤区',
  39388. 'cp': [
  39389. 121.5747,
  39390. 30.8475
  39391. ],
  39392. 'childNum': 1
  39393. },
  39394. 'geometry': {
  39395. 'type': 'Polygon',
  39396. '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'],
  39397. 'encodeOffsets': [[
  39398. 124274,
  39399. 31722
  39400. ]]
  39401. }
  39402. },
  39403. {
  39404. 'type': 'Feature',
  39405. 'id': '310115',
  39406. 'properties': {
  39407. 'name': '浦东新区',
  39408. 'cp': [
  39409. 121.6928,
  39410. 31.2561
  39411. ],
  39412. 'childNum': 1
  39413. },
  39414. 'geometry': {
  39415. 'type': 'Polygon',
  39416. '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'],
  39417. 'encodeOffsets': [[
  39418. 124383,
  39419. 31915
  39420. ]]
  39421. }
  39422. },
  39423. {
  39424. 'type': 'Feature',
  39425. 'id': '310116',
  39426. 'properties': {
  39427. 'name': '金山区',
  39428. 'cp': [
  39429. 121.2657,
  39430. 30.8112
  39431. ],
  39432. 'childNum': 1
  39433. },
  39434. 'geometry': {
  39435. 'type': 'Polygon',
  39436. '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'],
  39437. 'encodeOffsets': [[
  39438. 123901,
  39439. 31695
  39440. ]]
  39441. }
  39442. },
  39443. {
  39444. 'type': 'Feature',
  39445. 'id': '310118',
  39446. 'properties': {
  39447. 'name': '青浦区',
  39448. 'cp': [
  39449. 121.1751,
  39450. 31.1909
  39451. ],
  39452. 'childNum': 1
  39453. },
  39454. 'geometry': {
  39455. 'type': 'Polygon',
  39456. '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'],
  39457. 'encodeOffsets': [[
  39458. 124061,
  39459. 32028
  39460. ]]
  39461. }
  39462. },
  39463. {
  39464. 'type': 'Feature',
  39465. 'id': '310117',
  39466. 'properties': {
  39467. 'name': '松江区',
  39468. 'cp': [
  39469. 121.1984,
  39470. 31.0268
  39471. ],
  39472. 'childNum': 1
  39473. },
  39474. 'geometry': {
  39475. 'type': 'Polygon',
  39476. '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@'],
  39477. 'encodeOffsets': [[
  39478. 123933,
  39479. 31687
  39480. ]]
  39481. }
  39482. },
  39483. {
  39484. 'type': 'Feature',
  39485. 'id': '310114',
  39486. 'properties': {
  39487. 'name': '嘉定区',
  39488. 'cp': [
  39489. 121.2437,
  39490. 31.3625
  39491. ],
  39492. 'childNum': 1
  39493. },
  39494. 'geometry': {
  39495. 'type': 'Polygon',
  39496. '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'],
  39497. 'encodeOffsets': [[
  39498. 124213,
  39499. 32254
  39500. ]]
  39501. }
  39502. },
  39503. {
  39504. 'type': 'Feature',
  39505. 'id': '310113',
  39506. 'properties': {
  39507. 'name': '宝山区',
  39508. 'cp': [
  39509. 121.4346,
  39510. 31.4051
  39511. ],
  39512. 'childNum': 1
  39513. },
  39514. 'geometry': {
  39515. 'type': 'Polygon',
  39516. '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¢ˆ'],
  39517. 'encodeOffsets': [[
  39518. 124300,
  39519. 32302
  39520. ]]
  39521. }
  39522. },
  39523. {
  39524. 'type': 'Feature',
  39525. 'id': '310112',
  39526. 'properties': {
  39527. 'name': '闵行区',
  39528. 'cp': [
  39529. 121.4992,
  39530. 31.0838
  39531. ],
  39532. 'childNum': 1
  39533. },
  39534. 'geometry': {
  39535. 'type': 'Polygon',
  39536. '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'],
  39537. 'encodeOffsets': [[
  39538. 124165,
  39539. 32010
  39540. ]]
  39541. }
  39542. },
  39543. {
  39544. 'type': 'Feature',
  39545. 'id': '310110',
  39546. 'properties': {
  39547. 'name': '杨浦区',
  39548. 'cp': [
  39549. 121.528,
  39550. 31.2966
  39551. ],
  39552. 'childNum': 1
  39553. },
  39554. 'geometry': {
  39555. 'type': 'Polygon',
  39556. 'coordinates': ['@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R'],
  39557. 'encodeOffsets': [[
  39558. 124402,
  39559. 32064
  39560. ]]
  39561. }
  39562. },
  39563. {
  39564. 'type': 'Feature',
  39565. 'id': '310107',
  39566. 'properties': {
  39567. 'name': '普陀区',
  39568. 'cp': [
  39569. 121.3879,
  39570. 31.2602
  39571. ],
  39572. 'childNum': 1
  39573. },
  39574. 'geometry': {
  39575. 'type': 'Polygon',
  39576. 'coordinates': ['@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH'],
  39577. 'encodeOffsets': [[
  39578. 124248,
  39579. 32045
  39580. ]]
  39581. }
  39582. },
  39583. {
  39584. 'type': 'Feature',
  39585. 'id': '310104',
  39586. 'properties': {
  39587. 'name': '徐汇区',
  39588. 'cp': [
  39589. 121.4333,
  39590. 31.1607
  39591. ],
  39592. 'childNum': 1
  39593. },
  39594. 'geometry': {
  39595. 'type': 'Polygon',
  39596. 'coordinates': ['@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J'],
  39597. 'encodeOffsets': [[
  39598. 124327,
  39599. 31941
  39600. ]]
  39601. }
  39602. },
  39603. {
  39604. 'type': 'Feature',
  39605. 'id': '310105',
  39606. 'properties': {
  39607. 'name': '长宁区',
  39608. 'cp': [
  39609. 121.3852,
  39610. 31.2115
  39611. ],
  39612. 'childNum': 1
  39613. },
  39614. 'geometry': {
  39615. 'type': 'Polygon',
  39616. 'coordinates': ['@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB'],
  39617. 'encodeOffsets': [[
  39618. 124250,
  39619. 31987
  39620. ]]
  39621. }
  39622. },
  39623. {
  39624. 'type': 'Feature',
  39625. 'id': '310108',
  39626. 'properties': {
  39627. 'name': '闸北区',
  39628. 'cp': [
  39629. 121.4511,
  39630. 31.2794
  39631. ],
  39632. 'childNum': 1
  39633. },
  39634. 'geometry': {
  39635. 'type': 'Polygon',
  39636. 'coordinates': ['@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI'],
  39637. 'encodeOffsets': [[
  39638. 124385,
  39639. 32068
  39640. ]]
  39641. }
  39642. },
  39643. {
  39644. 'type': 'Feature',
  39645. 'id': '310109',
  39646. 'properties': {
  39647. 'name': '虹口区',
  39648. 'cp': [
  39649. 121.4882,
  39650. 31.2788
  39651. ],
  39652. 'childNum': 1
  39653. },
  39654. 'geometry': {
  39655. 'type': 'Polygon',
  39656. 'coordinates': ['@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT'],
  39657. 'encodeOffsets': [[
  39658. 124385,
  39659. 32068
  39660. ]]
  39661. }
  39662. },
  39663. {
  39664. 'type': 'Feature',
  39665. 'id': '310101',
  39666. 'properties': {
  39667. 'name': '黄浦区',
  39668. 'cp': [
  39669. 121.4868,
  39670. 31.219
  39671. ],
  39672. 'childNum': 1
  39673. },
  39674. 'geometry': {
  39675. 'type': 'Polygon',
  39676. 'coordinates': ['@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV'],
  39677. 'encodeOffsets': [[
  39678. 124379,
  39679. 31992
  39680. ]]
  39681. }
  39682. },
  39683. {
  39684. 'type': 'Feature',
  39685. 'id': '310103',
  39686. 'properties': {
  39687. 'name': '卢湾区',
  39688. 'cp': [
  39689. 121.4758,
  39690. 31.2074
  39691. ],
  39692. 'childNum': 1
  39693. },
  39694. 'geometry': {
  39695. 'type': 'Polygon',
  39696. 'coordinates': ['@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB'],
  39697. 'encodeOffsets': [[
  39698. 124385,
  39699. 31974
  39700. ]]
  39701. }
  39702. },
  39703. {
  39704. 'type': 'Feature',
  39705. 'id': '310106',
  39706. 'properties': {
  39707. 'name': '静安区',
  39708. 'cp': [
  39709. 121.4484,
  39710. 31.2286
  39711. ],
  39712. 'childNum': 1
  39713. },
  39714. 'geometry': {
  39715. 'type': 'Polygon',
  39716. 'coordinates': ['@@DLLB\\NPGLFHUDMYABEeKEVMAAJ'],
  39717. 'encodeOffsets': [[
  39718. 124343,
  39719. 31979
  39720. ]]
  39721. }
  39722. }
  39723. ],
  39724. 'UTF8Encoding': true
  39725. };
  39726. });define('echarts/util/mapData/geoJson/shan_dong_geo', [], function () {
  39727. return {
  39728. 'type': 'FeatureCollection',
  39729. 'features': [
  39730. {
  39731. 'type': 'Feature',
  39732. 'id': '3706',
  39733. 'properties': {
  39734. 'name': '烟台市',
  39735. 'cp': [
  39736. 120.7397,
  39737. 37.5128
  39738. ],
  39739. 'childNum': 9
  39740. },
  39741. 'geometry': {
  39742. 'type': 'Polygon',
  39743. '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ô'],
  39744. 'encodeOffsets': [[
  39745. 122446,
  39746. 38042
  39747. ]]
  39748. }
  39749. },
  39750. {
  39751. 'type': 'Feature',
  39752. 'id': '3713',
  39753. 'properties': {
  39754. 'name': '临沂市',
  39755. 'cp': [
  39756. 118.3118,
  39757. 35.2936
  39758. ],
  39759. 'childNum': 10
  39760. },
  39761. 'geometry': {
  39762. 'type': 'Polygon',
  39763. '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'],
  39764. 'encodeOffsets': [[
  39765. 120241,
  39766. 36119
  39767. ]]
  39768. }
  39769. },
  39770. {
  39771. 'type': 'Feature',
  39772. 'id': '3707',
  39773. 'properties': {
  39774. 'name': '潍坊市',
  39775. 'cp': [
  39776. 119.0918,
  39777. 36.524
  39778. ],
  39779. 'childNum': 9
  39780. },
  39781. 'geometry': {
  39782. 'type': 'Polygon',
  39783. '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'],
  39784. 'encodeOffsets': [[
  39785. 121332,
  39786. 37840
  39787. ]]
  39788. }
  39789. },
  39790. {
  39791. 'type': 'Feature',
  39792. 'id': '3702',
  39793. 'properties': {
  39794. 'name': '青岛市',
  39795. 'cp': [
  39796. 120.4651,
  39797. 36.3373
  39798. ],
  39799. 'childNum': 6
  39800. },
  39801. 'geometry': {
  39802. 'type': 'Polygon',
  39803. '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'],
  39804. 'encodeOffsets': [[
  39805. 122389,
  39806. 36580
  39807. ]]
  39808. }
  39809. },
  39810. {
  39811. 'type': 'Feature',
  39812. 'id': '3717',
  39813. 'properties': {
  39814. 'name': '菏泽市',
  39815. 'cp': [
  39816. 115.6201,
  39817. 35.2057
  39818. ],
  39819. 'childNum': 9
  39820. },
  39821. 'geometry': {
  39822. 'type': 'Polygon',
  39823. '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'],
  39824. 'encodeOffsets': [[
  39825. 118654,
  39826. 36726
  39827. ]]
  39828. }
  39829. },
  39830. {
  39831. 'type': 'Feature',
  39832. 'id': '3708',
  39833. 'properties': {
  39834. 'name': '济宁市',
  39835. 'cp': [
  39836. 116.8286,
  39837. 35.3375
  39838. ],
  39839. 'childNum': 11
  39840. },
  39841. 'geometry': {
  39842. 'type': 'Polygon',
  39843. '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'],
  39844. 'encodeOffsets': [[
  39845. 118834,
  39846. 36844
  39847. ]]
  39848. }
  39849. },
  39850. {
  39851. 'type': 'Feature',
  39852. 'id': '3714',
  39853. 'properties': {
  39854. 'name': '德州市',
  39855. 'cp': [
  39856. 116.6858,
  39857. 37.2107
  39858. ],
  39859. 'childNum': 11
  39860. },
  39861. 'geometry': {
  39862. 'type': 'Polygon',
  39863. '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ó@'],
  39864. 'encodeOffsets': [[
  39865. 118542,
  39866. 37801
  39867. ]]
  39868. }
  39869. },
  39870. {
  39871. 'type': 'Feature',
  39872. 'id': '3716',
  39873. 'properties': {
  39874. 'name': '滨州市',
  39875. 'cp': [
  39876. 117.8174,
  39877. 37.4963
  39878. ],
  39879. 'childNum': 7
  39880. },
  39881. 'geometry': {
  39882. 'type': 'Polygon',
  39883. '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'],
  39884. 'encodeOffsets': [[
  39885. 120083,
  39886. 38442
  39887. ]]
  39888. }
  39889. },
  39890. {
  39891. 'type': 'Feature',
  39892. 'id': '3715',
  39893. 'properties': {
  39894. 'name': '聊城市',
  39895. 'cp': [
  39896. 115.9167,
  39897. 36.4032
  39898. ],
  39899. 'childNum': 8
  39900. },
  39901. 'geometry': {
  39902. 'type': 'Polygon',
  39903. '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²„'],
  39904. 'encodeOffsets': [[
  39905. 118542,
  39906. 37801
  39907. ]]
  39908. }
  39909. },
  39910. {
  39911. 'type': 'Feature',
  39912. 'id': '3705',
  39913. 'properties': {
  39914. 'name': '东营市',
  39915. 'cp': [
  39916. 118.7073,
  39917. 37.5513
  39918. ],
  39919. 'childNum': 5
  39920. },
  39921. 'geometry': {
  39922. 'type': 'Polygon',
  39923. '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'],
  39924. 'encodeOffsets': [[
  39925. 121005,
  39926. 39066
  39927. ]]
  39928. }
  39929. },
  39930. {
  39931. 'type': 'Feature',
  39932. 'id': '3701',
  39933. 'properties': {
  39934. 'name': '济南市',
  39935. 'cp': [
  39936. 117.1582,
  39937. 36.8701
  39938. ],
  39939. 'childNum': 5
  39940. },
  39941. 'geometry': {
  39942. 'type': 'Polygon',
  39943. '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™¦'],
  39944. 'encodeOffsets': [[
  39945. 119014,
  39946. 37041
  39947. ]]
  39948. }
  39949. },
  39950. {
  39951. 'type': 'Feature',
  39952. 'id': '3709',
  39953. 'properties': {
  39954. 'name': '泰安市',
  39955. 'cp': [
  39956. 117.0264,
  39957. 36.0516
  39958. ],
  39959. 'childNum': 5
  39960. },
  39961. 'geometry': {
  39962. 'type': 'Polygon',
  39963. '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'],
  39964. 'encodeOffsets': [[
  39965. 118834,
  39966. 36844
  39967. ]]
  39968. }
  39969. },
  39970. {
  39971. 'type': 'Feature',
  39972. 'id': '3710',
  39973. 'properties': {
  39974. 'name': '威海市',
  39975. 'cp': [
  39976. 121.9482,
  39977. 37.1393
  39978. ],
  39979. 'childNum': 4
  39980. },
  39981. 'geometry': {
  39982. 'type': 'Polygon',
  39983. '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„‚'],
  39984. 'encodeOffsets': [[
  39985. 124842,
  39986. 38312
  39987. ]]
  39988. }
  39989. },
  39990. {
  39991. 'type': 'Feature',
  39992. 'id': '3711',
  39993. 'properties': {
  39994. 'name': '日照市',
  39995. 'cp': [
  39996. 119.2786,
  39997. 35.5023
  39998. ],
  39999. 'childNum': 3
  40000. },
  40001. 'geometry': {
  40002. 'type': 'Polygon',
  40003. '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'],
  40004. 'encodeOffsets': [[
  40005. 121883,
  40006. 36895
  40007. ]]
  40008. }
  40009. },
  40010. {
  40011. 'type': 'Feature',
  40012. 'id': '3703',
  40013. 'properties': {
  40014. 'name': '淄博市',
  40015. 'cp': [
  40016. 118.0371,
  40017. 36.6064
  40018. ],
  40019. 'childNum': 4
  40020. },
  40021. 'geometry': {
  40022. 'type': 'Polygon',
  40023. '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'],
  40024. 'encodeOffsets': [[
  40025. 121129,
  40026. 37891
  40027. ]]
  40028. }
  40029. },
  40030. {
  40031. 'type': 'Feature',
  40032. 'id': '3704',
  40033. 'properties': {
  40034. 'name': '枣庄市',
  40035. 'cp': [
  40036. 117.323,
  40037. 34.8926
  40038. ],
  40039. 'childNum': 2
  40040. },
  40041. 'geometry': {
  40042. 'type': 'Polygon',
  40043. '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'],
  40044. 'encodeOffsets': [[
  40045. 120241,
  40046. 36119
  40047. ]]
  40048. }
  40049. },
  40050. {
  40051. 'type': 'Feature',
  40052. 'id': '3712',
  40053. 'properties': {
  40054. 'name': '莱芜市',
  40055. 'cp': [
  40056. 117.6526,
  40057. 36.2714
  40058. ],
  40059. 'childNum': 1
  40060. },
  40061. 'geometry': {
  40062. 'type': 'Polygon',
  40063. '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@'],
  40064. 'encodeOffsets': [[
  40065. 120173,
  40066. 37334
  40067. ]]
  40068. }
  40069. }
  40070. ],
  40071. 'UTF8Encoding': true
  40072. };
  40073. });define('echarts/util/mapData/geoJson/shan_xi_1_geo', [], function () {
  40074. return {
  40075. 'type': 'FeatureCollection',
  40076. 'features': [
  40077. {
  40078. 'type': 'Feature',
  40079. 'id': '6108',
  40080. 'properties': {
  40081. 'name': '榆林市',
  40082. 'cp': [
  40083. 109.8743,
  40084. 38.205
  40085. ],
  40086. 'childNum': 12
  40087. },
  40088. 'geometry': {
  40089. 'type': 'Polygon',
  40090. '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ƒ'],
  40091. 'encodeOffsets': [[
  40092. 113592,
  40093. 39645
  40094. ]]
  40095. }
  40096. },
  40097. {
  40098. 'type': 'Feature',
  40099. 'id': '6106',
  40100. 'properties': {
  40101. 'name': '延安市',
  40102. 'cp': [
  40103. 109.1052,
  40104. 36.4252
  40105. ],
  40106. 'childNum': 13
  40107. },
  40108. 'geometry': {
  40109. 'type': 'Polygon',
  40110. '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'],
  40111. 'encodeOffsets': [[
  40112. 113074,
  40113. 37862
  40114. ]]
  40115. }
  40116. },
  40117. {
  40118. 'type': 'Feature',
  40119. 'id': '6107',
  40120. 'properties': {
  40121. 'name': '汉中市',
  40122. 'cp': [
  40123. 106.886,
  40124. 33.0139
  40125. ],
  40126. 'childNum': 11
  40127. },
  40128. 'geometry': {
  40129. 'type': 'Polygon',
  40130. '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'],
  40131. 'encodeOffsets': [[
  40132. 109137,
  40133. 34392
  40134. ]]
  40135. }
  40136. },
  40137. {
  40138. 'type': 'Feature',
  40139. 'id': '6109',
  40140. 'properties': {
  40141. 'name': '安康市',
  40142. 'cp': [
  40143. 109.1162,
  40144. 32.7722
  40145. ],
  40146. 'childNum': 10
  40147. },
  40148. 'geometry': {
  40149. 'type': 'Polygon',
  40150. '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@è'],
  40151. 'encodeOffsets': [[
  40152. 110644,
  40153. 34521
  40154. ]]
  40155. }
  40156. },
  40157. {
  40158. 'type': 'Feature',
  40159. 'id': '6110',
  40160. 'properties': {
  40161. 'name': '商洛市',
  40162. 'cp': [
  40163. 109.8083,
  40164. 33.761
  40165. ],
  40166. 'childNum': 7
  40167. },
  40168. 'geometry': {
  40169. 'type': 'Polygon',
  40170. '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Ž'],
  40171. 'encodeOffsets': [[
  40172. 111454,
  40173. 34628
  40174. ]]
  40175. }
  40176. },
  40177. {
  40178. 'type': 'Feature',
  40179. 'id': '6103',
  40180. 'properties': {
  40181. 'name': '宝鸡市',
  40182. 'cp': [
  40183. 107.1826,
  40184. 34.3433
  40185. ],
  40186. 'childNum': 10
  40187. },
  40188. 'geometry': {
  40189. 'type': 'Polygon',
  40190. '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'],
  40191. 'encodeOffsets': [[
  40192. 110408,
  40193. 35815
  40194. ]]
  40195. }
  40196. },
  40197. {
  40198. 'type': 'Feature',
  40199. 'id': '6105',
  40200. 'properties': {
  40201. 'name': '渭南市',
  40202. 'cp': [
  40203. 109.7864,
  40204. 35.0299
  40205. ],
  40206. 'childNum': 11
  40207. },
  40208. 'geometry': {
  40209. 'type': 'Polygon',
  40210. '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¼Ç°'],
  40211. 'encodeOffsets': [[
  40212. 111589,
  40213. 35657
  40214. ]]
  40215. }
  40216. },
  40217. {
  40218. 'type': 'Feature',
  40219. 'id': '6104',
  40220. 'properties': {
  40221. 'name': '咸阳市',
  40222. 'cp': [
  40223. 108.4131,
  40224. 34.8706
  40225. ],
  40226. 'childNum': 14
  40227. },
  40228. 'geometry': {
  40229. 'type': 'Polygon',
  40230. '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š'],
  40231. 'encodeOffsets': [[
  40232. 111229,
  40233. 36394
  40234. ]]
  40235. }
  40236. },
  40237. {
  40238. 'type': 'Feature',
  40239. 'id': '6101',
  40240. 'properties': {
  40241. 'name': '西安市',
  40242. 'cp': [
  40243. 109.1162,
  40244. 34.2004
  40245. ],
  40246. 'childNum': 5
  40247. },
  40248. 'geometry': {
  40249. 'type': 'Polygon',
  40250. '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'],
  40251. 'encodeOffsets': [[
  40252. 110206,
  40253. 34532
  40254. ]]
  40255. }
  40256. },
  40257. {
  40258. 'type': 'Feature',
  40259. 'id': '6102',
  40260. 'properties': {
  40261. 'name': '铜川市',
  40262. 'cp': [
  40263. 109.0393,
  40264. 35.1947
  40265. ],
  40266. 'childNum': 2
  40267. },
  40268. 'geometry': {
  40269. 'type': 'Polygon',
  40270. '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'],
  40271. 'encodeOffsets': [[
  40272. 111477,
  40273. 36192
  40274. ]]
  40275. }
  40276. }
  40277. ],
  40278. 'UTF8Encoding': true
  40279. };
  40280. });define('echarts/util/mapData/geoJson/shan_xi_2_geo', [], function () {
  40281. return {
  40282. 'type': 'FeatureCollection',
  40283. 'features': [
  40284. {
  40285. 'type': 'Feature',
  40286. 'id': '1409',
  40287. 'properties': {
  40288. 'name': '忻州市',
  40289. 'cp': [
  40290. 112.4561,
  40291. 38.8971
  40292. ],
  40293. 'childNum': 14
  40294. },
  40295. 'geometry': {
  40296. 'type': 'Polygon',
  40297. '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'],
  40298. 'encodeOffsets': [[
  40299. 113614,
  40300. 39657
  40301. ]]
  40302. }
  40303. },
  40304. {
  40305. 'type': 'Feature',
  40306. 'id': '1411',
  40307. 'properties': {
  40308. 'name': '吕梁市',
  40309. 'cp': [
  40310. 111.3574,
  40311. 37.7325
  40312. ],
  40313. 'childNum': 13
  40314. },
  40315. 'geometry': {
  40316. 'type': 'Polygon',
  40317. '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'],
  40318. 'encodeOffsets': [[
  40319. 113614,
  40320. 39657
  40321. ]]
  40322. }
  40323. },
  40324. {
  40325. 'type': 'Feature',
  40326. 'id': '1410',
  40327. 'properties': {
  40328. 'name': '临汾市',
  40329. 'cp': [
  40330. 111.4783,
  40331. 36.1615
  40332. ],
  40333. 'childNum': 17
  40334. },
  40335. 'geometry': {
  40336. 'type': 'Polygon',
  40337. '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'],
  40338. 'encodeOffsets': [[
  40339. 113063,
  40340. 37784
  40341. ]]
  40342. }
  40343. },
  40344. {
  40345. 'type': 'Feature',
  40346. 'id': '1407',
  40347. 'properties': {
  40348. 'name': '晋中市',
  40349. 'cp': [
  40350. 112.7747,
  40351. 37.37
  40352. ],
  40353. 'childNum': 11
  40354. },
  40355. 'geometry': {
  40356. 'type': 'Polygon',
  40357. '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@'],
  40358. 'encodeOffsets': [[
  40359. 114087,
  40360. 37682
  40361. ]]
  40362. }
  40363. },
  40364. {
  40365. 'type': 'Feature',
  40366. 'id': '1408',
  40367. 'properties': {
  40368. 'name': '运城市',
  40369. 'cp': [
  40370. 111.1487,
  40371. 35.2002
  40372. ],
  40373. 'childNum': 13
  40374. },
  40375. 'geometry': {
  40376. 'type': 'Polygon',
  40377. '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@„'],
  40378. 'encodeOffsets': [[
  40379. 113232,
  40380. 36597
  40381. ]]
  40382. }
  40383. },
  40384. {
  40385. 'type': 'Feature',
  40386. 'id': '1402',
  40387. 'properties': {
  40388. 'name': '大同市',
  40389. 'cp': [
  40390. 113.7854,
  40391. 39.8035
  40392. ],
  40393. 'childNum': 8
  40394. },
  40395. 'geometry': {
  40396. 'type': 'Polygon',
  40397. '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'],
  40398. 'encodeOffsets': [[
  40399. 115335,
  40400. 41209
  40401. ]]
  40402. }
  40403. },
  40404. {
  40405. 'type': 'Feature',
  40406. 'id': '1404',
  40407. 'properties': {
  40408. 'name': '长治市',
  40409. 'cp': [
  40410. 112.8625,
  40411. 36.4746
  40412. ],
  40413. 'childNum': 12
  40414. },
  40415. 'geometry': {
  40416. 'type': 'Polygon',
  40417. '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'],
  40418. 'encodeOffsets': [[
  40419. 116269,
  40420. 37637
  40421. ]]
  40422. }
  40423. },
  40424. {
  40425. 'type': 'Feature',
  40426. 'id': '1406',
  40427. 'properties': {
  40428. 'name': '朔州市',
  40429. 'cp': [
  40430. 113.0713,
  40431. 39.6991
  40432. ],
  40433. 'childNum': 5
  40434. },
  40435. 'geometry': {
  40436. 'type': 'Polygon',
  40437. '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‚'],
  40438. 'encodeOffsets': [[
  40439. 114615,
  40440. 40562
  40441. ]]
  40442. }
  40443. },
  40444. {
  40445. 'type': 'Feature',
  40446. 'id': '1405',
  40447. 'properties': {
  40448. 'name': '晋城市',
  40449. 'cp': [
  40450. 112.7856,
  40451. 35.6342
  40452. ],
  40453. 'childNum': 6
  40454. },
  40455. 'geometry': {
  40456. 'type': 'Polygon',
  40457. '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°'],
  40458. 'encodeOffsets': [[
  40459. 115223,
  40460. 36895
  40461. ]]
  40462. }
  40463. },
  40464. {
  40465. 'type': 'Feature',
  40466. 'id': '1401',
  40467. 'properties': {
  40468. 'name': '太原市',
  40469. 'cp': [
  40470. 112.3352,
  40471. 37.9413
  40472. ],
  40473. 'childNum': 5
  40474. },
  40475. 'geometry': {
  40476. 'type': 'Polygon',
  40477. '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š@°'],
  40478. 'encodeOffsets': [[
  40479. 114503,
  40480. 39134
  40481. ]]
  40482. }
  40483. },
  40484. {
  40485. 'type': 'Feature',
  40486. 'id': '1403',
  40487. 'properties': {
  40488. 'name': '阳泉市',
  40489. 'cp': [
  40490. 113.4778,
  40491. 38.0951
  40492. ],
  40493. 'childNum': 3
  40494. },
  40495. 'geometry': {
  40496. 'type': 'Polygon',
  40497. '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'],
  40498. 'encodeOffsets': [[
  40499. 115864,
  40500. 39336
  40501. ]]
  40502. }
  40503. }
  40504. ],
  40505. 'UTF8Encoding': true
  40506. };
  40507. });define('echarts/util/mapData/geoJson/si_chuan_geo', [], function () {
  40508. return {
  40509. 'type': 'FeatureCollection',
  40510. 'features': [
  40511. {
  40512. 'type': 'Feature',
  40513. 'id': '5133',
  40514. 'properties': {
  40515. 'name': '甘孜藏族自治州',
  40516. 'cp': [
  40517. 99.9207,
  40518. 31.0803
  40519. ],
  40520. 'childNum': 18
  40521. },
  40522. 'geometry': {
  40523. 'type': 'Polygon',
  40524. '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‚霣Ġ™'],
  40525. 'encodeOffsets': [[
  40526. 103073,
  40527. 33295
  40528. ]]
  40529. }
  40530. },
  40531. {
  40532. 'type': 'Feature',
  40533. 'id': '5132',
  40534. 'properties': {
  40535. 'name': '阿坝藏族羌族自治州',
  40536. 'cp': [
  40537. 102.4805,
  40538. 32.4536
  40539. ],
  40540. 'childNum': 13
  40541. },
  40542. 'geometry': {
  40543. 'type': 'Polygon',
  40544. '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'],
  40545. 'encodeOffsets': [[
  40546. 103073,
  40547. 33295
  40548. ]]
  40549. }
  40550. },
  40551. {
  40552. 'type': 'Feature',
  40553. 'id': '5134',
  40554. 'properties': {
  40555. 'name': '凉山彝族自治州',
  40556. 'cp': [
  40557. 101.9641,
  40558. 27.6746
  40559. ],
  40560. 'childNum': 17
  40561. },
  40562. 'geometry': {
  40563. 'type': 'Polygon',
  40564. '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œ'],
  40565. 'encodeOffsets': [[
  40566. 102466,
  40567. 28756
  40568. ]]
  40569. }
  40570. },
  40571. {
  40572. 'type': 'Feature',
  40573. 'id': '5107',
  40574. 'properties': {
  40575. 'name': '绵阳市',
  40576. 'cp': [
  40577. 104.7327,
  40578. 31.8713
  40579. ],
  40580. 'childNum': 8
  40581. },
  40582. 'geometry': {
  40583. 'type': 'Polygon',
  40584. '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'],
  40585. 'encodeOffsets': [[
  40586. 106448,
  40587. 33694
  40588. ]]
  40589. }
  40590. },
  40591. {
  40592. 'type': 'Feature',
  40593. 'id': '5117',
  40594. 'properties': {
  40595. 'name': '达州市',
  40596. 'cp': [
  40597. 107.6111,
  40598. 31.333
  40599. ],
  40600. 'childNum': 7
  40601. },
  40602. 'geometry': {
  40603. 'type': 'Polygon',
  40604. '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°'],
  40605. 'encodeOffsets': [[
  40606. 109519,
  40607. 31917
  40608. ]]
  40609. }
  40610. },
  40611. {
  40612. 'type': 'Feature',
  40613. 'id': '5108',
  40614. 'properties': {
  40615. 'name': '广元市',
  40616. 'cp': [
  40617. 105.6885,
  40618. 32.2284
  40619. ],
  40620. 'childNum': 5
  40621. },
  40622. 'geometry': {
  40623. 'type': 'Polygon',
  40624. '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¼'],
  40625. 'encodeOffsets': [[
  40626. 107146,
  40627. 33452
  40628. ]]
  40629. }
  40630. },
  40631. {
  40632. 'type': 'Feature',
  40633. 'id': '5118',
  40634. 'properties': {
  40635. 'name': '雅安市',
  40636. 'cp': [
  40637. 102.6672,
  40638. 29.8938
  40639. ],
  40640. 'childNum': 8
  40641. },
  40642. 'geometry': {
  40643. 'type': 'Polygon',
  40644. '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@Ò'],
  40645. 'encodeOffsets': [[
  40646. 104727,
  40647. 30797
  40648. ]]
  40649. }
  40650. },
  40651. {
  40652. 'type': 'Feature',
  40653. 'id': '5115',
  40654. 'properties': {
  40655. 'name': '宜宾市',
  40656. 'cp': [
  40657. 104.6558,
  40658. 28.548
  40659. ],
  40660. 'childNum': 10
  40661. },
  40662. 'geometry': {
  40663. 'type': 'Polygon',
  40664. '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'],
  40665. 'encodeOffsets': [[
  40666. 106099,
  40667. 29279
  40668. ]]
  40669. }
  40670. },
  40671. {
  40672. 'type': 'Feature',
  40673. 'id': '5111',
  40674. 'properties': {
  40675. 'name': '乐山市',
  40676. 'cp': [
  40677. 103.5791,
  40678. 29.1742
  40679. ],
  40680. 'childNum': 9
  40681. },
  40682. 'geometry': {
  40683. 'type': 'Polygon',
  40684. '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'],
  40685. 'encodeOffsets': [[
  40686. 105480,
  40687. 29993
  40688. ]]
  40689. }
  40690. },
  40691. {
  40692. 'type': 'Feature',
  40693. 'id': '5113',
  40694. 'properties': {
  40695. 'name': '南充市',
  40696. 'cp': [
  40697. 106.2048,
  40698. 31.1517
  40699. ],
  40700. 'childNum': 7
  40701. },
  40702. 'geometry': {
  40703. 'type': 'Polygon',
  40704. '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š'],
  40705. 'encodeOffsets': [[
  40706. 107989,
  40707. 32282
  40708. ]]
  40709. }
  40710. },
  40711. {
  40712. 'type': 'Feature',
  40713. 'id': '5119',
  40714. 'properties': {
  40715. 'name': '巴中市',
  40716. 'cp': [
  40717. 107.0618,
  40718. 31.9977
  40719. ],
  40720. 'childNum': 4
  40721. },
  40722. 'geometry': {
  40723. 'type': 'Polygon',
  40724. '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¤'],
  40725. 'encodeOffsets': [[
  40726. 108957,
  40727. 32569
  40728. ]]
  40729. }
  40730. },
  40731. {
  40732. 'type': 'Feature',
  40733. 'id': '5105',
  40734. 'properties': {
  40735. 'name': '泸州市',
  40736. 'cp': [
  40737. 105.4578,
  40738. 28.493
  40739. ],
  40740. 'childNum': 5
  40741. },
  40742. 'geometry': {
  40743. 'type': 'Polygon',
  40744. '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Ġ±²'],
  40745. 'encodeOffsets': [[
  40746. 107674,
  40747. 29639
  40748. ]]
  40749. }
  40750. },
  40751. {
  40752. 'type': 'Feature',
  40753. 'id': '5101',
  40754. 'properties': {
  40755. 'name': '成都市',
  40756. 'cp': [
  40757. 103.9526,
  40758. 30.7617
  40759. ],
  40760. 'childNum': 11
  40761. },
  40762. 'geometry': {
  40763. 'type': 'Polygon',
  40764. '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óÆ'],
  40765. 'encodeOffsets': [[
  40766. 105492,
  40767. 31534
  40768. ]]
  40769. }
  40770. },
  40771. {
  40772. 'type': 'Feature',
  40773. 'id': '5120',
  40774. 'properties': {
  40775. 'name': '资阳市',
  40776. 'cp': [
  40777. 104.9744,
  40778. 30.1575
  40779. ],
  40780. 'childNum': 4
  40781. },
  40782. 'geometry': {
  40783. 'type': 'Polygon',
  40784. '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'],
  40785. 'encodeOffsets': [[
  40786. 106695,
  40787. 31062
  40788. ]]
  40789. }
  40790. },
  40791. {
  40792. 'type': 'Feature',
  40793. 'id': '5104',
  40794. 'properties': {
  40795. 'name': '攀枝花市',
  40796. 'cp': [
  40797. 101.6895,
  40798. 26.7133
  40799. ],
  40800. 'childNum': 3
  40801. },
  40802. 'geometry': {
  40803. 'type': 'Polygon',
  40804. '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ó¦„Ŏ'],
  40805. 'encodeOffsets': [[
  40806. 103602,
  40807. 27816
  40808. ]]
  40809. }
  40810. },
  40811. {
  40812. 'type': 'Feature',
  40813. 'id': '5114',
  40814. 'properties': {
  40815. 'name': '眉山市',
  40816. 'cp': [
  40817. 103.8098,
  40818. 30.0146
  40819. ],
  40820. 'childNum': 6
  40821. },
  40822. 'geometry': {
  40823. 'type': 'Polygon',
  40824. '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°š'],
  40825. 'encodeOffsets': [[
  40826. 105683,
  40827. 30685
  40828. ]]
  40829. }
  40830. },
  40831. {
  40832. 'type': 'Feature',
  40833. 'id': '5116',
  40834. 'properties': {
  40835. 'name': '广安市',
  40836. 'cp': [
  40837. 106.6333,
  40838. 30.4376
  40839. ],
  40840. 'childNum': 5
  40841. },
  40842. 'geometry': {
  40843. 'type': 'Polygon',
  40844. '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'],
  40845. 'encodeOffsets': [[
  40846. 108518,
  40847. 31208
  40848. ]]
  40849. }
  40850. },
  40851. {
  40852. 'type': 'Feature',
  40853. 'id': '5106',
  40854. 'properties': {
  40855. 'name': '德阳市',
  40856. 'cp': [
  40857. 104.48,
  40858. 31.1133
  40859. ],
  40860. 'childNum': 6
  40861. },
  40862. 'geometry': {
  40863. 'type': 'Polygon',
  40864. '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'],
  40865. 'encodeOffsets': [[
  40866. 106594,
  40867. 32457
  40868. ]]
  40869. }
  40870. },
  40871. {
  40872. 'type': 'Feature',
  40873. 'id': '5110',
  40874. 'properties': {
  40875. 'name': '内江市',
  40876. 'cp': [
  40877. 104.8535,
  40878. 29.6136
  40879. ],
  40880. 'childNum': 4
  40881. },
  40882. 'geometry': {
  40883. 'type': 'Polygon',
  40884. '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ÝÈ'],
  40885. 'encodeOffsets': [[
  40886. 106774,
  40887. 30342
  40888. ]]
  40889. }
  40890. },
  40891. {
  40892. 'type': 'Feature',
  40893. 'id': '5109',
  40894. 'properties': {
  40895. 'name': '遂宁市',
  40896. 'cp': [
  40897. 105.5347,
  40898. 30.6683
  40899. ],
  40900. 'childNum': 4
  40901. },
  40902. 'geometry': {
  40903. 'type': 'Polygon',
  40904. '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ô'],
  40905. 'encodeOffsets': [[
  40906. 107595,
  40907. 31270
  40908. ]]
  40909. }
  40910. },
  40911. {
  40912. 'type': 'Feature',
  40913. 'id': '5103',
  40914. 'properties': {
  40915. 'name': '自贡市',
  40916. 'cp': [
  40917. 104.6667,
  40918. 29.2786
  40919. ],
  40920. 'childNum': 3
  40921. },
  40922. 'geometry': {
  40923. 'type': 'Polygon',
  40924. '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@'],
  40925. 'encodeOffsets': [[
  40926. 106752,
  40927. 30347
  40928. ]]
  40929. }
  40930. }
  40931. ],
  40932. 'UTF8Encoding': true
  40933. };
  40934. });define('echarts/util/mapData/geoJson/tai_wan_geo', [], function () {
  40935. return {
  40936. 'type': 'FeatureCollection',
  40937. 'features': [{
  40938. 'type': 'Feature',
  40939. 'id': '7100',
  40940. 'properties': {
  40941. 'name': '台湾',
  40942. 'cp': [
  40943. 121.0295,
  40944. 23.6082
  40945. ],
  40946. 'childNum': 1
  40947. },
  40948. 'geometry': {
  40949. 'type': 'Polygon',
  40950. '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‹\\•'],
  40951. 'encodeOffsets': [[
  40952. 124853,
  40953. 25650
  40954. ]]
  40955. }
  40956. }],
  40957. 'UTF8Encoding': true
  40958. };
  40959. });define('echarts/util/mapData/geoJson/tian_jin_geo', [], function () {
  40960. return {
  40961. 'type': 'FeatureCollection',
  40962. 'features': [
  40963. {
  40964. 'type': 'Feature',
  40965. 'id': '120225',
  40966. 'properties': {
  40967. 'name': '蓟县',
  40968. 'cp': [
  40969. 117.4672,
  40970. 40.004
  40971. ],
  40972. 'childNum': 1
  40973. },
  40974. 'geometry': {
  40975. 'type': 'Polygon',
  40976. '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'],
  40977. 'encodeOffsets': [[
  40978. 120575,
  40979. 41009
  40980. ]]
  40981. }
  40982. },
  40983. {
  40984. 'type': 'Feature',
  40985. 'id': '120114',
  40986. 'properties': {
  40987. 'name': '武清区',
  40988. 'cp': [
  40989. 117.0621,
  40990. 39.4121
  40991. ],
  40992. 'childNum': 1
  40993. },
  40994. 'geometry': {
  40995. 'type': 'Polygon',
  40996. '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'],
  40997. 'encodeOffsets': [[
  40998. 119959,
  40999. 40574
  41000. ]]
  41001. }
  41002. },
  41003. {
  41004. 'type': 'Feature',
  41005. 'id': '120115',
  41006. 'properties': {
  41007. 'name': '宝坻区',
  41008. 'cp': [
  41009. 117.4274,
  41010. 39.5913
  41011. ],
  41012. 'childNum': 1
  41013. },
  41014. 'geometry': {
  41015. 'type': 'Polygon',
  41016. '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'],
  41017. 'encodeOffsets': [[
  41018. 119959,
  41019. 40574
  41020. ]]
  41021. }
  41022. },
  41023. {
  41024. 'type': 'Feature',
  41025. 'id': '120223',
  41026. 'properties': {
  41027. 'name': '静海县',
  41028. 'cp': [
  41029. 116.9824,
  41030. 38.8312
  41031. ],
  41032. 'childNum': 1
  41033. },
  41034. 'geometry': {
  41035. 'type': 'Polygon',
  41036. '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@'],
  41037. 'encodeOffsets': [[
  41038. 119688,
  41039. 40010
  41040. ]]
  41041. }
  41042. },
  41043. {
  41044. 'type': 'Feature',
  41045. 'id': '120221',
  41046. 'properties': {
  41047. 'name': '宁河县',
  41048. 'cp': [
  41049. 117.6801,
  41050. 39.3853
  41051. ],
  41052. 'childNum': 1
  41053. },
  41054. 'geometry': {
  41055. 'type': 'Polygon',
  41056. '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'],
  41057. 'encodeOffsets': [[
  41058. 120145,
  41059. 40295
  41060. ]]
  41061. }
  41062. },
  41063. {
  41064. 'type': 'Feature',
  41065. 'id': '120109',
  41066. 'properties': {
  41067. 'name': '大港区',
  41068. 'cp': [
  41069. 117.3875,
  41070. 38.757
  41071. ],
  41072. 'childNum': 1
  41073. },
  41074. 'geometry': {
  41075. 'type': 'Polygon',
  41076. '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'],
  41077. 'encodeOffsets': [[
  41078. 120065,
  41079. 39771
  41080. ]]
  41081. }
  41082. },
  41083. {
  41084. 'type': 'Feature',
  41085. 'id': '120107',
  41086. 'properties': {
  41087. 'name': '塘沽区',
  41088. 'cp': [
  41089. 117.6801,
  41090. 38.9987
  41091. ],
  41092. 'childNum': 1
  41093. },
  41094. 'geometry': {
  41095. 'type': 'Polygon',
  41096. '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`'],
  41097. 'encodeOffsets': [[
  41098. 120391,
  41099. 40118
  41100. ]]
  41101. }
  41102. },
  41103. {
  41104. 'type': 'Feature',
  41105. 'id': '120111',
  41106. 'properties': {
  41107. 'name': '西青区',
  41108. 'cp': [
  41109. 117.1829,
  41110. 39.0022
  41111. ],
  41112. 'childNum': 1
  41113. },
  41114. 'geometry': {
  41115. 'type': 'Polygon',
  41116. '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'],
  41117. 'encodeOffsets': [[
  41118. 119688,
  41119. 40010
  41120. ]]
  41121. }
  41122. },
  41123. {
  41124. 'type': 'Feature',
  41125. 'id': '120113',
  41126. 'properties': {
  41127. 'name': '北辰区',
  41128. 'cp': [
  41129. 117.1761,
  41130. 39.2548
  41131. ],
  41132. 'childNum': 1
  41133. },
  41134. 'geometry': {
  41135. 'type': 'Polygon',
  41136. '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'],
  41137. 'encodeOffsets': [[
  41138. 120139,
  41139. 40273
  41140. ]]
  41141. }
  41142. },
  41143. {
  41144. 'type': 'Feature',
  41145. 'id': '120110',
  41146. 'properties': {
  41147. 'name': '东丽区',
  41148. 'cp': [
  41149. 117.4013,
  41150. 39.1223
  41151. ],
  41152. 'childNum': 1
  41153. },
  41154. 'geometry': {
  41155. 'type': 'Polygon',
  41156. 'coordinates': ['@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^'],
  41157. 'encodeOffsets': [[
  41158. 120048,
  41159. 40134
  41160. ]]
  41161. }
  41162. },
  41163. {
  41164. 'type': 'Feature',
  41165. 'id': '120108',
  41166. 'properties': {
  41167. 'name': '汉沽区',
  41168. 'cp': [
  41169. 117.8888,
  41170. 39.2191
  41171. ],
  41172. 'childNum': 1
  41173. },
  41174. 'geometry': {
  41175. 'type': 'Polygon',
  41176. '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@'],
  41177. 'encodeOffsets': [[
  41178. 120859,
  41179. 40235
  41180. ]]
  41181. }
  41182. },
  41183. {
  41184. 'type': 'Feature',
  41185. 'id': '120112',
  41186. 'properties': {
  41187. 'name': '津南区',
  41188. 'cp': [
  41189. 117.3958,
  41190. 38.9603
  41191. ],
  41192. 'childNum': 1
  41193. },
  41194. 'geometry': {
  41195. 'type': 'Polygon',
  41196. 'coordinates': ['@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH'],
  41197. 'encodeOffsets': [[
  41198. 120045,
  41199. 39982
  41200. ]]
  41201. }
  41202. },
  41203. {
  41204. 'type': 'Feature',
  41205. 'id': '120103',
  41206. 'properties': {
  41207. 'name': '河西区',
  41208. 'cp': [
  41209. 117.2365,
  41210. 39.0804
  41211. ],
  41212. 'childNum': 1
  41213. },
  41214. 'geometry': {
  41215. 'type': 'Polygon',
  41216. 'coordinates': ['@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt'],
  41217. 'encodeOffsets': [[
  41218. 119992,
  41219. 40041
  41220. ]]
  41221. }
  41222. },
  41223. {
  41224. 'type': 'Feature',
  41225. 'id': '120102',
  41226. 'properties': {
  41227. 'name': '河东区',
  41228. 'cp': [
  41229. 117.2571,
  41230. 39.1209
  41231. ],
  41232. 'childNum': 1
  41233. },
  41234. 'geometry': {
  41235. 'type': 'Polygon',
  41236. 'coordinates': ['@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN'],
  41237. 'encodeOffsets': [[
  41238. 120063,
  41239. 40098
  41240. ]]
  41241. }
  41242. },
  41243. {
  41244. 'type': 'Feature',
  41245. 'id': '120104',
  41246. 'properties': {
  41247. 'name': '南开区',
  41248. 'cp': [
  41249. 117.1527,
  41250. 39.1065
  41251. ],
  41252. 'childNum': 1
  41253. },
  41254. 'geometry': {
  41255. 'type': 'Polygon',
  41256. 'coordinates': ['@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ'],
  41257. 'encodeOffsets': [[
  41258. 119940,
  41259. 40093
  41260. ]]
  41261. }
  41262. },
  41263. {
  41264. 'type': 'Feature',
  41265. 'id': '120105',
  41266. 'properties': {
  41267. 'name': '河北区',
  41268. 'cp': [
  41269. 117.2145,
  41270. 39.1615
  41271. ],
  41272. 'childNum': 1
  41273. },
  41274. 'geometry': {
  41275. 'type': 'Polygon',
  41276. 'coordinates': ['@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF'],
  41277. 'encodeOffsets': [[
  41278. 119980,
  41279. 40125
  41280. ]]
  41281. }
  41282. },
  41283. {
  41284. 'type': 'Feature',
  41285. 'id': '120106',
  41286. 'properties': {
  41287. 'name': '红桥区',
  41288. 'cp': [
  41289. 117.1596,
  41290. 39.1663
  41291. ],
  41292. 'childNum': 1
  41293. },
  41294. 'geometry': {
  41295. 'type': 'Polygon',
  41296. 'coordinates': ['@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^'],
  41297. 'encodeOffsets': [[
  41298. 119942,
  41299. 40112
  41300. ]]
  41301. }
  41302. },
  41303. {
  41304. 'type': 'Feature',
  41305. 'id': '120101',
  41306. 'properties': {
  41307. 'name': '和平区',
  41308. 'cp': [
  41309. 117.2008,
  41310. 39.1189
  41311. ],
  41312. 'childNum': 1
  41313. },
  41314. 'geometry': {
  41315. 'type': 'Polygon',
  41316. 'coordinates': ['@@D†T@FCHG\\FFOROMEgYc@'],
  41317. 'encodeOffsets': [[
  41318. 119992,
  41319. 40041
  41320. ]]
  41321. }
  41322. }
  41323. ],
  41324. 'UTF8Encoding': true
  41325. };
  41326. });define('echarts/util/mapData/geoJson/world_geo', [], function () {
  41327. return {
  41328. 'type': 'FeatureCollection',
  41329. 'offset': {
  41330. 'x': 170,
  41331. 'y': 90
  41332. },
  41333. 'features': [
  41334. {
  41335. 'type': 'Feature',
  41336. 'id': 'AFG',
  41337. 'properties': { 'name': 'Afghanistan' },
  41338. 'geometry': {
  41339. 'type': 'Polygon',
  41340. 'coordinates': ['@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ'],
  41341. 'encodeOffsets': [[
  41342. 62680,
  41343. 36506
  41344. ]]
  41345. }
  41346. },
  41347. {
  41348. 'type': 'Feature',
  41349. 'id': 'AGO',
  41350. 'properties': { 'name': 'Angola' },
  41351. 'geometry': {
  41352. 'type': 'MultiPolygon',
  41353. 'coordinates': [
  41354. ['@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ['],
  41355. ['@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ']
  41356. ],
  41357. 'encodeOffsets': [
  41358. [[
  41359. 16719,
  41360. -6018
  41361. ]],
  41362. [[
  41363. 12736,
  41364. -5820
  41365. ]]
  41366. ]
  41367. }
  41368. },
  41369. {
  41370. 'type': 'Feature',
  41371. 'id': 'ALB',
  41372. 'properties': { 'name': 'Albania' },
  41373. 'geometry': {
  41374. 'type': 'Polygon',
  41375. 'coordinates': ['@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂'],
  41376. 'encodeOffsets': [[
  41377. 21085,
  41378. 42860
  41379. ]]
  41380. }
  41381. },
  41382. {
  41383. 'type': 'Feature',
  41384. 'id': 'ARE',
  41385. 'properties': { 'name': 'United Arab Emirates' },
  41386. 'geometry': {
  41387. 'type': 'Polygon',
  41388. 'coordinates': ['@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț'],
  41389. 'encodeOffsets': [[
  41390. 52818,
  41391. 24828
  41392. ]]
  41393. }
  41394. },
  41395. {
  41396. 'type': 'Feature',
  41397. 'id': 'ARG',
  41398. 'properties': { 'name': 'Argentina' },
  41399. 'geometry': {
  41400. 'type': 'MultiPolygon',
  41401. 'coordinates': [
  41402. ['@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп'],
  41403. ['@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ']
  41404. ],
  41405. 'encodeOffsets': [
  41406. [[
  41407. -67072,
  41408. -56524
  41409. ]],
  41410. [[
  41411. -66524,
  41412. -22605
  41413. ]]
  41414. ]
  41415. }
  41416. },
  41417. {
  41418. 'type': 'Feature',
  41419. 'id': 'ARM',
  41420. 'properties': { 'name': 'Armenia' },
  41421. 'geometry': {
  41422. 'type': 'Polygon',
  41423. 'coordinates': ['@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒'],
  41424. 'encodeOffsets': [[
  41425. 44629,
  41426. 42079
  41427. ]]
  41428. }
  41429. },
  41430. {
  41431. 'type': 'Feature',
  41432. 'id': 'ATF',
  41433. 'properties': { 'name': 'French Southern and Antarctic Lands' },
  41434. 'geometry': {
  41435. 'type': 'Polygon',
  41436. 'coordinates': ['@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ'],
  41437. 'encodeOffsets': [[
  41438. 70590,
  41439. -49792
  41440. ]]
  41441. }
  41442. },
  41443. {
  41444. 'type': 'Feature',
  41445. 'id': 'AUS',
  41446. 'properties': { 'name': 'Australia' },
  41447. 'geometry': {
  41448. 'type': 'MultiPolygon',
  41449. 'coordinates': [
  41450. ['@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ'],
  41451. ['@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥']
  41452. ],
  41453. 'encodeOffsets': [
  41454. [[
  41455. 148888,
  41456. -41771
  41457. ]],
  41458. [[
  41459. 147008,
  41460. -14093
  41461. ]]
  41462. ]
  41463. }
  41464. },
  41465. {
  41466. 'type': 'Feature',
  41467. 'id': 'AUT',
  41468. 'properties': { 'name': 'Austria' },
  41469. 'geometry': {
  41470. 'type': 'Polygon',
  41471. 'coordinates': ['@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅'],
  41472. 'encodeOffsets': [[
  41473. 17388,
  41474. 49279
  41475. ]]
  41476. }
  41477. },
  41478. {
  41479. 'type': 'Feature',
  41480. 'id': 'AZE',
  41481. 'properties': { 'name': 'Azerbaijan' },
  41482. 'geometry': {
  41483. 'type': 'MultiPolygon',
  41484. 'coordinates': [
  41485. ['@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv'],
  41486. ['@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ']
  41487. ],
  41488. 'encodeOffsets': [
  41489. [[
  41490. 46083,
  41491. 40694
  41492. ]],
  41493. [[
  41494. 48511,
  41495. 42210
  41496. ]]
  41497. ]
  41498. }
  41499. },
  41500. {
  41501. 'type': 'Feature',
  41502. 'id': 'BDI',
  41503. 'properties': { 'name': 'Burundi' },
  41504. 'geometry': {
  41505. 'type': 'Polygon',
  41506. 'coordinates': ['@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ'],
  41507. 'encodeOffsets': [[
  41508. 30045,
  41509. -4607
  41510. ]]
  41511. }
  41512. },
  41513. {
  41514. 'type': 'Feature',
  41515. 'id': 'BEL',
  41516. 'properties': { 'name': 'Belgium' },
  41517. 'geometry': {
  41518. 'type': 'Polygon',
  41519. 'coordinates': ['@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ'],
  41520. 'encodeOffsets': [[
  41521. 3395,
  41522. 52579
  41523. ]]
  41524. }
  41525. },
  41526. {
  41527. 'type': 'Feature',
  41528. 'id': 'BEN',
  41529. 'properties': { 'name': 'Benin' },
  41530. 'geometry': {
  41531. 'type': 'Polygon',
  41532. 'coordinates': ['@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ'],
  41533. 'encodeOffsets': [[
  41534. 2757,
  41535. 6410
  41536. ]]
  41537. }
  41538. },
  41539. {
  41540. 'type': 'Feature',
  41541. 'id': 'BFA',
  41542. 'properties': { 'name': 'Burkina Faso' },
  41543. 'geometry': {
  41544. 'type': 'Polygon',
  41545. 'coordinates': ['@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم'],
  41546. 'encodeOffsets': [[
  41547. -2895,
  41548. 9874
  41549. ]]
  41550. }
  41551. },
  41552. {
  41553. 'type': 'Feature',
  41554. 'id': 'BGD',
  41555. 'properties': { 'name': 'Bangladesh' },
  41556. 'geometry': {
  41557. 'type': 'Polygon',
  41558. 'coordinates': ['@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯'],
  41559. 'encodeOffsets': [[
  41560. 94897,
  41561. 22571
  41562. ]]
  41563. }
  41564. },
  41565. {
  41566. 'type': 'Feature',
  41567. 'id': 'BGR',
  41568. 'properties': { 'name': 'Bulgaria' },
  41569. 'geometry': {
  41570. 'type': 'Polygon',
  41571. 'coordinates': ['@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ'],
  41572. 'encodeOffsets': [[
  41573. 23201,
  41574. 45297
  41575. ]]
  41576. }
  41577. },
  41578. {
  41579. 'type': 'Feature',
  41580. 'id': 'BHS',
  41581. 'properties': { 'name': 'The Bahamas' },
  41582. 'geometry': {
  41583. 'type': 'MultiPolygon',
  41584. 'coordinates': [
  41585. ['@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ'],
  41586. ['@@ࣷƅÏ̴Ђäֈ{~ɕ'],
  41587. ['@@ƟׯƷņ`ѮϓͪCĪڐϗ']
  41588. ],
  41589. 'encodeOffsets': [
  41590. [[
  41591. -79395,
  41592. 24330
  41593. ]],
  41594. [[
  41595. -79687,
  41596. 27218
  41597. ]],
  41598. [[
  41599. -78848,
  41600. 27229
  41601. ]]
  41602. ]
  41603. }
  41604. },
  41605. {
  41606. 'type': 'Feature',
  41607. 'id': 'BIH',
  41608. 'properties': { 'name': 'Bosnia and Herzegovina' },
  41609. 'geometry': {
  41610. 'type': 'Polygon',
  41611. 'coordinates': ['@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ'],
  41612. 'encodeOffsets': [[
  41613. 19462,
  41614. 45937
  41615. ]]
  41616. }
  41617. },
  41618. {
  41619. 'type': 'Feature',
  41620. 'id': 'BLR',
  41621. 'properties': { 'name': 'Belarus' },
  41622. 'geometry': {
  41623. 'type': 'Polygon',
  41624. 'coordinates': ['@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ'],
  41625. 'encodeOffsets': [[
  41626. 24048,
  41627. 55207
  41628. ]]
  41629. }
  41630. },
  41631. {
  41632. 'type': 'Feature',
  41633. 'id': 'BLZ',
  41634. 'properties': { 'name': 'Belize' },
  41635. 'geometry': {
  41636. 'type': 'Polygon',
  41637. 'coordinates': ['@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ'],
  41638. 'encodeOffsets': [[
  41639. -91282,
  41640. 18236
  41641. ]]
  41642. }
  41643. },
  41644. {
  41645. 'type': 'Feature',
  41646. 'id': 'BMU',
  41647. 'properties': { 'name': 'Bermuda' },
  41648. 'geometry': {
  41649. 'type': 'Polygon',
  41650. 'coordinates': ['@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC'],
  41651. 'encodeOffsets': [[
  41652. -66334,
  41653. 33083
  41654. ]]
  41655. }
  41656. },
  41657. {
  41658. 'type': 'Feature',
  41659. 'id': 'BOL',
  41660. 'properties': { 'name': 'Bolivia' },
  41661. 'geometry': {
  41662. 'type': 'Polygon',
  41663. 'coordinates': ['@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ'],
  41664. 'encodeOffsets': [[
  41665. -64354,
  41666. -22563
  41667. ]]
  41668. }
  41669. },
  41670. {
  41671. 'type': 'Feature',
  41672. 'id': 'BRA',
  41673. 'properties': { 'name': 'Brazil' },
  41674. 'geometry': {
  41675. 'type': 'Polygon',
  41676. 'coordinates': ['@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę'],
  41677. 'encodeOffsets': [[
  41678. -59008,
  41679. -30941
  41680. ]]
  41681. }
  41682. },
  41683. {
  41684. 'type': 'Feature',
  41685. 'id': 'BRN',
  41686. 'properties': { 'name': 'Brunei' },
  41687. 'geometry': {
  41688. 'type': 'Polygon',
  41689. 'coordinates': ['@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ'],
  41690. 'encodeOffsets': [[
  41691. 116945,
  41692. 4635
  41693. ]]
  41694. }
  41695. },
  41696. {
  41697. 'type': 'Feature',
  41698. 'id': 'BTN',
  41699. 'properties': { 'name': 'Bhutan' },
  41700. 'geometry': {
  41701. 'type': 'Polygon',
  41702. 'coordinates': ['@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ'],
  41703. 'encodeOffsets': [[
  41704. 93898,
  41705. 28439
  41706. ]]
  41707. }
  41708. },
  41709. {
  41710. 'type': 'Feature',
  41711. 'id': 'BWA',
  41712. 'properties': { 'name': 'Botswana' },
  41713. 'geometry': {
  41714. 'type': 'Polygon',
  41715. 'coordinates': ['@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ'],
  41716. 'encodeOffsets': [[
  41717. 26265,
  41718. -18980
  41719. ]]
  41720. }
  41721. },
  41722. {
  41723. 'type': 'Feature',
  41724. 'id': 'CAF',
  41725. 'properties': { 'name': 'Central African Republic' },
  41726. 'geometry': {
  41727. 'type': 'Polygon',
  41728. 'coordinates': ['@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜'],
  41729. 'encodeOffsets': [[
  41730. 15647,
  41731. 7601
  41732. ]]
  41733. }
  41734. },
  41735. {
  41736. 'type': 'Feature',
  41737. 'id': 'CAN',
  41738. 'properties': { 'name': 'Canada' },
  41739. 'geometry': {
  41740. 'type': 'MultiPolygon',
  41741. 'coordinates': [
  41742. ['@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С'],
  41743. ['@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ'],
  41744. ['@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ'],
  41745. ['@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ'],
  41746. ['@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ'],
  41747. ['@@͡ѳχîəʢ Î͖ʦΆkɈǣ'],
  41748. ['@@ঝҧץnǿɪزϲ଼SiǍ'],
  41749. ['@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å'],
  41750. ['@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ'],
  41751. ['@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍'],
  41752. ['@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ'],
  41753. ['@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›રƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj'],
  41754. ['@@݉ևಹך˸Ş૸’ٔȁ'],
  41755. ['@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң'],
  41756. ['@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի'],
  41757. ['@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР'],
  41758. ['@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ'],
  41759. ['@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν'],
  41760. ['@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ'],
  41761. ['@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ'],
  41762. ['@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ'],
  41763. ['@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ'],
  41764. ['@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ'],
  41765. ['@@ϣy༽Âɡɼၜ]מƻĵĩ'],
  41766. ['@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ'],
  41767. ['@@৽ǏඉBbŤࡴʦҌદǝ'],
  41768. ['@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣'],
  41769. ['@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ'],
  41770. ['@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև'],
  41771. ['@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ']
  41772. ],
  41773. 'encodeOffsets': [
  41774. [[
  41775. -65192,
  41776. 47668
  41777. ]],
  41778. [[
  41779. -63289,
  41780. 50284
  41781. ]],
  41782. [[
  41783. -126474,
  41784. 49675
  41785. ]],
  41786. [[
  41787. -57481,
  41788. 51904
  41789. ]],
  41790. [[
  41791. -135895,
  41792. 55337
  41793. ]],
  41794. [[
  41795. -81168,
  41796. 63651
  41797. ]],
  41798. [[
  41799. -83863,
  41800. 64216
  41801. ]],
  41802. [[
  41803. -87205,
  41804. 67234
  41805. ]],
  41806. [[
  41807. -77686,
  41808. 68761
  41809. ]],
  41810. [[
  41811. -97943,
  41812. 70767
  41813. ]],
  41814. [[
  41815. -92720,
  41816. 71166
  41817. ]],
  41818. [[
  41819. -116907,
  41820. 74877
  41821. ]],
  41822. [[
  41823. -107008,
  41824. 75183
  41825. ]],
  41826. [[
  41827. -78172,
  41828. 74858
  41829. ]],
  41830. [[
  41831. -88639,
  41832. 74914
  41833. ]],
  41834. [[
  41835. -102764,
  41836. 75617
  41837. ]],
  41838. [[
  41839. -95433,
  41840. 74519
  41841. ]],
  41842. [[
  41843. -123351,
  41844. 73097
  41845. ]],
  41846. [[
  41847. -95859,
  41848. 76780
  41849. ]],
  41850. [[
  41851. -100864,
  41852. 78562
  41853. ]],
  41854. [[
  41855. -110808,
  41856. 78031
  41857. ]],
  41858. [[
  41859. -96956,
  41860. 78949
  41861. ]],
  41862. [[
  41863. -118987,
  41864. 79509
  41865. ]],
  41866. [[
  41867. -96092,
  41868. 79381
  41869. ]],
  41870. [[
  41871. -112831,
  41872. 79562
  41873. ]],
  41874. [[
  41875. -112295,
  41876. 80489
  41877. ]],
  41878. [[
  41879. -98130,
  41880. 79931
  41881. ]],
  41882. [[
  41883. -102461,
  41884. 80205
  41885. ]],
  41886. [[
  41887. -89108,
  41888. 81572
  41889. ]],
  41890. [[
  41891. -70144,
  41892. 85101
  41893. ]]
  41894. ]
  41895. }
  41896. },
  41897. {
  41898. 'type': 'Feature',
  41899. 'id': 'CHE',
  41900. 'properties': { 'name': 'Switzerland' },
  41901. 'geometry': {
  41902. 'type': 'Polygon',
  41903. 'coordinates': ['@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ'],
  41904. 'encodeOffsets': [[
  41905. 9825,
  41906. 48666
  41907. ]]
  41908. }
  41909. },
  41910. {
  41911. 'type': 'Feature',
  41912. 'id': 'CHL',
  41913. 'properties': { 'name': 'Chile' },
  41914. 'geometry': {
  41915. 'type': 'MultiPolygon',
  41916. 'coordinates': [
  41917. ['@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı'],
  41918. ['@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह']
  41919. ],
  41920. 'encodeOffsets': [
  41921. [[
  41922. -70281,
  41923. -53899
  41924. ]],
  41925. [[
  41926. -69857,
  41927. -22010
  41928. ]]
  41929. ]
  41930. }
  41931. },
  41932. {
  41933. 'type': 'Feature',
  41934. 'id': 'CHN',
  41935. 'properties': { 'name': 'China' },
  41936. 'geometry': {
  41937. 'type': 'MultiPolygon',
  41938. 'coordinates': [
  41939. [
  41940. '@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ',
  41941. '@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ'
  41942. ],
  41943. ['@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ']
  41944. ],
  41945. 'encodeOffsets': [
  41946. [
  41947. [
  41948. 124701,
  41949. 24980
  41950. ],
  41951. [
  41952. 112988,
  41953. 19127
  41954. ]
  41955. ],
  41956. [[
  41957. 130722,
  41958. 50955
  41959. ]]
  41960. ]
  41961. }
  41962. },
  41963. {
  41964. 'type': 'Feature',
  41965. 'id': 'CIV',
  41966. 'properties': { 'name': 'Ivory Coast' },
  41967. 'geometry': {
  41968. 'type': 'Polygon',
  41969. 'coordinates': ['@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ'],
  41970. 'encodeOffsets': [[
  41971. -2924,
  41972. 5115
  41973. ]]
  41974. }
  41975. },
  41976. {
  41977. 'type': 'Feature',
  41978. 'id': 'CMR',
  41979. 'properties': { 'name': 'Cameroon' },
  41980. 'geometry': {
  41981. 'type': 'Polygon',
  41982. 'coordinates': ['@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗'],
  41983. 'encodeOffsets': [[
  41984. 13390,
  41985. 2322
  41986. ]]
  41987. }
  41988. },
  41989. {
  41990. 'type': 'Feature',
  41991. 'id': 'COD',
  41992. 'properties': { 'name': 'Democratic Republic of the Congo' },
  41993. 'geometry': {
  41994. 'type': 'Polygon',
  41995. 'coordinates': ['@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏'],
  41996. 'encodeOffsets': [[
  41997. 31574,
  41998. 3594
  41999. ]]
  42000. }
  42001. },
  42002. {
  42003. 'type': 'Feature',
  42004. 'id': 'COG',
  42005. 'properties': { 'name': 'Republic of the Congo' },
  42006. 'geometry': {
  42007. 'type': 'Polygon',
  42008. 'coordinates': ['@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ'],
  42009. 'encodeOffsets': [[
  42010. 13308,
  42011. -4895
  42012. ]]
  42013. }
  42014. },
  42015. {
  42016. 'type': 'Feature',
  42017. 'id': 'COL',
  42018. 'properties': { 'name': 'Colombia' },
  42019. 'geometry': {
  42020. 'type': 'Polygon',
  42021. 'coordinates': ['@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā'],
  42022. 'encodeOffsets': [[
  42023. -77182,
  42024. -155
  42025. ]]
  42026. }
  42027. },
  42028. {
  42029. 'type': 'Feature',
  42030. 'id': 'CRI',
  42031. 'properties': { 'name': 'Costa Rica' },
  42032. 'geometry': {
  42033. 'type': 'Polygon',
  42034. 'coordinates': ['@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ'],
  42035. 'encodeOffsets': [[
  42036. -84956,
  42037. 8423
  42038. ]]
  42039. }
  42040. },
  42041. {
  42042. 'type': 'Feature',
  42043. 'id': 'CUB',
  42044. 'properties': { 'name': 'Cuba' },
  42045. 'geometry': {
  42046. 'type': 'Polygon',
  42047. 'coordinates': ['@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ'],
  42048. 'encodeOffsets': [[
  42049. -84242,
  42050. 23746
  42051. ]]
  42052. }
  42053. },
  42054. {
  42055. 'type': 'Feature',
  42056. 'id': '-99',
  42057. 'properties': { 'name': 'Northern Cyprus' },
  42058. 'geometry': {
  42059. 'type': 'Polygon',
  42060. 'coordinates': ['@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬'],
  42061. 'encodeOffsets': [[
  42062. 33518,
  42063. 35984
  42064. ]]
  42065. }
  42066. },
  42067. {
  42068. 'type': 'Feature',
  42069. 'id': 'CYP',
  42070. 'properties': { 'name': 'Cyprus' },
  42071. 'geometry': {
  42072. 'type': 'Polygon',
  42073. 'coordinates': ['@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇'],
  42074. 'encodeOffsets': [[
  42075. 34789,
  42076. 35900
  42077. ]]
  42078. }
  42079. },
  42080. {
  42081. 'type': 'Feature',
  42082. 'id': 'CZE',
  42083. 'properties': { 'name': 'Czech Republic' },
  42084. 'geometry': {
  42085. 'type': 'Polygon',
  42086. 'coordinates': ['@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ'],
  42087. 'encodeOffsets': [[
  42088. 17368,
  42089. 49764
  42090. ]]
  42091. }
  42092. },
  42093. {
  42094. 'type': 'Feature',
  42095. 'id': 'DEU',
  42096. 'properties': { 'name': 'Germany' },
  42097. 'geometry': {
  42098. 'type': 'Polygon',
  42099. 'coordinates': ['@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ'],
  42100. 'encodeOffsets': [[
  42101. 10161,
  42102. 56303
  42103. ]]
  42104. }
  42105. },
  42106. {
  42107. 'type': 'Feature',
  42108. 'id': 'DJI',
  42109. 'properties': { 'name': 'Djibouti' },
  42110. 'geometry': {
  42111. 'type': 'Polygon',
  42112. 'coordinates': ['@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ'],
  42113. 'encodeOffsets': [[
  42114. 44116,
  42115. 13005
  42116. ]]
  42117. }
  42118. },
  42119. {
  42120. 'type': 'Feature',
  42121. 'id': 'DNK',
  42122. 'properties': { 'name': 'Denmark' },
  42123. 'geometry': {
  42124. 'type': 'MultiPolygon',
  42125. 'coordinates': [
  42126. ['@@ԋڹ࢟ӄŝΒ௼˨ˎу'],
  42127. ['@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ']
  42128. ],
  42129. 'encodeOffsets': [
  42130. [[
  42131. 12995,
  42132. 56945
  42133. ]],
  42134. [[
  42135. 11175,
  42136. 57814
  42137. ]]
  42138. ]
  42139. }
  42140. },
  42141. {
  42142. 'type': 'Feature',
  42143. 'id': 'DOM',
  42144. 'properties': { 'name': 'Dominican Republic' },
  42145. 'geometry': {
  42146. 'type': 'Polygon',
  42147. 'coordinates': ['@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ'],
  42148. 'encodeOffsets': [[
  42149. -73433,
  42150. 20188
  42151. ]]
  42152. }
  42153. },
  42154. {
  42155. 'type': 'Feature',
  42156. 'id': 'DZA',
  42157. 'properties': { 'name': 'Algeria' },
  42158. 'geometry': {
  42159. 'type': 'Polygon',
  42160. 'coordinates': ['@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ'],
  42161. 'encodeOffsets': [[
  42162. 12288,
  42163. 24035
  42164. ]]
  42165. }
  42166. },
  42167. {
  42168. 'type': 'Feature',
  42169. 'id': 'ECU',
  42170. 'properties': { 'name': 'Ecuador' },
  42171. 'geometry': {
  42172. 'type': 'Polygon',
  42173. 'coordinates': ['@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ'],
  42174. 'encodeOffsets': [[
  42175. -82229,
  42176. -3486
  42177. ]]
  42178. }
  42179. },
  42180. {
  42181. 'type': 'Feature',
  42182. 'id': 'EGY',
  42183. 'properties': { 'name': 'Egypt' },
  42184. 'geometry': {
  42185. 'type': 'Polygon',
  42186. 'coordinates': ['@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽'],
  42187. 'encodeOffsets': [[
  42188. 35761,
  42189. 30210
  42190. ]]
  42191. }
  42192. },
  42193. {
  42194. 'type': 'Feature',
  42195. 'id': 'ERI',
  42196. 'properties': { 'name': 'Eritrea' },
  42197. 'geometry': {
  42198. 'type': 'Polygon',
  42199. 'coordinates': ['@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò'],
  42200. 'encodeOffsets': [[
  42201. 43368,
  42202. 12844
  42203. ]]
  42204. }
  42205. },
  42206. {
  42207. 'type': 'Feature',
  42208. 'id': 'ESP',
  42209. 'properties': { 'name': 'Spain' },
  42210. 'geometry': {
  42211. 'type': 'Polygon',
  42212. 'coordinates': ['@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ'],
  42213. 'encodeOffsets': [[
  42214. -9251,
  42215. 42886
  42216. ]]
  42217. }
  42218. },
  42219. {
  42220. 'type': 'Feature',
  42221. 'id': 'EST',
  42222. 'properties': { 'name': 'Estonia' },
  42223. 'geometry': {
  42224. 'type': 'Polygon',
  42225. 'coordinates': ['@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ'],
  42226. 'encodeOffsets': [[
  42227. 24897,
  42228. 59181
  42229. ]]
  42230. }
  42231. },
  42232. {
  42233. 'type': 'Feature',
  42234. 'id': 'ETH',
  42235. 'properties': { 'name': 'Ethiopia' },
  42236. 'geometry': {
  42237. 'type': 'Polygon',
  42238. 'coordinates': ['@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ'],
  42239. 'encodeOffsets': [[
  42240. 38816,
  42241. 15319
  42242. ]]
  42243. }
  42244. },
  42245. {
  42246. 'type': 'Feature',
  42247. 'id': 'FIN',
  42248. 'properties': { 'name': 'Finland' },
  42249. 'geometry': {
  42250. 'type': 'Polygon',
  42251. 'coordinates': ['@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ'],
  42252. 'encodeOffsets': [[
  42253. 29279,
  42254. 70723
  42255. ]]
  42256. }
  42257. },
  42258. {
  42259. 'type': 'Feature',
  42260. 'id': 'FJI',
  42261. 'properties': { 'name': 'Fiji' },
  42262. 'geometry': {
  42263. 'type': 'MultiPolygon',
  42264. 'coordinates': [
  42265. ['@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ'],
  42266. ['@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ'],
  42267. ['@@é­@ШǨžĽЗ']
  42268. ],
  42269. 'encodeOffsets': [
  42270. [[
  42271. 182655,
  42272. -17756
  42273. ]],
  42274. [[
  42275. 183669,
  42276. -17204
  42277. ]],
  42278. [[
  42279. -184235,
  42280. -16897
  42281. ]]
  42282. ]
  42283. }
  42284. },
  42285. {
  42286. 'type': 'Feature',
  42287. 'id': 'FLK',
  42288. 'properties': { 'name': 'Falkland Islands' },
  42289. 'geometry': {
  42290. 'type': 'Polygon',
  42291. 'coordinates': ['@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ'],
  42292. 'encodeOffsets': [[
  42293. -62668,
  42294. -53094
  42295. ]]
  42296. }
  42297. },
  42298. {
  42299. 'type': 'Feature',
  42300. 'id': 'FRA',
  42301. 'properties': { 'name': 'France' },
  42302. 'geometry': {
  42303. 'type': 'MultiPolygon',
  42304. 'coordinates': [
  42305. ['@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ'],
  42306. ['@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽ]ϟВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵']
  42307. ],
  42308. 'encodeOffsets': [
  42309. [[
  42310. 9790,
  42311. 43165
  42312. ]],
  42313. [[
  42314. 3675,
  42315. 51589
  42316. ]]
  42317. ]
  42318. }
  42319. },
  42320. {
  42321. 'type': 'Feature',
  42322. 'id': 'GAB',
  42323. 'properties': { 'name': 'Gabon' },
  42324. 'geometry': {
  42325. 'type': 'Polygon',
  42326. 'coordinates': ['@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ'],
  42327. 'encodeOffsets': [[
  42328. 11361,
  42329. -4074
  42330. ]]
  42331. }
  42332. },
  42333. {
  42334. 'type': 'Feature',
  42335. 'id': 'GBR',
  42336. 'properties': { 'name': 'United Kingdom' },
  42337. 'geometry': {
  42338. 'type': 'MultiPolygon',
  42339. 'coordinates': [
  42340. ['@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ'],
  42341. ['@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì']
  42342. ],
  42343. 'encodeOffsets': [
  42344. [[
  42345. -5797,
  42346. 55864
  42347. ]],
  42348. [[
  42349. -3077,
  42350. 60043
  42351. ]]
  42352. ]
  42353. }
  42354. },
  42355. {
  42356. 'type': 'Feature',
  42357. 'id': 'GEO',
  42358. 'properties': { 'name': 'Georgia' },
  42359. 'geometry': {
  42360. 'type': 'Polygon',
  42361. 'coordinates': ['@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡'],
  42362. 'encodeOffsets': [[
  42363. 42552,
  42364. 42533
  42365. ]]
  42366. }
  42367. },
  42368. {
  42369. 'type': 'Feature',
  42370. 'id': 'GHA',
  42371. 'properties': { 'name': 'Ghana' },
  42372. 'geometry': {
  42373. 'type': 'Polygon',
  42374. 'coordinates': ['@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍'],
  42375. 'encodeOffsets': [[
  42376. 1086,
  42377. 6072
  42378. ]]
  42379. }
  42380. },
  42381. {
  42382. 'type': 'Feature',
  42383. 'id': 'GIN',
  42384. 'properties': { 'name': 'Guinea' },
  42385. 'geometry': {
  42386. 'type': 'Polygon',
  42387. 'coordinates': ['@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA'],
  42388. 'encodeOffsets': [[
  42389. -8641,
  42390. 7871
  42391. ]]
  42392. }
  42393. },
  42394. {
  42395. 'type': 'Feature',
  42396. 'id': 'GMB',
  42397. 'properties': { 'name': 'Gambia' },
  42398. 'geometry': {
  42399. 'type': 'Polygon',
  42400. 'coordinates': ['@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl'],
  42401. 'encodeOffsets': [[
  42402. -17245,
  42403. 13468
  42404. ]]
  42405. }
  42406. },
  42407. {
  42408. 'type': 'Feature',
  42409. 'id': 'GNB',
  42410. 'properties': { 'name': 'Guinea Bissau' },
  42411. 'geometry': {
  42412. 'type': 'Polygon',
  42413. 'coordinates': ['@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ'],
  42414. 'encodeOffsets': [[
  42415. -15493,
  42416. 11306
  42417. ]]
  42418. }
  42419. },
  42420. {
  42421. 'type': 'Feature',
  42422. 'id': 'GNQ',
  42423. 'properties': { 'name': 'Equatorial Guinea' },
  42424. 'geometry': {
  42425. 'type': 'Polygon',
  42426. 'coordinates': ['@@ƿŴ़̀െmPয়௡T˳µ'],
  42427. 'encodeOffsets': [[
  42428. 9721,
  42429. 1035
  42430. ]]
  42431. }
  42432. },
  42433. {
  42434. 'type': 'Feature',
  42435. 'id': 'GRC',
  42436. 'properties': { 'name': 'Greece' },
  42437. 'geometry': {
  42438. 'type': 'MultiPolygon',
  42439. 'coordinates': [
  42440. ['@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ'],
  42441. ['@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ']
  42442. ],
  42443. 'encodeOffsets': [
  42444. [[
  42445. 24269,
  42446. 36562
  42447. ]],
  42448. [[
  42449. 27243,
  42450. 42560
  42451. ]]
  42452. ]
  42453. }
  42454. },
  42455. {
  42456. 'type': 'Feature',
  42457. 'id': 'GRL',
  42458. 'properties': { 'name': 'Greenland' },
  42459. 'geometry': {
  42460. 'type': 'Polygon',
  42461. 'coordinates': ['@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ•୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘Ꮕ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή'],
  42462. 'encodeOffsets': [[
  42463. -47886,
  42464. 84612
  42465. ]]
  42466. }
  42467. },
  42468. {
  42469. 'type': 'Feature',
  42470. 'id': 'GTM',
  42471. 'properties': { 'name': 'Guatemala' },
  42472. 'geometry': {
  42473. 'type': 'Polygon',
  42474. 'coordinates': ['@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ'],
  42475. 'encodeOffsets': [[
  42476. -92257,
  42477. 14065
  42478. ]]
  42479. }
  42480. },
  42481. {
  42482. 'type': 'Feature',
  42483. 'id': 'GUF',
  42484. 'properties': { 'name': 'French Guiana' },
  42485. 'geometry': {
  42486. 'type': 'Polygon',
  42487. 'coordinates': ['@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ'],
  42488. 'encodeOffsets': [[
  42489. -53817,
  42490. 2565
  42491. ]]
  42492. }
  42493. },
  42494. {
  42495. 'type': 'Feature',
  42496. 'id': 'GUY',
  42497. 'properties': { 'name': 'Guyana' },
  42498. 'geometry': {
  42499. 'type': 'Polygon',
  42500. 'coordinates': ['@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ'],
  42501. 'encodeOffsets': [[
  42502. -61192,
  42503. 8568
  42504. ]]
  42505. }
  42506. },
  42507. {
  42508. 'type': 'Feature',
  42509. 'id': 'HND',
  42510. 'properties': { 'name': 'Honduras' },
  42511. 'geometry': {
  42512. 'type': 'Polygon',
  42513. 'coordinates': ['@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“'],
  42514. 'encodeOffsets': [[
  42515. -89412,
  42516. 13297
  42517. ]]
  42518. }
  42519. },
  42520. {
  42521. 'type': 'Feature',
  42522. 'id': 'HRV',
  42523. 'properties': { 'name': 'Croatia' },
  42524. 'geometry': {
  42525. 'type': 'Polygon',
  42526. 'coordinates': ['@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Šbג…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų'],
  42527. 'encodeOffsets': [[
  42528. 19282,
  42529. 47011
  42530. ]]
  42531. }
  42532. },
  42533. {
  42534. 'type': 'Feature',
  42535. 'id': 'HTI',
  42536. 'properties': { 'name': 'Haiti' },
  42537. 'geometry': {
  42538. 'type': 'Polygon',
  42539. 'coordinates': ['@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ'],
  42540. 'encodeOffsets': [[
  42541. -74946,
  42542. 20394
  42543. ]]
  42544. }
  42545. },
  42546. {
  42547. 'type': 'Feature',
  42548. 'id': 'HUN',
  42549. 'properties': { 'name': 'Hungary' },
  42550. 'geometry': {
  42551. 'type': 'Polygon',
  42552. 'coordinates': ['@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV'],
  42553. 'encodeOffsets': [[
  42554. 16592,
  42555. 47977
  42556. ]]
  42557. }
  42558. },
  42559. {
  42560. 'type': 'Feature',
  42561. 'id': 'IDN',
  42562. 'properties': { 'name': 'Indonesia' },
  42563. 'geometry': {
  42564. 'type': 'MultiPolygon',
  42565. 'coordinates': [
  42566. ['@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ'],
  42567. ['@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع'],
  42568. ['@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖'],
  42569. ['@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮'],
  42570. ['@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗'],
  42571. ['@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ'],
  42572. ['@@̿˥ׅƸǏΰࡘ¢Ⱦˣ'],
  42573. ['@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ'],
  42574. ['@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹'],
  42575. ['@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ'],
  42576. ['@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃'],
  42577. ['@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ'],
  42578. ['@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱‘ಟ']
  42579. ],
  42580. 'encodeOffsets': [
  42581. [[
  42582. 123613,
  42583. -10485
  42584. ]],
  42585. [[
  42586. 127423,
  42587. -10383
  42588. ]],
  42589. [[
  42590. 120730,
  42591. -8289
  42592. ]],
  42593. [[
  42594. 125854,
  42595. -8288
  42596. ]],
  42597. [[
  42598. 111231,
  42599. -6940
  42600. ]],
  42601. [[
  42602. 137959,
  42603. -6363
  42604. ]],
  42605. [[
  42606. 130304,
  42607. -3542
  42608. ]],
  42609. [[
  42610. 133603,
  42611. -3168
  42612. ]],
  42613. [[
  42614. 137363,
  42615. -1179
  42616. ]],
  42617. [[
  42618. 128247,
  42619. 1454
  42620. ]],
  42621. [[
  42622. 131777,
  42623. 1160
  42624. ]],
  42625. [[
  42626. 120705,
  42627. 1872
  42628. ]],
  42629. [[
  42630. 108358,
  42631. -5992
  42632. ]]
  42633. ]
  42634. }
  42635. },
  42636. {
  42637. 'type': 'Feature',
  42638. 'id': 'IND',
  42639. 'properties': { 'name': 'India' },
  42640. 'geometry': {
  42641. 'type': 'Polygon',
  42642. 'coordinates': ['@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸'],
  42643. 'encodeOffsets': [[
  42644. 79706,
  42645. 36346
  42646. ]]
  42647. }
  42648. },
  42649. {
  42650. 'type': 'Feature',
  42651. 'id': 'IRL',
  42652. 'properties': { 'name': 'Ireland' },
  42653. 'geometry': {
  42654. 'type': 'Polygon',
  42655. 'coordinates': ['@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ'],
  42656. 'encodeOffsets': [[
  42657. -6346,
  42658. 55161
  42659. ]]
  42660. }
  42661. },
  42662. {
  42663. 'type': 'Feature',
  42664. 'id': 'IRN',
  42665. 'properties': { 'name': 'Iran' },
  42666. 'geometry': {
  42667. 'type': 'Polygon',
  42668. 'coordinates': ['@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ'],
  42669. 'encodeOffsets': [[
  42670. 55216,
  42671. 38092
  42672. ]]
  42673. }
  42674. },
  42675. {
  42676. 'type': 'Feature',
  42677. 'id': 'IRQ',
  42678. 'properties': { 'name': 'Iraq' },
  42679. 'geometry': {
  42680. 'type': 'Polygon',
  42681. 'coordinates': ['@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉'],
  42682. 'encodeOffsets': [[
  42683. 46511,
  42684. 36842
  42685. ]]
  42686. }
  42687. },
  42688. {
  42689. 'type': 'Feature',
  42690. 'id': 'ISL',
  42691. 'properties': { 'name': 'Iceland' },
  42692. 'geometry': {
  42693. 'type': 'Polygon',
  42694. 'coordinates': ['@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ'],
  42695. 'encodeOffsets': [[
  42696. -14856,
  42697. 68051
  42698. ]]
  42699. }
  42700. },
  42701. {
  42702. 'type': 'Feature',
  42703. 'id': 'ISR',
  42704. 'properties': { 'name': 'Israel' },
  42705. 'geometry': {
  42706. 'type': 'Polygon',
  42707. 'coordinates': ['@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉց෾ʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM'],
  42708. 'encodeOffsets': [[
  42709. 36578,
  42710. 33495
  42711. ]]
  42712. }
  42713. },
  42714. {
  42715. 'type': 'Feature',
  42716. 'id': 'ITA',
  42717. 'properties': { 'name': 'Italy' },
  42718. 'geometry': {
  42719. 'type': 'MultiPolygon',
  42720. 'coordinates': [
  42721. ['@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò'],
  42722. ['@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ'],
  42723. ['@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉']
  42724. ],
  42725. 'encodeOffsets': [
  42726. [[
  42727. 15893,
  42728. 39149
  42729. ]],
  42730. [[
  42731. 9432,
  42732. 42200
  42733. ]],
  42734. [[
  42735. 12674,
  42736. 47890
  42737. ]]
  42738. ]
  42739. }
  42740. },
  42741. {
  42742. 'type': 'Feature',
  42743. 'id': 'JAM',
  42744. 'properties': { 'name': 'Jamaica' },
  42745. 'geometry': {
  42746. 'type': 'Polygon',
  42747. 'coordinates': ['@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ'],
  42748. 'encodeOffsets': [[
  42749. -79431,
  42750. 18935
  42751. ]]
  42752. }
  42753. },
  42754. {
  42755. 'type': 'Feature',
  42756. 'id': 'JOR',
  42757. 'properties': { 'name': 'Jordan' },
  42758. 'geometry': {
  42759. 'type': 'Polygon',
  42760. 'coordinates': ['@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ'],
  42761. 'encodeOffsets': [[
  42762. 36399,
  42763. 33172
  42764. ]]
  42765. }
  42766. },
  42767. {
  42768. 'type': 'Feature',
  42769. 'id': 'JPN',
  42770. 'properties': { 'name': 'Japan' },
  42771. 'geometry': {
  42772. 'type': 'MultiPolygon',
  42773. 'coordinates': [
  42774. ['@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ'],
  42775. ['@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ'],
  42776. ['@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯']
  42777. ],
  42778. 'encodeOffsets': [
  42779. [[
  42780. 137870,
  42781. 34969
  42782. ]],
  42783. [[
  42784. 144360,
  42785. 38034
  42786. ]],
  42787. [[
  42788. 147365,
  42789. 45235
  42790. ]]
  42791. ]
  42792. }
  42793. },
  42794. {
  42795. 'type': 'Feature',
  42796. 'id': 'KAZ',
  42797. 'properties': { 'name': 'Kazakhstan' },
  42798. 'geometry': {
  42799. 'type': 'Polygon',
  42800. 'coordinates': ['@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ'],
  42801. 'encodeOffsets': [[
  42802. 72666,
  42803. 43281
  42804. ]]
  42805. }
  42806. },
  42807. {
  42808. 'type': 'Feature',
  42809. 'id': 'KEN',
  42810. 'properties': { 'name': 'Kenya' },
  42811. 'geometry': {
  42812. 'type': 'Polygon',
  42813. 'coordinates': ['@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ'],
  42814. 'encodeOffsets': [[
  42815. 41977,
  42816. -878
  42817. ]]
  42818. }
  42819. },
  42820. {
  42821. 'type': 'Feature',
  42822. 'id': 'KGZ',
  42823. 'properties': { 'name': 'Kyrgyzstan' },
  42824. 'geometry': {
  42825. 'type': 'Polygon',
  42826. 'coordinates': ['@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ'],
  42827. 'encodeOffsets': [[
  42828. 72666,
  42829. 43281
  42830. ]]
  42831. }
  42832. },
  42833. {
  42834. 'type': 'Feature',
  42835. 'id': 'KHM',
  42836. 'properties': { 'name': 'Cambodia' },
  42837. 'geometry': {
  42838. 'type': 'Polygon',
  42839. 'coordinates': ['@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū'],
  42840. 'encodeOffsets': [[
  42841. 105982,
  42842. 10888
  42843. ]]
  42844. }
  42845. },
  42846. {
  42847. 'type': 'Feature',
  42848. 'id': 'KOR',
  42849. 'properties': { 'name': 'South Korea' },
  42850. 'geometry': {
  42851. 'type': 'Polygon',
  42852. 'coordinates': ['@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ'],
  42853. 'encodeOffsets': [[
  42854. 131431,
  42855. 39539
  42856. ]]
  42857. }
  42858. },
  42859. {
  42860. 'type': 'Feature',
  42861. 'id': 'CS-KM',
  42862. 'properties': { 'name': 'Kosovo' },
  42863. 'geometry': {
  42864. 'type': 'Polygon',
  42865. 'coordinates': ['@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ'],
  42866. 'encodeOffsets': [[
  42867. 21261,
  42868. 43062
  42869. ]]
  42870. }
  42871. },
  42872. {
  42873. 'type': 'Feature',
  42874. 'id': 'KWT',
  42875. 'properties': { 'name': 'Kuwait' },
  42876. 'geometry': {
  42877. 'type': 'Polygon',
  42878. 'coordinates': ['@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é'],
  42879. 'encodeOffsets': [[
  42880. 49126,
  42881. 30696
  42882. ]]
  42883. }
  42884. },
  42885. {
  42886. 'type': 'Feature',
  42887. 'id': 'LAO',
  42888. 'properties': { 'name': 'Laos' },
  42889. 'geometry': {
  42890. 'type': 'Polygon',
  42891. 'coordinates': ['@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢'],
  42892. 'encodeOffsets': [[
  42893. 107745,
  42894. 14616
  42895. ]]
  42896. }
  42897. },
  42898. {
  42899. 'type': 'Feature',
  42900. 'id': 'LBN',
  42901. 'properties': { 'name': 'Lebanon' },
  42902. 'geometry': {
  42903. 'type': 'Polygon',
  42904. 'coordinates': ['@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ'],
  42905. 'encodeOffsets': [[
  42906. 36681,
  42907. 34077
  42908. ]]
  42909. }
  42910. },
  42911. {
  42912. 'type': 'Feature',
  42913. 'id': 'LBR',
  42914. 'properties': { 'name': 'Liberia' },
  42915. 'geometry': {
  42916. 'type': 'Polygon',
  42917. 'coordinates': ['@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە'],
  42918. 'encodeOffsets': [[
  42919. -7897,
  42920. 4470
  42921. ]]
  42922. }
  42923. },
  42924. {
  42925. 'type': 'Feature',
  42926. 'id': 'LBY',
  42927. 'properties': { 'name': 'Libya' },
  42928. 'geometry': {
  42929. 'type': 'Polygon',
  42930. 'coordinates': ['@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ'],
  42931. 'encodeOffsets': [[
  42932. 15208,
  42933. 23412
  42934. ]]
  42935. }
  42936. },
  42937. {
  42938. 'type': 'Feature',
  42939. 'id': 'LKA',
  42940. 'properties': { 'name': 'Sri Lanka' },
  42941. 'geometry': {
  42942. 'type': 'Polygon',
  42943. 'coordinates': ['@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓'],
  42944. 'encodeOffsets': [[
  42945. 83751,
  42946. 7704
  42947. ]]
  42948. }
  42949. },
  42950. {
  42951. 'type': 'Feature',
  42952. 'id': 'LSO',
  42953. 'properties': { 'name': 'Lesotho' },
  42954. 'geometry': {
  42955. 'type': 'Polygon',
  42956. 'coordinates': ['@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ'],
  42957. 'encodeOffsets': [[
  42958. 29674,
  42959. -29650
  42960. ]]
  42961. }
  42962. },
  42963. {
  42964. 'type': 'Feature',
  42965. 'id': 'LTU',
  42966. 'properties': { 'name': 'Lithuania' },
  42967. 'geometry': {
  42968. 'type': 'Polygon',
  42969. 'coordinates': ['@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ'],
  42970. 'encodeOffsets': [[
  42971. 23277,
  42972. 55632
  42973. ]]
  42974. }
  42975. },
  42976. {
  42977. 'type': 'Feature',
  42978. 'id': 'LUX',
  42979. 'properties': { 'name': 'Luxembourg' },
  42980. 'geometry': {
  42981. 'type': 'Polygon',
  42982. 'coordinates': ['@@ǘȏ³ρʍiȉòĞҼɖŽ'],
  42983. 'encodeOffsets': [[
  42984. 6189,
  42985. 51332
  42986. ]]
  42987. }
  42988. },
  42989. {
  42990. 'type': 'Feature',
  42991. 'id': 'LVA',
  42992. 'properties': { 'name': 'Latvia' },
  42993. 'geometry': {
  42994. 'type': 'Polygon',
  42995. 'coordinates': ['@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ'],
  42996. 'encodeOffsets': [[
  42997. 21562,
  42998. 57376
  42999. ]]
  43000. }
  43001. },
  43002. {
  43003. 'type': 'Feature',
  43004. 'id': 'MAR',
  43005. 'properties': { 'name': 'Morocco' },
  43006. 'geometry': {
  43007. 'type': 'Polygon',
  43008. 'coordinates': ['@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI'],
  43009. 'encodeOffsets': [[
  43010. -5318,
  43011. 36614
  43012. ]]
  43013. }
  43014. },
  43015. {
  43016. 'type': 'Feature',
  43017. 'id': 'MDA',
  43018. 'properties': { 'name': 'Moldova' },
  43019. 'geometry': {
  43020. 'type': 'Polygon',
  43021. 'coordinates': ['@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ'],
  43022. 'encodeOffsets': [[
  43023. 27259,
  43024. 49379
  43025. ]]
  43026. }
  43027. },
  43028. {
  43029. 'type': 'Feature',
  43030. 'id': 'MDG',
  43031. 'properties': { 'name': 'Madagascar' },
  43032. 'geometry': {
  43033. 'type': 'Polygon',
  43034. 'coordinates': ['@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί'],
  43035. 'encodeOffsets': [[
  43036. 50733,
  43037. -12769
  43038. ]]
  43039. }
  43040. },
  43041. {
  43042. 'type': 'Feature',
  43043. 'id': 'MEX',
  43044. 'properties': { 'name': 'Mexico' },
  43045. 'geometry': {
  43046. 'type': 'Polygon',
  43047. 'coordinates': ['@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|'],
  43048. 'encodeOffsets': [[
  43049. -99471,
  43050. 26491
  43051. ]]
  43052. }
  43053. },
  43054. {
  43055. 'type': 'Feature',
  43056. 'id': 'MKD',
  43057. 'properties': { 'name': 'Macedonia' },
  43058. 'geometry': {
  43059. 'type': 'Polygon',
  43060. 'coordinates': ['@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸'],
  43061. 'encodeOffsets': [[
  43062. 21085,
  43063. 42860
  43064. ]]
  43065. }
  43066. },
  43067. {
  43068. 'type': 'Feature',
  43069. 'id': 'MLI',
  43070. 'properties': { 'name': 'Mali' },
  43071. 'geometry': {
  43072. 'type': 'Polygon',
  43073. 'coordinates': ['@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ'],
  43074. 'encodeOffsets': [[
  43075. -12462,
  43076. 14968
  43077. ]]
  43078. }
  43079. },
  43080. {
  43081. 'type': 'Feature',
  43082. 'id': 'MMR',
  43083. 'properties': { 'name': 'Myanmar' },
  43084. 'geometry': {
  43085. 'type': 'Polygon',
  43086. 'coordinates': ['@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ'],
  43087. 'encodeOffsets': [[
  43088. 101933,
  43089. 20672
  43090. ]]
  43091. }
  43092. },
  43093. {
  43094. 'type': 'Feature',
  43095. 'id': 'MNE',
  43096. 'properties': { 'name': 'Montenegro' },
  43097. 'geometry': {
  43098. 'type': 'Polygon',
  43099. 'coordinates': ['@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó'],
  43100. 'encodeOffsets': [[
  43101. 20277,
  43102. 43521
  43103. ]]
  43104. }
  43105. },
  43106. {
  43107. 'type': 'Feature',
  43108. 'id': 'MNG',
  43109. 'properties': { 'name': 'Mongolia' },
  43110. 'geometry': {
  43111. 'type': 'Polygon',
  43112. 'coordinates': ['@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ௐɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז'],
  43113. 'encodeOffsets': [[
  43114. 89858,
  43115. 50481
  43116. ]]
  43117. }
  43118. },
  43119. {
  43120. 'type': 'Feature',
  43121. 'id': 'MOZ',
  43122. 'properties': { 'name': 'Mozambique' },
  43123. 'geometry': {
  43124. 'type': 'Polygon',
  43125. 'coordinates': ['@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ'],
  43126. 'encodeOffsets': [[
  43127. 35390,
  43128. -11796
  43129. ]]
  43130. }
  43131. },
  43132. {
  43133. 'type': 'Feature',
  43134. 'id': 'MRT',
  43135. 'properties': { 'name': 'Mauritania' },
  43136. 'geometry': {
  43137. 'type': 'Polygon',
  43138. 'coordinates': ['@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ'],
  43139. 'encodeOffsets': [[
  43140. -12462,
  43141. 14968
  43142. ]]
  43143. }
  43144. },
  43145. {
  43146. 'type': 'Feature',
  43147. 'id': 'MWI',
  43148. 'properties': { 'name': 'Malawi' },
  43149. 'geometry': {
  43150. 'type': 'Polygon',
  43151. 'coordinates': ['@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ'],
  43152. 'encodeOffsets': [[
  43153. 35390,
  43154. -11796
  43155. ]]
  43156. }
  43157. },
  43158. {
  43159. 'type': 'Feature',
  43160. 'id': 'MYS',
  43161. 'properties': { 'name': 'Malaysia' },
  43162. 'geometry': {
  43163. 'type': 'MultiPolygon',
  43164. 'coordinates': [
  43165. ['@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ'],
  43166. ['@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ']
  43167. ],
  43168. 'encodeOffsets': [
  43169. [[
  43170. 103502,
  43171. 6354
  43172. ]],
  43173. [[
  43174. 121466,
  43175. 4586
  43176. ]]
  43177. ]
  43178. }
  43179. },
  43180. {
  43181. 'type': 'Feature',
  43182. 'id': 'NAM',
  43183. 'properties': { 'name': 'Namibia' },
  43184. 'geometry': {
  43185. 'type': 'Polygon',
  43186. 'coordinates': ['@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг'],
  43187. 'encodeOffsets': [[
  43188. 16738,
  43189. -29262
  43190. ]]
  43191. }
  43192. },
  43193. {
  43194. 'type': 'Feature',
  43195. 'id': 'NCL',
  43196. 'properties': { 'name': 'New Caledonia' },
  43197. 'geometry': {
  43198. 'type': 'Polygon',
  43199. 'coordinates': ['@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ'],
  43200. 'encodeOffsets': [[
  43201. 169759,
  43202. -21585
  43203. ]]
  43204. }
  43205. },
  43206. {
  43207. 'type': 'Feature',
  43208. 'id': 'NER',
  43209. 'properties': { 'name': 'Niger' },
  43210. 'geometry': {
  43211. 'type': 'Polygon',
  43212. 'coordinates': ['@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ'],
  43213. 'encodeOffsets': [[
  43214. 2207,
  43215. 12227
  43216. ]]
  43217. }
  43218. },
  43219. {
  43220. 'type': 'Feature',
  43221. 'id': 'NGA',
  43222. 'properties': { 'name': 'Nigeria' },
  43223. 'geometry': {
  43224. 'type': 'Polygon',
  43225. 'coordinates': ['@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש'],
  43226. 'encodeOffsets': [[
  43227. 8705,
  43228. 4887
  43229. ]]
  43230. }
  43231. },
  43232. {
  43233. 'type': 'Feature',
  43234. 'id': 'NIC',
  43235. 'properties': { 'name': 'Nicaragua' },
  43236. 'geometry': {
  43237. 'type': 'Polygon',
  43238. 'coordinates': ['@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ'],
  43239. 'encodeOffsets': [[
  43240. -87769,
  43241. 11355
  43242. ]]
  43243. }
  43244. },
  43245. {
  43246. 'type': 'Feature',
  43247. 'id': 'NLD',
  43248. 'properties': { 'name': 'Netherlands' },
  43249. 'geometry': {
  43250. 'type': 'Polygon',
  43251. 'coordinates': ['@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ'],
  43252. 'encodeOffsets': [[
  43253. 6220,
  43254. 54795
  43255. ]]
  43256. }
  43257. },
  43258. {
  43259. 'type': 'Feature',
  43260. 'id': 'NOR',
  43261. 'properties': { 'name': 'Norway' },
  43262. 'geometry': {
  43263. 'type': 'MultiPolygon',
  43264. 'coordinates': [
  43265. ['@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ'],
  43266. ['@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ'],
  43267. ['@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋'],
  43268. ['@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ']
  43269. ],
  43270. 'encodeOffsets': [
  43271. [[
  43272. 28842,
  43273. 72894
  43274. ]],
  43275. [[
  43276. 25318,
  43277. 79723
  43278. ]],
  43279. [[
  43280. 18690,
  43281. 81615
  43282. ]],
  43283. [[
  43284. 26059,
  43285. 82338
  43286. ]]
  43287. ]
  43288. }
  43289. },
  43290. {
  43291. 'type': 'Feature',
  43292. 'id': 'NPL',
  43293. 'properties': { 'name': 'Nepal' },
  43294. 'geometry': {
  43295. 'type': 'Polygon',
  43296. 'coordinates': ['@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć'],
  43297. 'encodeOffsets': [[
  43298. 90236,
  43299. 28546
  43300. ]]
  43301. }
  43302. },
  43303. {
  43304. 'type': 'Feature',
  43305. 'id': 'NZL',
  43306. 'properties': { 'name': 'New Zealand' },
  43307. 'geometry': {
  43308. 'type': 'MultiPolygon',
  43309. 'coordinates': [
  43310. ['@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ'],
  43311. ['@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ']
  43312. ],
  43313. 'encodeOffsets': [
  43314. [[
  43315. 177173,
  43316. -41901
  43317. ]],
  43318. [[
  43319. 178803,
  43320. -37024
  43321. ]]
  43322. ]
  43323. }
  43324. },
  43325. {
  43326. 'type': 'Feature',
  43327. 'id': 'OMN',
  43328. 'properties': { 'name': 'Oman' },
  43329. 'geometry': {
  43330. 'type': 'MultiPolygon',
  43331. 'coordinates': [
  43332. ['@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ'],
  43333. ['@@ʼnƳDž˺ʔ˺ľñā΍']
  43334. ],
  43335. 'encodeOffsets': [
  43336. [[
  43337. 60274,
  43338. 21621
  43339. ]],
  43340. [[
  43341. 57745,
  43342. 26518
  43343. ]]
  43344. ]
  43345. }
  43346. },
  43347. {
  43348. 'type': 'Feature',
  43349. 'id': 'PAK',
  43350. 'properties': { 'name': 'Pakistan' },
  43351. 'geometry': {
  43352. 'type': 'Polygon',
  43353. 'coordinates': ['@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ'],
  43354. 'encodeOffsets': [[
  43355. 76962,
  43356. 38025
  43357. ]]
  43358. }
  43359. },
  43360. {
  43361. 'type': 'Feature',
  43362. 'id': 'PAN',
  43363. 'properties': { 'name': 'Panama' },
  43364. 'geometry': {
  43365. 'type': 'Polygon',
  43366. 'coordinates': ['@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС'],
  43367. 'encodeOffsets': [[
  43368. -79750,
  43369. 7398
  43370. ]]
  43371. }
  43372. },
  43373. {
  43374. 'type': 'Feature',
  43375. 'id': 'PER',
  43376. 'properties': { 'name': 'Peru' },
  43377. 'geometry': {
  43378. 'type': 'Polygon',
  43379. 'coordinates': ['@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡'],
  43380. 'encodeOffsets': [[
  43381. -71260,
  43382. -18001
  43383. ]]
  43384. }
  43385. },
  43386. {
  43387. 'type': 'Feature',
  43388. 'id': 'PHL',
  43389. 'properties': { 'name': 'Philippines' },
  43390. 'geometry': {
  43391. 'type': 'MultiPolygon',
  43392. 'coordinates': [
  43393. ['@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱'],
  43394. ['@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ'],
  43395. ['@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ'],
  43396. ['@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА'],
  43397. ['@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻'],
  43398. ['@@ɟܩέоѓ٘ܚ‰̡̈'],
  43399. ['@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA']
  43400. ],
  43401. 'encodeOffsets': [
  43402. [[
  43403. 129410,
  43404. 8617
  43405. ]],
  43406. [[
  43407. 126959,
  43408. 10526
  43409. ]],
  43410. [[
  43411. 121349,
  43412. 9540
  43413. ]],
  43414. [[
  43415. 124809,
  43416. 12178
  43417. ]],
  43418. [[
  43419. 128515,
  43420. 12455
  43421. ]],
  43422. [[
  43423. 124445,
  43424. 13384
  43425. ]],
  43426. [[
  43427. 124234,
  43428. 18949
  43429. ]]
  43430. ]
  43431. }
  43432. },
  43433. {
  43434. 'type': 'Feature',
  43435. 'id': 'PNG',
  43436. 'properties': { 'name': 'Papua New Guinea' },
  43437. 'geometry': {
  43438. 'type': 'MultiPolygon',
  43439. 'coordinates': [
  43440. ['@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ'],
  43441. ['@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ'],
  43442. ['@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕'],
  43443. ['@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ']
  43444. ],
  43445. 'encodeOffsets': [
  43446. [[
  43447. 159622,
  43448. -6983
  43449. ]],
  43450. [[
  43451. 155631,
  43452. -5609
  43453. ]],
  43454. [[
  43455. 150725,
  43456. -7565
  43457. ]],
  43458. [[
  43459. 156816,
  43460. -4607
  43461. ]]
  43462. ]
  43463. }
  43464. },
  43465. {
  43466. 'type': 'Feature',
  43467. 'id': 'POL',
  43468. 'properties': { 'name': 'Poland' },
  43469. 'geometry': {
  43470. 'type': 'Polygon',
  43471. 'coordinates': ['@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔'],
  43472. 'encodeOffsets': [[
  43473. 15378,
  43474. 52334
  43475. ]]
  43476. }
  43477. },
  43478. {
  43479. 'type': 'Feature',
  43480. 'id': 'PRI',
  43481. 'properties': { 'name': 'Puerto Rico' },
  43482. 'geometry': {
  43483. 'type': 'Polygon',
  43484. 'coordinates': ['@@јõưǕɋɃمLӫ‡·άŢŬیK'],
  43485. 'encodeOffsets': [[
  43486. -67873,
  43487. 18960
  43488. ]]
  43489. }
  43490. },
  43491. {
  43492. 'type': 'Feature',
  43493. 'id': 'PRK',
  43494. 'properties': { 'name': 'North Korea' },
  43495. 'geometry': {
  43496. 'type': 'Polygon',
  43497. 'coordinates': ['@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ'],
  43498. 'encodeOffsets': [[
  43499. 133776,
  43500. 43413
  43501. ]]
  43502. }
  43503. },
  43504. {
  43505. 'type': 'Feature',
  43506. 'id': 'PRT',
  43507. 'properties': { 'name': 'Portugal' },
  43508. 'geometry': {
  43509. 'type': 'Polygon',
  43510. 'coordinates': ['@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩYٽƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲'],
  43511. 'encodeOffsets': [[
  43512. -9251,
  43513. 42886
  43514. ]]
  43515. }
  43516. },
  43517. {
  43518. 'type': 'Feature',
  43519. 'id': 'PRY',
  43520. 'properties': { 'name': 'Paraguay' },
  43521. 'geometry': {
  43522. 'type': 'Polygon',
  43523. 'coordinates': ['@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ'],
  43524. 'encodeOffsets': [[
  43525. -64189,
  43526. -22783
  43527. ]]
  43528. }
  43529. },
  43530. {
  43531. 'type': 'Feature',
  43532. 'id': 'QAT',
  43533. 'properties': { 'name': 'Qatar' },
  43534. 'geometry': {
  43535. 'type': 'Polygon',
  43536. 'coordinates': ['@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ'],
  43537. 'encodeOffsets': [[
  43538. 52030,
  43539. 25349
  43540. ]]
  43541. }
  43542. },
  43543. {
  43544. 'type': 'Feature',
  43545. 'id': 'ROU',
  43546. 'properties': { 'name': 'Romania' },
  43547. 'geometry': {
  43548. 'type': 'Polygon',
  43549. 'coordinates': ['@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ'],
  43550. 'encodeOffsets': [[
  43551. 23256,
  43552. 49032
  43553. ]]
  43554. }
  43555. },
  43556. {
  43557. 'type': 'Feature',
  43558. 'id': 'RUS',
  43559. 'properties': { 'name': 'Russia' },
  43560. 'geometry': {
  43561. 'type': 'MultiPolygon',
  43562. 'coordinates': [
  43563. ['@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ'],
  43564. ['@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ'],
  43565. ['@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ'],
  43566. ['@@ः©ƭˌੲΖ@ַ'],
  43567. ['@@ળ»@ָň–܈E௒ʉïŗࡽȩ'],
  43568. ['@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə'],
  43569. ['@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ'],
  43570. ['@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ'],
  43571. ['@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ'],
  43572. ['@@ɨгސȲឤ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ɶδߤΨጤΈ෸˗ଥȷበŹ'],
  43573. ['@@ⵙ͕ໞીےĦقÃᒈӋʟͿ'],
  43574. ['@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ'],
  43575. ['@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ']
  43576. ],
  43577. 'encodeOffsets': [
  43578. [[
  43579. 147096,
  43580. 51966
  43581. ]],
  43582. [[
  43583. 23277,
  43584. 55632
  43585. ]],
  43586. [[
  43587. -179214,
  43588. 68183
  43589. ]],
  43590. [[
  43591. 184320,
  43592. 72533
  43593. ]],
  43594. [[
  43595. -182982,
  43596. 72595
  43597. ]],
  43598. [[
  43599. 147051,
  43600. 74970
  43601. ]],
  43602. [[
  43603. 154350,
  43604. 76887
  43605. ]],
  43606. [[
  43607. 148569,
  43608. 77377
  43609. ]],
  43610. [[
  43611. 58917,
  43612. 72418
  43613. ]],
  43614. [[
  43615. 109538,
  43616. 78822
  43617. ]],
  43618. [[
  43619. 107598,
  43620. 80187
  43621. ]],
  43622. [[
  43623. 52364,
  43624. 82481
  43625. ]],
  43626. [[
  43627. 102339,
  43628. 80775
  43629. ]]
  43630. ]
  43631. }
  43632. },
  43633. {
  43634. 'type': 'Feature',
  43635. 'id': 'RWA',
  43636. 'properties': { 'name': 'Rwanda' },
  43637. 'geometry': {
  43638. 'type': 'Polygon',
  43639. 'coordinates': ['@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ'],
  43640. 'encodeOffsets': [[
  43641. 31150,
  43642. -1161
  43643. ]]
  43644. }
  43645. },
  43646. {
  43647. 'type': 'Feature',
  43648. 'id': 'ESH',
  43649. 'properties': { 'name': 'Western Sahara' },
  43650. 'geometry': {
  43651. 'type': 'Polygon',
  43652. 'coordinates': ['@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚'],
  43653. 'encodeOffsets': [[
  43654. -9005,
  43655. 27772
  43656. ]]
  43657. }
  43658. },
  43659. {
  43660. 'type': 'Feature',
  43661. 'id': 'SAU',
  43662. 'properties': { 'name': 'Saudi Arabia' },
  43663. 'geometry': {
  43664. 'type': 'Polygon',
  43665. 'coordinates': ['@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ'],
  43666. 'encodeOffsets': [[
  43667. 43807,
  43668. 16741
  43669. ]]
  43670. }
  43671. },
  43672. {
  43673. 'type': 'Feature',
  43674. 'id': 'SDN',
  43675. 'properties': { 'name': 'Sudan' },
  43676. 'geometry': {
  43677. 'type': 'Polygon',
  43678. 'coordinates': ['@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij'],
  43679. 'encodeOffsets': [[
  43680. 34779,
  43681. 9692
  43682. ]]
  43683. }
  43684. },
  43685. {
  43686. 'type': 'Feature',
  43687. 'id': 'SDS',
  43688. 'properties': { 'name': 'South Sudan' },
  43689. 'geometry': {
  43690. 'type': 'Polygon',
  43691. 'coordinates': ['@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg'],
  43692. 'encodeOffsets': [[
  43693. 34779,
  43694. 9692
  43695. ]]
  43696. }
  43697. },
  43698. {
  43699. 'type': 'Feature',
  43700. 'id': 'SEN',
  43701. 'properties': { 'name': 'Senegal' },
  43702. 'geometry': {
  43703. 'type': 'Polygon',
  43704. 'coordinates': ['@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy'],
  43705. 'encodeOffsets': [[
  43706. -17114,
  43707. 13922
  43708. ]]
  43709. }
  43710. },
  43711. {
  43712. 'type': 'Feature',
  43713. 'id': 'SLB',
  43714. 'properties': { 'name': 'Solomon Islands' },
  43715. 'geometry': {
  43716. 'type': 'MultiPolygon',
  43717. 'coordinates': [
  43718. ['@@ɾ˿חN͉ԬԈȯǜ‰'],
  43719. ['@@͝mԧĎǫżÀͮֈƁ˜ǭƎə'],
  43720. ['@@ųƹحܰǫԈ˺@̠ڥʹЗ'],
  43721. ['@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ'],
  43722. ['@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛']
  43723. ],
  43724. 'encodeOffsets': [
  43725. [[
  43726. 166010,
  43727. -10734
  43728. ]],
  43729. [[
  43730. 164713,
  43731. -10109
  43732. ]],
  43733. [[
  43734. 165561,
  43735. -9830
  43736. ]],
  43737. [[
  43738. 163713,
  43739. -8537
  43740. ]],
  43741. [[
  43742. 161320,
  43743. -7524
  43744. ]]
  43745. ]
  43746. }
  43747. },
  43748. {
  43749. 'type': 'Feature',
  43750. 'id': 'SLE',
  43751. 'properties': { 'name': 'Sierra Leone' },
  43752. 'geometry': {
  43753. 'type': 'Polygon',
  43754. 'coordinates': ['@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ'],
  43755. 'encodeOffsets': [[
  43756. -11713,
  43757. 6949
  43758. ]]
  43759. }
  43760. },
  43761. {
  43762. 'type': 'Feature',
  43763. 'id': 'SLV',
  43764. 'properties': { 'name': 'El Salvador' },
  43765. 'geometry': {
  43766. 'type': 'Polygon',
  43767. 'coordinates': ['@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ'],
  43768. 'encodeOffsets': [[
  43769. -89900,
  43770. 13706
  43771. ]]
  43772. }
  43773. },
  43774. {
  43775. 'type': 'Feature',
  43776. 'id': '-99',
  43777. 'properties': { 'name': 'Somaliland' },
  43778. 'geometry': {
  43779. 'type': 'Polygon',
  43780. 'coordinates': ['@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ'],
  43781. 'encodeOffsets': [[
  43782. 50113,
  43783. 9679
  43784. ]]
  43785. }
  43786. },
  43787. {
  43788. 'type': 'Feature',
  43789. 'id': 'SOM',
  43790. 'properties': { 'name': 'Somalia' },
  43791. 'geometry': {
  43792. 'type': 'Polygon',
  43793. 'coordinates': ['@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ'],
  43794. 'encodeOffsets': [[
  43795. 50923,
  43796. 11857
  43797. ]]
  43798. }
  43799. },
  43800. {
  43801. 'type': 'Feature',
  43802. 'id': 'SRB',
  43803. 'properties': { 'name': 'Republic of Serbia' },
  43804. 'geometry': {
  43805. 'type': 'Polygon',
  43806. 'coordinates': ['@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ'],
  43807. 'encodeOffsets': [[
  43808. 21376,
  43809. 46507
  43810. ]]
  43811. }
  43812. },
  43813. {
  43814. 'type': 'Feature',
  43815. 'id': 'SUR',
  43816. 'properties': { 'name': 'Suriname' },
  43817. 'geometry': {
  43818. 'type': 'Polygon',
  43819. 'coordinates': ['@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ'],
  43820. 'encodeOffsets': [[
  43821. -58518,
  43822. 6117
  43823. ]]
  43824. }
  43825. },
  43826. {
  43827. 'type': 'Feature',
  43828. 'id': 'SVK',
  43829. 'properties': { 'name': 'Slovakia' },
  43830. 'geometry': {
  43831. 'type': 'Polygon',
  43832. 'coordinates': ['@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD'],
  43833. 'encodeOffsets': [[
  43834. 19306,
  43835. 50685
  43836. ]]
  43837. }
  43838. },
  43839. {
  43840. 'type': 'Feature',
  43841. 'id': 'SVN',
  43842. 'properties': { 'name': 'Slovenia' },
  43843. 'geometry': {
  43844. 'type': 'Polygon',
  43845. 'coordinates': ['@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа'],
  43846. 'encodeOffsets': [[
  43847. 14138,
  43848. 47626
  43849. ]]
  43850. }
  43851. },
  43852. {
  43853. 'type': 'Feature',
  43854. 'id': 'SWE',
  43855. 'properties': { 'name': 'Sweden' },
  43856. 'geometry': {
  43857. 'type': 'Polygon',
  43858. 'coordinates': ['@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ'],
  43859. 'encodeOffsets': [[
  43860. 22716,
  43861. 67302
  43862. ]]
  43863. }
  43864. },
  43865. {
  43866. 'type': 'Feature',
  43867. 'id': 'SWZ',
  43868. 'properties': { 'name': 'Swaziland' },
  43869. 'geometry': {
  43870. 'type': 'Polygon',
  43871. 'coordinates': ['@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω'],
  43872. 'encodeOffsets': [[
  43873. 32842,
  43874. -27375
  43875. ]]
  43876. }
  43877. },
  43878. {
  43879. 'type': 'Feature',
  43880. 'id': 'SYR',
  43881. 'properties': { 'name': 'Syria' },
  43882. 'geometry': {
  43883. 'type': 'Polygon',
  43884. 'coordinates': ['@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓'],
  43885. 'encodeOffsets': [[
  43886. 39724,
  43887. 34180
  43888. ]]
  43889. }
  43890. },
  43891. {
  43892. 'type': 'Feature',
  43893. 'id': 'TCD',
  43894. 'properties': { 'name': 'Chad' },
  43895. 'geometry': {
  43896. 'type': 'Polygon',
  43897. 'coordinates': ['@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ'],
  43898. 'encodeOffsets': [[
  43899. 14844,
  43900. 13169
  43901. ]]
  43902. }
  43903. },
  43904. {
  43905. 'type': 'Feature',
  43906. 'id': 'TGO',
  43907. 'properties': { 'name': 'Togo' },
  43908. 'geometry': {
  43909. 'type': 'Polygon',
  43910. 'coordinates': ['@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ'],
  43911. 'encodeOffsets': [[
  43912. 1911,
  43913. 6290
  43914. ]]
  43915. }
  43916. },
  43917. {
  43918. 'type': 'Feature',
  43919. 'id': 'THA',
  43920. 'properties': { 'name': 'Thailand' },
  43921. 'geometry': {
  43922. 'type': 'Polygon',
  43923. 'coordinates': ['@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১'],
  43924. 'encodeOffsets': [[
  43925. 105047,
  43926. 12480
  43927. ]]
  43928. }
  43929. },
  43930. {
  43931. 'type': 'Feature',
  43932. 'id': 'TJK',
  43933. 'properties': { 'name': 'Tajikistan' },
  43934. 'geometry': {
  43935. 'type': 'Polygon',
  43936. 'coordinates': ['@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv'],
  43937. 'encodeOffsets': [[
  43938. 72719,
  43939. 41211
  43940. ]]
  43941. }
  43942. },
  43943. {
  43944. 'type': 'Feature',
  43945. 'id': 'TKM',
  43946. 'properties': { 'name': 'Turkmenistan' },
  43947. 'geometry': {
  43948. 'type': 'Polygon',
  43949. 'coordinates': ['@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаࡽ०ׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈'],
  43950. 'encodeOffsets': [[
  43951. 62680,
  43952. 36506
  43953. ]]
  43954. }
  43955. },
  43956. {
  43957. 'type': 'Feature',
  43958. 'id': 'TLS',
  43959. 'properties': { 'name': 'East Timor' },
  43960. 'geometry': {
  43961. 'type': 'Polygon',
  43962. 'coordinates': ['@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ'],
  43963. 'encodeOffsets': [[
  43964. 127968,
  43965. -9106
  43966. ]]
  43967. }
  43968. },
  43969. {
  43970. 'type': 'Feature',
  43971. 'id': 'TTO',
  43972. 'properties': { 'name': 'Trinidad and Tobago' },
  43973. 'geometry': {
  43974. 'type': 'Polygon',
  43975. 'coordinates': ['@@ӚŊǮ‡‘صۭġƯúʒɲiͪ'],
  43976. 'encodeOffsets': [[
  43977. -63160,
  43978. 11019
  43979. ]]
  43980. }
  43981. },
  43982. {
  43983. 'type': 'Feature',
  43984. 'id': 'TUN',
  43985. 'properties': { 'name': 'Tunisia' },
  43986. 'geometry': {
  43987. 'type': 'Polygon',
  43988. 'coordinates': ['@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț'],
  43989. 'encodeOffsets': [[
  43990. 9710,
  43991. 31035
  43992. ]]
  43993. }
  43994. },
  43995. {
  43996. 'type': 'Feature',
  43997. 'id': 'TUR',
  43998. 'properties': { 'name': 'Turkey' },
  43999. 'geometry': {
  44000. 'type': 'MultiPolygon',
  44001. 'coordinates': [
  44002. ['@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף'],
  44003. ['@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ']
  44004. ],
  44005. 'encodeOffsets': [
  44006. [[
  44007. 37800,
  44008. 42328
  44009. ]],
  44010. [[
  44011. 27845,
  44012. 41668
  44013. ]]
  44014. ]
  44015. }
  44016. },
  44017. {
  44018. 'type': 'Feature',
  44019. 'id': 'TZA',
  44020. 'properties': { 'name': 'United Republic of Tanzania' },
  44021. 'geometry': {
  44022. 'type': 'Polygon',
  44023. 'coordinates': ['@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà'],
  44024. 'encodeOffsets': [[
  44025. 34718,
  44026. -972
  44027. ]]
  44028. }
  44029. },
  44030. {
  44031. 'type': 'Feature',
  44032. 'id': 'UGA',
  44033. 'properties': { 'name': 'Uganda' },
  44034. 'geometry': {
  44035. 'type': 'Polygon',
  44036. 'coordinates': ['@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß'],
  44037. 'encodeOffsets': [[
  44038. 32631,
  44039. -1052
  44040. ]]
  44041. }
  44042. },
  44043. {
  44044. 'type': 'Feature',
  44045. 'id': 'UKR',
  44046. 'properties': { 'name': 'Ukraine' },
  44047. 'geometry': {
  44048. 'type': 'Polygon',
  44049. 'coordinates': ['@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº'],
  44050. 'encodeOffsets': [[
  44051. 32549,
  44052. 53353
  44053. ]]
  44054. }
  44055. },
  44056. {
  44057. 'type': 'Feature',
  44058. 'id': 'URY',
  44059. 'properties': { 'name': 'Uruguay' },
  44060. 'geometry': {
  44061. 'type': 'Polygon',
  44062. 'coordinates': ['@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ'],
  44063. 'encodeOffsets': [[
  44064. -59008,
  44065. -30941
  44066. ]]
  44067. }
  44068. },
  44069. {
  44070. 'type': 'Feature',
  44071. 'id': 'USA',
  44072. 'properties': { 'name': 'United States of America' },
  44073. 'geometry': {
  44074. 'type': 'MultiPolygon',
  44075. 'coordinates': [
  44076. ['@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ'],
  44077. ['@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ'],
  44078. ['@@ĝ҉|Úĸа•'],
  44079. ['@@­µÓŻˆŃȒ’ɤŚêÃʐ˥'],
  44080. ['@@ıĉ˱ƴªÖŸĈȘijȝ'],
  44081. ['@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J'],
  44082. ['@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ'],
  44083. ['@@ԧŽսƾԛɮࠦƞښùĂ͑'],
  44084. ['@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́'],
  44085. ['@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ']
  44086. ],
  44087. 'encodeOffsets': [
  44088. [[
  44089. -159275,
  44090. 19542
  44091. ]],
  44092. [[
  44093. -159825,
  44094. 21140
  44095. ]],
  44096. [[
  44097. -160520,
  44098. 21686
  44099. ]],
  44100. [[
  44101. -161436,
  44102. 21834
  44103. ]],
  44104. [[
  44105. -163169,
  44106. 22510
  44107. ]],
  44108. [[
  44109. -97093,
  44110. 50575
  44111. ]],
  44112. [[
  44113. -156678,
  44114. 58487
  44115. ]],
  44116. [[
  44117. -169553,
  44118. 61348
  44119. ]],
  44120. [[
  44121. -175853,
  44122. 65314
  44123. ]],
  44124. [[
  44125. -158789,
  44126. 72856
  44127. ]]
  44128. ]
  44129. }
  44130. },
  44131. {
  44132. 'type': 'Feature',
  44133. 'id': 'UZB',
  44134. 'properties': { 'name': 'Uzbekistan' },
  44135. 'geometry': {
  44136. 'type': 'Polygon',
  44137. 'coordinates': ['@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN'],
  44138. 'encodeOffsets': [[
  44139. 68116,
  44140. 38260
  44141. ]]
  44142. }
  44143. },
  44144. {
  44145. 'type': 'Feature',
  44146. 'id': 'VEN',
  44147. 'properties': { 'name': 'Venezuela' },
  44148. 'geometry': {
  44149. 'type': 'Polygon',
  44150. 'coordinates': ['@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ'],
  44151. 'encodeOffsets': [[
  44152. -73043,
  44153. 12059
  44154. ]]
  44155. }
  44156. },
  44157. {
  44158. 'type': 'Feature',
  44159. 'id': 'VNM',
  44160. 'properties': { 'name': 'Vietnam' },
  44161. 'geometry': {
  44162. 'type': 'Polygon',
  44163. 'coordinates': ['@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ'],
  44164. 'encodeOffsets': [[
  44165. 110644,
  44166. 22070
  44167. ]]
  44168. }
  44169. },
  44170. {
  44171. 'type': 'Feature',
  44172. 'id': 'VUT',
  44173. 'properties': { 'name': 'Vanuatu' },
  44174. 'geometry': {
  44175. 'type': 'MultiPolygon',
  44176. 'coordinates': [
  44177. ['@@ˣō˭ςŒɤՆӗ'],
  44178. ['@@ƌڱɥŀǩ­ťɴi٢Дʵ']
  44179. ],
  44180. 'encodeOffsets': [
  44181. [[
  44182. 171874,
  44183. -16861
  44184. ]],
  44185. [[
  44186. 171119,
  44187. -15292
  44188. ]]
  44189. ]
  44190. }
  44191. },
  44192. {
  44193. 'type': 'Feature',
  44194. 'id': 'PSE',
  44195. 'properties': { 'name': 'West Bank' },
  44196. 'geometry': {
  44197. 'type': 'Polygon',
  44198. 'coordinates': ['@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś'],
  44199. 'encodeOffsets': [[
  44200. 36399,
  44201. 33172
  44202. ]]
  44203. }
  44204. },
  44205. {
  44206. 'type': 'Feature',
  44207. 'id': 'YEM',
  44208. 'properties': { 'name': 'Yemen' },
  44209. 'geometry': {
  44210. 'type': 'Polygon',
  44211. 'coordinates': ['@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח'],
  44212. 'encodeOffsets': [[
  44213. 54384,
  44214. 17051
  44215. ]]
  44216. }
  44217. },
  44218. {
  44219. 'type': 'Feature',
  44220. 'id': 'ZAF',
  44221. 'properties': { 'name': 'South Africa' },
  44222. 'geometry': {
  44223. 'type': 'Polygon',
  44224. 'coordinates': [
  44225. '@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ',
  44226. '@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ'
  44227. ],
  44228. 'encodeOffsets': [
  44229. [
  44230. 32278,
  44231. -29959
  44232. ],
  44233. [
  44234. 29674,
  44235. -29650
  44236. ]
  44237. ]
  44238. }
  44239. },
  44240. {
  44241. 'type': 'Feature',
  44242. 'id': 'ZMB',
  44243. 'properties': { 'name': 'Zambia' },
  44244. 'geometry': {
  44245. 'type': 'Polygon',
  44246. 'coordinates': ['@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ'],
  44247. 'encodeOffsets': [[
  44248. 33546,
  44249. -9452
  44250. ]]
  44251. }
  44252. },
  44253. {
  44254. 'type': 'Feature',
  44255. 'id': 'ZWE',
  44256. 'properties': { 'name': 'Zimbabwe' },
  44257. 'geometry': {
  44258. 'type': 'Polygon',
  44259. 'coordinates': ['@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓'],
  44260. 'encodeOffsets': [[
  44261. 31941,
  44262. -22785
  44263. ]]
  44264. }
  44265. }
  44266. ],
  44267. 'UTF8Encoding': true
  44268. };
  44269. });define('echarts/util/mapData/geoJson/xiang_gang_geo', [], function () {
  44270. return {
  44271. 'type': 'FeatureCollection',
  44272. 'features': [{
  44273. 'type': 'Feature',
  44274. 'id': '8100',
  44275. 'properties': {
  44276. 'name': '香港',
  44277. 'cp': [
  44278. 114.2784,
  44279. 22.3057
  44280. ],
  44281. 'childNum': 1
  44282. },
  44283. 'geometry': {
  44284. 'type': 'Polygon',
  44285. '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'],
  44286. 'encodeOffsets': [[
  44287. 117078,
  44288. 22678
  44289. ]]
  44290. }
  44291. }],
  44292. 'UTF8Encoding': true
  44293. };
  44294. });define('echarts/util/mapData/geoJson/xin_jiang_geo', [], function () {
  44295. return {
  44296. 'type': 'FeatureCollection',
  44297. 'features': [
  44298. {
  44299. 'type': 'Feature',
  44300. 'id': '6528',
  44301. 'properties': {
  44302. 'name': '巴音郭楞蒙古自治州',
  44303. 'cp': [
  44304. 88.1653,
  44305. 39.6002
  44306. ],
  44307. 'childNum': 9
  44308. },
  44309. 'geometry': {
  44310. 'type': 'Polygon',
  44311. '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¦ɄǜÈ'],
  44312. 'encodeOffsets': [[
  44313. 86986,
  44314. 44534
  44315. ]]
  44316. }
  44317. },
  44318. {
  44319. 'type': 'Feature',
  44320. 'id': '6532',
  44321. 'properties': {
  44322. 'name': '和田地区',
  44323. 'cp': [
  44324. 81.167,
  44325. 36.9855
  44326. ],
  44327. 'childNum': 8
  44328. },
  44329. 'geometry': {
  44330. 'type': 'Polygon',
  44331. '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šɄɴжϼِ͈Ŏ„'],
  44332. 'encodeOffsets': [[
  44333. 81293,
  44334. 39764
  44335. ]]
  44336. }
  44337. },
  44338. {
  44339. 'type': 'Feature',
  44340. 'id': '6522',
  44341. 'properties': {
  44342. 'name': '哈密地区',
  44343. 'cp': [
  44344. 93.7793,
  44345. 42.9236
  44346. ],
  44347. 'childNum': 3
  44348. },
  44349. 'geometry': {
  44350. 'type': 'Polygon',
  44351. '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„'],
  44352. 'encodeOffsets': [[
  44353. 93387,
  44354. 44539
  44355. ]]
  44356. }
  44357. },
  44358. {
  44359. 'type': 'Feature',
  44360. 'id': '6529',
  44361. 'properties': {
  44362. 'name': '阿克苏地区',
  44363. 'cp': [
  44364. 82.9797,
  44365. 41.0229
  44366. ],
  44367. 'childNum': 10
  44368. },
  44369. 'geometry': {
  44370. 'type': 'Polygon',
  44371. 'coordinates': [
  44372. '@@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ğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼',
  44373. '@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ'
  44374. ],
  44375. 'encodeOffsets': [
  44376. [
  44377. 80022,
  44378. 41294
  44379. ],
  44380. [
  44381. 83914,
  44382. 41474
  44383. ]
  44384. ]
  44385. }
  44386. },
  44387. {
  44388. 'type': 'Feature',
  44389. 'id': '6543',
  44390. 'properties': {
  44391. 'name': '阿勒泰地区',
  44392. 'cp': [
  44393. 88.2971,
  44394. 47.0929
  44395. ],
  44396. 'childNum': 7
  44397. },
  44398. 'geometry': {
  44399. 'type': 'Polygon',
  44400. '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—¯'],
  44401. 'encodeOffsets': [[
  44402. 92656,
  44403. 48460
  44404. ]]
  44405. }
  44406. },
  44407. {
  44408. 'type': 'Feature',
  44409. 'id': '6531',
  44410. 'properties': {
  44411. 'name': '喀什地区',
  44412. 'cp': [
  44413. 77.168,
  44414. 37.8534
  44415. ],
  44416. 'childNum': 13
  44417. },
  44418. 'geometry': {
  44419. 'type': 'Polygon',
  44420. 'coordinates': [
  44421. '@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£Ģ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„Èǃ',
  44422. '@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé'
  44423. ],
  44424. 'encodeOffsets': [
  44425. [
  44426. 76624,
  44427. 39196
  44428. ],
  44429. [
  44430. 81507,
  44431. 40877
  44432. ]
  44433. ]
  44434. }
  44435. },
  44436. {
  44437. 'type': 'Feature',
  44438. 'id': '6542',
  44439. 'properties': {
  44440. 'name': '塔城地区',
  44441. 'cp': [
  44442. 86.6272,
  44443. 45.8514
  44444. ],
  44445. 'childNum': 7
  44446. },
  44447. 'geometry': {
  44448. 'type': 'Polygon',
  44449. 'coordinates': [
  44450. '@@ή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ŐĶˢ@',
  44451. '@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™Vğ—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlźƒ¦'
  44452. ],
  44453. 'encodeOffsets': [
  44454. [
  44455. 87593,
  44456. 48184
  44457. ],
  44458. [
  44459. 86884,
  44460. 45760
  44461. ]
  44462. ]
  44463. }
  44464. },
  44465. {
  44466. 'type': 'Feature',
  44467. 'id': '6523',
  44468. 'properties': {
  44469. 'name': '昌吉回族自治州',
  44470. 'cp': [
  44471. 89.6814,
  44472. 44.4507
  44473. ],
  44474. 'childNum': 7
  44475. },
  44476. 'geometry': {
  44477. 'type': 'MultiPolygon',
  44478. 'coordinates': [
  44479. ['@@መL@È°ĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwŹƒŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅƃĸǫŎ„ĊmŎǬ՘'],
  44480. ['@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń']
  44481. ],
  44482. 'encodeOffsets': [
  44483. [[
  44484. 90113,
  44485. 46080
  44486. ]],
  44487. [[
  44488. 87638,
  44489. 44579
  44490. ]]
  44491. ]
  44492. }
  44493. },
  44494. {
  44495. 'type': 'Feature',
  44496. 'id': '6530',
  44497. 'properties': {
  44498. 'name': '克孜勒苏柯尔克孜自治州',
  44499. 'cp': [
  44500. 74.6301,
  44501. 39.5233
  44502. ],
  44503. 'childNum': 4
  44504. },
  44505. 'geometry': {
  44506. 'type': 'Polygon',
  44507. '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'],
  44508. 'encodeOffsets': [[
  44509. 80269,
  44510. 42396
  44511. ]]
  44512. }
  44513. },
  44514. {
  44515. 'type': 'Feature',
  44516. 'id': '6521',
  44517. 'properties': {
  44518. 'name': '吐鲁番地区',
  44519. 'cp': [
  44520. 89.6375,
  44521. 42.4127
  44522. ],
  44523. 'childNum': 3
  44524. },
  44525. 'geometry': {
  44526. 'type': 'Polygon',
  44527. '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ҎÈ'],
  44528. 'encodeOffsets': [[
  44529. 90248,
  44530. 44371
  44531. ]]
  44532. }
  44533. },
  44534. {
  44535. 'type': 'Feature',
  44536. 'id': '6540',
  44537. 'properties': {
  44538. 'name': '伊犁哈萨克自治州',
  44539. 'cp': [
  44540. 82.5513,
  44541. 43.5498
  44542. ],
  44543. 'childNum': 10
  44544. },
  44545. 'geometry': {
  44546. 'type': 'MultiPolygon',
  44547. 'coordinates': [
  44548. ['@@ĉ„ÆŘȁ̐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Ś'],
  44549. ['@@ÞĀlźƒ¦¯ĸŤKޙšƒċƨbš™Vğ—w›ġ¯@ţƽJ']
  44550. ],
  44551. 'encodeOffsets': [
  44552. [[
  44553. 82722,
  44554. 44337
  44555. ]],
  44556. [[
  44557. 86817,
  44558. 45456
  44559. ]]
  44560. ]
  44561. }
  44562. },
  44563. {
  44564. 'type': 'Feature',
  44565. 'id': '6527',
  44566. 'properties': {
  44567. 'name': '博尔塔拉蒙古自治州',
  44568. 'cp': [
  44569. 81.8481,
  44570. 44.6979
  44571. ],
  44572. 'childNum': 3
  44573. },
  44574. 'geometry': {
  44575. 'type': 'Polygon',
  44576. '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'],
  44577. 'encodeOffsets': [[
  44578. 84555,
  44579. 46311
  44580. ]]
  44581. }
  44582. },
  44583. {
  44584. 'type': 'Feature',
  44585. 'id': '6501',
  44586. 'properties': {
  44587. 'name': '乌鲁木齐市',
  44588. 'cp': [
  44589. 87.9236,
  44590. 43.5883
  44591. ],
  44592. 'childNum': 4
  44593. },
  44594. 'geometry': {
  44595. 'type': 'Polygon',
  44596. 'coordinates': ['@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆŚ@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô'],
  44597. 'encodeOffsets': [[
  44598. 88887,
  44599. 44146
  44600. ]]
  44601. }
  44602. },
  44603. {
  44604. 'type': 'Feature',
  44605. 'id': '6502',
  44606. 'properties': {
  44607. 'name': '克拉玛依市',
  44608. 'cp': [
  44609. 85.2869,
  44610. 45.5054
  44611. ],
  44612. 'childNum': 2
  44613. },
  44614. 'geometry': {
  44615. 'type': 'MultiPolygon',
  44616. 'coordinates': [
  44617. ['@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒaݚţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°'],
  44618. ['@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ']
  44619. ],
  44620. 'encodeOffsets': [
  44621. [[
  44622. 87424,
  44623. 47245
  44624. ]],
  44625. [[
  44626. 86817,
  44627. 45456
  44628. ]]
  44629. ]
  44630. }
  44631. },
  44632. {
  44633. 'type': 'Feature',
  44634. 'id': '659002',
  44635. 'properties': {
  44636. 'name': '阿拉尔市',
  44637. 'cp': [
  44638. 81.2769,
  44639. 40.6549
  44640. ],
  44641. 'childNum': 1
  44642. },
  44643. 'geometry': {
  44644. 'type': 'Polygon',
  44645. 'coordinates': ['@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ'],
  44646. 'encodeOffsets': [[
  44647. 83824,
  44648. 41929
  44649. ]]
  44650. }
  44651. },
  44652. {
  44653. 'type': 'Feature',
  44654. 'id': '659003',
  44655. 'properties': {
  44656. 'name': '图木舒克市',
  44657. 'cp': [
  44658. 79.1345,
  44659. 39.8749
  44660. ],
  44661. 'childNum': 1
  44662. },
  44663. 'geometry': {
  44664. 'type': 'Polygon',
  44665. 'coordinates': ['@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ'],
  44666. 'encodeOffsets': [[
  44667. 81496,
  44668. 40962
  44669. ]]
  44670. }
  44671. },
  44672. {
  44673. 'type': 'Feature',
  44674. 'id': '659004',
  44675. 'properties': {
  44676. 'name': '五家渠市',
  44677. 'cp': [
  44678. 87.5391,
  44679. 44.3024
  44680. ],
  44681. 'childNum': 1
  44682. },
  44683. 'geometry': {
  44684. 'type': 'Polygon',
  44685. 'coordinates': ['@@„çôÑlĕU»™¥ÝšUŗ™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ'],
  44686. 'encodeOffsets': [[
  44687. 89674,
  44688. 45636
  44689. ]]
  44690. }
  44691. },
  44692. {
  44693. 'type': 'Feature',
  44694. 'id': '659001',
  44695. 'properties': {
  44696. 'name': '石河子市',
  44697. 'cp': [
  44698. 86.0229,
  44699. 44.2914
  44700. ],
  44701. 'childNum': 1
  44702. },
  44703. 'geometry': {
  44704. 'type': 'Polygon',
  44705. 'coordinates': ['@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@'],
  44706. 'encodeOffsets': [[
  44707. 88178,
  44708. 45529
  44709. ]]
  44710. }
  44711. }
  44712. ],
  44713. 'UTF8Encoding': true
  44714. };
  44715. });define('echarts/util/mapData/geoJson/xi_zang_geo', [], function () {
  44716. return {
  44717. 'type': 'FeatureCollection',
  44718. 'features': [
  44719. {
  44720. 'type': 'Feature',
  44721. 'id': '5424',
  44722. 'properties': {
  44723. 'name': '那曲地区',
  44724. 'cp': [
  44725. 88.1982,
  44726. 33.3215
  44727. ],
  44728. 'childNum': 10
  44729. },
  44730. 'geometry': {
  44731. 'type': 'Polygon',
  44732. '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¤ƽĸƒÈ'],
  44733. 'encodeOffsets': [[
  44734. 88133,
  44735. 36721
  44736. ]]
  44737. }
  44738. },
  44739. {
  44740. 'type': 'Feature',
  44741. 'id': '5425',
  44742. 'properties': {
  44743. 'name': '阿里地区',
  44744. 'cp': [
  44745. 82.3645,
  44746. 32.7667
  44747. ],
  44748. 'childNum': 7
  44749. },
  44750. 'geometry': {
  44751. 'type': 'Polygon',
  44752. '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̼òƾĖŎ@ĢȂÑôÓĠĖʊšĊÔ'],
  44753. 'encodeOffsets': [[
  44754. 88133,
  44755. 36721
  44756. ]]
  44757. }
  44758. },
  44759. {
  44760. 'type': 'Feature',
  44761. 'id': '5423',
  44762. 'properties': {
  44763. 'name': '日喀则地区',
  44764. 'cp': [
  44765. 86.2427,
  44766. 29.5093
  44767. ],
  44768. 'childNum': 18
  44769. },
  44770. 'geometry': {
  44771. 'type': 'Polygon',
  44772. '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Þ¯¼'],
  44773. 'encodeOffsets': [[
  44774. 84117,
  44775. 30927
  44776. ]]
  44777. }
  44778. },
  44779. {
  44780. 'type': 'Feature',
  44781. 'id': '5426',
  44782. 'properties': {
  44783. 'name': '林芝地区',
  44784. 'cp': [
  44785. 95.4602,
  44786. 29.1138
  44787. ],
  44788. 'childNum': 7
  44789. },
  44790. 'geometry': {
  44791. 'type': 'Polygon',
  44792. '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'],
  44793. 'encodeOffsets': [[
  44794. 94737,
  44795. 30809
  44796. ]]
  44797. }
  44798. },
  44799. {
  44800. 'type': 'Feature',
  44801. 'id': '5421',
  44802. 'properties': {
  44803. 'name': '昌都地区',
  44804. 'cp': [
  44805. 97.0203,
  44806. 30.7068
  44807. ],
  44808. 'childNum': 11
  44809. },
  44810. 'geometry': {
  44811. 'type': 'Polygon',
  44812. '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œƾ°'],
  44813. 'encodeOffsets': [[
  44814. 97302,
  44815. 31917
  44816. ]]
  44817. }
  44818. },
  44819. {
  44820. 'type': 'Feature',
  44821. 'id': '5422',
  44822. 'properties': {
  44823. 'name': '山南地区',
  44824. 'cp': [
  44825. 92.2083,
  44826. 28.3392
  44827. ],
  44828. 'childNum': 12
  44829. },
  44830. 'geometry': {
  44831. 'type': 'Polygon',
  44832. '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¤'],
  44833. 'encodeOffsets': [[
  44834. 92363,
  44835. 29672
  44836. ]]
  44837. }
  44838. },
  44839. {
  44840. 'type': 'Feature',
  44841. 'id': '5401',
  44842. 'properties': {
  44843. 'name': '拉萨市',
  44844. 'cp': [
  44845. 91.1865,
  44846. 30.1465
  44847. ],
  44848. 'childNum': 8
  44849. },
  44850. 'geometry': {
  44851. 'type': 'Polygon',
  44852. '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'],
  44853. 'encodeOffsets': [[
  44854. 92059,
  44855. 30696
  44856. ]]
  44857. }
  44858. }
  44859. ],
  44860. 'UTF8Encoding': true
  44861. };
  44862. });define('echarts/util/mapData/geoJson/yun_nan_geo', [], function () {
  44863. return {
  44864. 'type': 'FeatureCollection',
  44865. 'features': [
  44866. {
  44867. 'type': 'Feature',
  44868. 'id': '5308',
  44869. 'properties': {
  44870. 'name': '普洱市',
  44871. 'cp': [
  44872. 100.7446,
  44873. 23.4229
  44874. ],
  44875. 'childNum': 10
  44876. },
  44877. 'geometry': {
  44878. 'type': 'Polygon',
  44879. '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'],
  44880. 'encodeOffsets': [[
  44881. 101903,
  44882. 23637
  44883. ]]
  44884. }
  44885. },
  44886. {
  44887. 'type': 'Feature',
  44888. 'id': '5325',
  44889. 'properties': {
  44890. 'name': '红河哈尼族彝族自治州',
  44891. 'cp': [
  44892. 103.0408,
  44893. 23.6041
  44894. ],
  44895. 'childNum': 13
  44896. },
  44897. 'geometry': {
  44898. 'type': 'Polygon',
  44899. '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ÝÞ'],
  44900. 'encodeOffsets': [[
  44901. 104243,
  44902. 23429
  44903. ]]
  44904. }
  44905. },
  44906. {
  44907. 'type': 'Feature',
  44908. 'id': '5326',
  44909. 'properties': {
  44910. 'name': '文山壮族苗族自治州',
  44911. 'cp': [
  44912. 104.8865,
  44913. 23.5712
  44914. ],
  44915. 'childNum': 8
  44916. },
  44917. 'geometry': {
  44918. 'type': 'Polygon',
  44919. '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'],
  44920. 'encodeOffsets': [[
  44921. 106504,
  44922. 25037
  44923. ]]
  44924. }
  44925. },
  44926. {
  44927. 'type': 'Feature',
  44928. 'id': '5303',
  44929. 'properties': {
  44930. 'name': '曲靖市',
  44931. 'cp': [
  44932. 103.9417,
  44933. 25.7025
  44934. ],
  44935. 'childNum': 9
  44936. },
  44937. 'geometry': {
  44938. 'type': 'Polygon',
  44939. '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'],
  44940. 'encodeOffsets': [[
  44941. 106099,
  44942. 27653
  44943. ]]
  44944. }
  44945. },
  44946. {
  44947. 'type': 'Feature',
  44948. 'id': '5323',
  44949. 'properties': {
  44950. 'name': '楚雄彝族自治州',
  44951. 'cp': [
  44952. 101.6016,
  44953. 25.3619
  44954. ],
  44955. 'childNum': 10
  44956. },
  44957. 'geometry': {
  44958. 'type': 'Polygon',
  44959. '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'],
  44960. 'encodeOffsets': [[
  44961. 103433,
  44962. 26196
  44963. ]]
  44964. }
  44965. },
  44966. {
  44967. 'type': 'Feature',
  44968. 'id': '5329',
  44969. 'properties': {
  44970. 'name': '大理白族自治州',
  44971. 'cp': [
  44972. 99.9536,
  44973. 25.6805
  44974. ],
  44975. 'childNum': 12
  44976. },
  44977. 'geometry': {
  44978. 'type': 'Polygon',
  44979. '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Ċ„Þ'],
  44980. 'encodeOffsets': [[
  44981. 101408,
  44982. 26770
  44983. ]]
  44984. }
  44985. },
  44986. {
  44987. 'type': 'Feature',
  44988. 'id': '5309',
  44989. 'properties': {
  44990. 'name': '临沧市',
  44991. 'cp': [
  44992. 99.613,
  44993. 24.0546
  44994. ],
  44995. 'childNum': 8
  44996. },
  44997. 'geometry': {
  44998. 'type': 'Polygon',
  44999. '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š'],
  45000. 'encodeOffsets': [[
  45001. 101251,
  45002. 24734
  45003. ]]
  45004. }
  45005. },
  45006. {
  45007. 'type': 'Feature',
  45008. 'id': '5334',
  45009. 'properties': {
  45010. 'name': '迪庆藏族自治州',
  45011. 'cp': [
  45012. 99.4592,
  45013. 27.9327
  45014. ],
  45015. 'childNum': 3
  45016. },
  45017. 'geometry': {
  45018. 'type': 'Polygon',
  45019. '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¯'],
  45020. 'encodeOffsets': [[
  45021. 102702,
  45022. 28401
  45023. ]]
  45024. }
  45025. },
  45026. {
  45027. 'type': 'Feature',
  45028. 'id': '5306',
  45029. 'properties': {
  45030. 'name': '昭通市',
  45031. 'cp': [
  45032. 104.0955,
  45033. 27.6031
  45034. ],
  45035. 'childNum': 11
  45036. },
  45037. 'geometry': {
  45038. 'type': 'Polygon',
  45039. '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@ó™'],
  45040. 'encodeOffsets': [[
  45041. 107787,
  45042. 28244
  45043. ]]
  45044. }
  45045. },
  45046. {
  45047. 'type': 'Feature',
  45048. 'id': '5301',
  45049. 'properties': {
  45050. 'name': '昆明市',
  45051. 'cp': [
  45052. 102.9199,
  45053. 25.4663
  45054. ],
  45055. 'childNum': 11
  45056. },
  45057. 'geometry': {
  45058. 'type': 'Polygon',
  45059. '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š'],
  45060. 'encodeOffsets': [[
  45061. 104828,
  45062. 25999
  45063. ]]
  45064. }
  45065. },
  45066. {
  45067. 'type': 'Feature',
  45068. 'id': '5307',
  45069. 'properties': {
  45070. 'name': '丽江市',
  45071. 'cp': [
  45072. 100.448,
  45073. 26.955
  45074. ],
  45075. 'childNum': 5
  45076. },
  45077. 'geometry': {
  45078. 'type': 'Polygon',
  45079. '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'],
  45080. 'encodeOffsets': [[
  45081. 101937,
  45082. 28227
  45083. ]]
  45084. }
  45085. },
  45086. {
  45087. 'type': 'Feature',
  45088. 'id': '5328',
  45089. 'properties': {
  45090. 'name': '西双版纳傣族自治州',
  45091. 'cp': [
  45092. 100.8984,
  45093. 21.8628
  45094. ],
  45095. 'childNum': 3
  45096. },
  45097. 'geometry': {
  45098. 'type': 'Polygon',
  45099. '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'],
  45100. 'encodeOffsets': [[
  45101. 102376,
  45102. 22579
  45103. ]]
  45104. }
  45105. },
  45106. {
  45107. 'type': 'Feature',
  45108. 'id': '5305',
  45109. 'properties': {
  45110. 'name': '保山市',
  45111. 'cp': [
  45112. 99.0637,
  45113. 24.9884
  45114. ],
  45115. 'childNum': 5
  45116. },
  45117. 'geometry': {
  45118. 'type': 'Polygon',
  45119. '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@ƒ¦'],
  45120. 'encodeOffsets': [[
  45121. 100440,
  45122. 25943
  45123. ]]
  45124. }
  45125. },
  45126. {
  45127. 'type': 'Feature',
  45128. 'id': '5304',
  45129. 'properties': {
  45130. 'name': '玉溪市',
  45131. 'cp': [
  45132. 101.9312,
  45133. 23.8898
  45134. ],
  45135. 'childNum': 9
  45136. },
  45137. 'geometry': {
  45138. 'type': 'Polygon',
  45139. '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@¦Ýþ'],
  45140. 'encodeOffsets': [[
  45141. 103703,
  45142. 24874
  45143. ]]
  45144. }
  45145. },
  45146. {
  45147. 'type': 'Feature',
  45148. 'id': '5333',
  45149. 'properties': {
  45150. 'name': '怒江傈僳族自治州',
  45151. 'cp': [
  45152. 99.1516,
  45153. 26.5594
  45154. ],
  45155. 'childNum': 4
  45156. },
  45157. 'geometry': {
  45158. 'type': 'Polygon',
  45159. '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'],
  45160. 'encodeOffsets': [[
  45161. 101071,
  45162. 28891
  45163. ]]
  45164. }
  45165. },
  45166. {
  45167. 'type': 'Feature',
  45168. 'id': '5331',
  45169. 'properties': {
  45170. 'name': '德宏傣族景颇族自治州',
  45171. 'cp': [
  45172. 98.1299,
  45173. 24.5874
  45174. ],
  45175. 'childNum': 5
  45176. },
  45177. 'geometry': {
  45178. 'type': 'Polygon',
  45179. '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'],
  45180. 'encodeOffsets': [[
  45181. 100440,
  45182. 25943
  45183. ]]
  45184. }
  45185. }
  45186. ],
  45187. 'UTF8Encoding': true
  45188. };
  45189. });define('echarts/util/mapData/geoJson/zhe_jiang_geo', [], function () {
  45190. return {
  45191. 'type': 'FeatureCollection',
  45192. 'features': [
  45193. {
  45194. 'type': 'Feature',
  45195. 'id': '3311',
  45196. 'properties': {
  45197. 'name': '丽水市',
  45198. 'cp': [
  45199. 119.5642,
  45200. 28.1854
  45201. ],
  45202. 'childNum': 9
  45203. },
  45204. 'geometry': {
  45205. 'type': 'Polygon',
  45206. '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@'],
  45207. 'encodeOffsets': [[
  45208. 121546,
  45209. 28992
  45210. ]]
  45211. }
  45212. },
  45213. {
  45214. 'type': 'Feature',
  45215. 'id': '3301',
  45216. 'properties': {
  45217. 'name': '杭州市',
  45218. 'cp': [
  45219. 119.5313,
  45220. 29.8773
  45221. ],
  45222. 'childNum': 6
  45223. },
  45224. 'geometry': {
  45225. 'type': 'Polygon',
  45226. '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'],
  45227. 'encodeOffsets': [[
  45228. 121185,
  45229. 30184
  45230. ]]
  45231. }
  45232. },
  45233. {
  45234. 'type': 'Feature',
  45235. 'id': '3303',
  45236. 'properties': {
  45237. 'name': '温州市',
  45238. 'cp': [
  45239. 120.498,
  45240. 27.8119
  45241. ],
  45242. 'childNum': 9
  45243. },
  45244. 'geometry': {
  45245. 'type': 'Polygon',
  45246. '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'],
  45247. 'encodeOffsets': [[
  45248. 122502,
  45249. 28334
  45250. ]]
  45251. }
  45252. },
  45253. {
  45254. 'type': 'Feature',
  45255. 'id': '3302',
  45256. 'properties': {
  45257. 'name': '宁波市',
  45258. 'cp': [
  45259. 121.5967,
  45260. 29.6466
  45261. ],
  45262. 'childNum': 6
  45263. },
  45264. 'geometry': {
  45265. 'type': 'Polygon',
  45266. '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š™è'],
  45267. 'encodeOffsets': [[
  45268. 123784,
  45269. 30977
  45270. ]]
  45271. }
  45272. },
  45273. {
  45274. 'type': 'Feature',
  45275. 'id': '3309',
  45276. 'properties': {
  45277. 'name': '舟山市',
  45278. 'cp': [
  45279. 122.2559,
  45280. 30.2234
  45281. ],
  45282. 'childNum': 3
  45283. },
  45284. 'geometry': {
  45285. 'type': 'Polygon',
  45286. '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Ž¯¼ŹĀ'],
  45287. 'encodeOffsets': [[
  45288. 124437,
  45289. 30983
  45290. ]]
  45291. }
  45292. },
  45293. {
  45294. 'type': 'Feature',
  45295. 'id': '3310',
  45296. 'properties': {
  45297. 'name': '台州市',
  45298. 'cp': [
  45299. 121.1353,
  45300. 28.6688
  45301. ],
  45302. 'childNum': 7
  45303. },
  45304. 'geometry': {
  45305. 'type': 'Polygon',
  45306. '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'],
  45307. 'encodeOffsets': [[
  45308. 123312,
  45309. 29526
  45310. ]]
  45311. }
  45312. },
  45313. {
  45314. 'type': 'Feature',
  45315. 'id': '3307',
  45316. 'properties': {
  45317. 'name': '金华市',
  45318. 'cp': [
  45319. 120.0037,
  45320. 29.1028
  45321. ],
  45322. 'childNum': 8
  45323. },
  45324. 'geometry': {
  45325. 'type': 'Polygon',
  45326. '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'],
  45327. 'encodeOffsets': [[
  45328. 122119,
  45329. 29948
  45330. ]]
  45331. }
  45332. },
  45333. {
  45334. 'type': 'Feature',
  45335. 'id': '3308',
  45336. 'properties': {
  45337. 'name': '衢州市',
  45338. 'cp': [
  45339. 118.6853,
  45340. 28.8666
  45341. ],
  45342. 'childNum': 5
  45343. },
  45344. 'geometry': {
  45345. 'type': 'Polygon',
  45346. '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'],
  45347. 'encodeOffsets': [[
  45348. 121185,
  45349. 30184
  45350. ]]
  45351. }
  45352. },
  45353. {
  45354. 'type': 'Feature',
  45355. 'id': '3306',
  45356. 'properties': {
  45357. 'name': '绍兴市',
  45358. 'cp': [
  45359. 120.564,
  45360. 29.7565
  45361. ],
  45362. 'childNum': 6
  45363. },
  45364. 'geometry': {
  45365. 'type': 'Polygon',
  45366. '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'],
  45367. 'encodeOffsets': [[
  45368. 122997,
  45369. 30561
  45370. ]]
  45371. }
  45372. },
  45373. {
  45374. 'type': 'Feature',
  45375. 'id': '3304',
  45376. 'properties': {
  45377. 'name': '嘉兴市',
  45378. 'cp': [
  45379. 120.9155,
  45380. 30.6354
  45381. ],
  45382. 'childNum': 6
  45383. },
  45384. 'geometry': {
  45385. 'type': 'Polygon',
  45386. '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‚'],
  45387. 'encodeOffsets': [[
  45388. 123233,
  45389. 31382
  45390. ]]
  45391. }
  45392. },
  45393. {
  45394. 'type': 'Feature',
  45395. 'id': '3305',
  45396. 'properties': {
  45397. 'name': '湖州市',
  45398. 'cp': [
  45399. 119.8608,
  45400. 30.7782
  45401. ],
  45402. 'childNum': 4
  45403. },
  45404. 'geometry': {
  45405. 'type': 'Polygon',
  45406. '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›'],
  45407. 'encodeOffsets': [[
  45408. 123379,
  45409. 31500
  45410. ]]
  45411. }
  45412. }
  45413. ],
  45414. 'UTF8Encoding': true
  45415. };
  45416. });define('echarts/chart/gauge', [
  45417. 'require',
  45418. './base',
  45419. '../util/shape/GaugePointer',
  45420. 'zrender/shape/Text',
  45421. 'zrender/shape/Line',
  45422. 'zrender/shape/Rectangle',
  45423. 'zrender/shape/Circle',
  45424. 'zrender/shape/Sector',
  45425. '../config',
  45426. '../util/ecData',
  45427. '../util/accMath',
  45428. 'zrender/tool/util',
  45429. '../chart'
  45430. ], function (require) {
  45431. var ChartBase = require('./base');
  45432. var GaugePointerShape = require('../util/shape/GaugePointer');
  45433. var TextShape = require('zrender/shape/Text');
  45434. var LineShape = require('zrender/shape/Line');
  45435. var RectangleShape = require('zrender/shape/Rectangle');
  45436. var CircleShape = require('zrender/shape/Circle');
  45437. var SectorShape = require('zrender/shape/Sector');
  45438. var ecConfig = require('../config');
  45439. ecConfig.gauge = {
  45440. zlevel: 0,
  45441. z: 2,
  45442. center: [
  45443. '50%',
  45444. '50%'
  45445. ],
  45446. clickable: true,
  45447. legendHoverLink: true,
  45448. radius: '75%',
  45449. startAngle: 225,
  45450. endAngle: -45,
  45451. min: 0,
  45452. max: 100,
  45453. splitNumber: 10,
  45454. axisLine: {
  45455. show: true,
  45456. lineStyle: {
  45457. color: [
  45458. [
  45459. 0.2,
  45460. '#228b22'
  45461. ],
  45462. [
  45463. 0.8,
  45464. '#48b'
  45465. ],
  45466. [
  45467. 1,
  45468. '#ff4500'
  45469. ]
  45470. ],
  45471. width: 30
  45472. }
  45473. },
  45474. axisTick: {
  45475. show: true,
  45476. splitNumber: 5,
  45477. length: 8,
  45478. lineStyle: {
  45479. color: '#eee',
  45480. width: 1,
  45481. type: 'solid'
  45482. }
  45483. },
  45484. axisLabel: {
  45485. show: true,
  45486. textStyle: { color: 'auto' }
  45487. },
  45488. splitLine: {
  45489. show: true,
  45490. length: 30,
  45491. lineStyle: {
  45492. color: '#eee',
  45493. width: 2,
  45494. type: 'solid'
  45495. }
  45496. },
  45497. pointer: {
  45498. show: true,
  45499. length: '80%',
  45500. width: 8,
  45501. color: 'auto'
  45502. },
  45503. title: {
  45504. show: true,
  45505. offsetCenter: [
  45506. 0,
  45507. '-40%'
  45508. ],
  45509. textStyle: {
  45510. color: '#333',
  45511. fontSize: 15
  45512. }
  45513. },
  45514. detail: {
  45515. show: true,
  45516. backgroundColor: 'rgba(0,0,0,0)',
  45517. borderWidth: 0,
  45518. borderColor: '#ccc',
  45519. width: 100,
  45520. height: 40,
  45521. offsetCenter: [
  45522. 0,
  45523. '40%'
  45524. ],
  45525. textStyle: {
  45526. color: 'auto',
  45527. fontSize: 30
  45528. }
  45529. }
  45530. };
  45531. var ecData = require('../util/ecData');
  45532. var accMath = require('../util/accMath');
  45533. var zrUtil = require('zrender/tool/util');
  45534. function Gauge(ecTheme, messageCenter, zr, option, myChart) {
  45535. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  45536. this.refresh(option);
  45537. }
  45538. Gauge.prototype = {
  45539. type: ecConfig.CHART_TYPE_GAUGE,
  45540. _buildShape: function () {
  45541. var series = this.series;
  45542. this._paramsMap = {};
  45543. for (var i = 0, l = series.length; i < l; i++) {
  45544. if (series[i].type === ecConfig.CHART_TYPE_GAUGE) {
  45545. series[i] = this.reformOption(series[i]);
  45546. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  45547. this._buildSingleGauge(i);
  45548. this.buildMark(i);
  45549. }
  45550. }
  45551. this.addShapeList();
  45552. },
  45553. _buildSingleGauge: function (seriesIndex) {
  45554. var serie = this.series[seriesIndex];
  45555. this._paramsMap[seriesIndex] = {
  45556. center: this.parseCenter(this.zr, serie.center),
  45557. radius: this.parseRadius(this.zr, serie.radius),
  45558. startAngle: serie.startAngle.toFixed(2) - 0,
  45559. endAngle: serie.endAngle.toFixed(2) - 0
  45560. };
  45561. this._paramsMap[seriesIndex].totalAngle = this._paramsMap[seriesIndex].startAngle - this._paramsMap[seriesIndex].endAngle;
  45562. this._colorMap(seriesIndex);
  45563. this._buildAxisLine(seriesIndex);
  45564. this._buildSplitLine(seriesIndex);
  45565. this._buildAxisTick(seriesIndex);
  45566. this._buildAxisLabel(seriesIndex);
  45567. this._buildPointer(seriesIndex);
  45568. this._buildTitle(seriesIndex);
  45569. this._buildDetail(seriesIndex);
  45570. },
  45571. _buildAxisLine: function (seriesIndex) {
  45572. var serie = this.series[seriesIndex];
  45573. if (!serie.axisLine.show) {
  45574. return;
  45575. }
  45576. var min = serie.min;
  45577. var total = serie.max - min;
  45578. var params = this._paramsMap[seriesIndex];
  45579. var center = params.center;
  45580. var startAngle = params.startAngle;
  45581. var totalAngle = params.totalAngle;
  45582. var colorArray = params.colorArray;
  45583. var lineStyle = serie.axisLine.lineStyle;
  45584. var lineWidth = this.parsePercent(lineStyle.width, params.radius[1]);
  45585. var r = params.radius[1];
  45586. var r0 = r - lineWidth;
  45587. var sectorShape;
  45588. var lastAngle = startAngle;
  45589. var newAngle;
  45590. for (var i = 0, l = colorArray.length; i < l; i++) {
  45591. newAngle = startAngle - totalAngle * (colorArray[i][0] - min) / total;
  45592. sectorShape = this._getSector(center, r0, r, newAngle, lastAngle, colorArray[i][1], lineStyle);
  45593. lastAngle = newAngle;
  45594. sectorShape._animationAdd = 'r';
  45595. ecData.set(sectorShape, 'seriesIndex', seriesIndex);
  45596. ecData.set(sectorShape, 'dataIndex', i);
  45597. this.shapeList.push(sectorShape);
  45598. }
  45599. },
  45600. _buildSplitLine: function (seriesIndex) {
  45601. var serie = this.series[seriesIndex];
  45602. if (!serie.splitLine.show) {
  45603. return;
  45604. }
  45605. var params = this._paramsMap[seriesIndex];
  45606. var splitNumber = serie.splitNumber;
  45607. var min = serie.min;
  45608. var total = serie.max - min;
  45609. var splitLine = serie.splitLine;
  45610. var length = this.parsePercent(splitLine.length, params.radius[1]);
  45611. var lineStyle = splitLine.lineStyle;
  45612. var color = lineStyle.color;
  45613. var center = params.center;
  45614. var startAngle = params.startAngle * Math.PI / 180;
  45615. var totalAngle = params.totalAngle * Math.PI / 180;
  45616. var r = params.radius[1];
  45617. var r0 = r - length;
  45618. var angle;
  45619. var sinAngle;
  45620. var cosAngle;
  45621. for (var i = 0; i <= splitNumber; i++) {
  45622. angle = startAngle - totalAngle / splitNumber * i;
  45623. sinAngle = Math.sin(angle);
  45624. cosAngle = Math.cos(angle);
  45625. this.shapeList.push(new LineShape({
  45626. zlevel: this.getZlevelBase(),
  45627. z: this.getZBase() + 1,
  45628. hoverable: false,
  45629. style: {
  45630. xStart: center[0] + cosAngle * r,
  45631. yStart: center[1] - sinAngle * r,
  45632. xEnd: center[0] + cosAngle * r0,
  45633. yEnd: center[1] - sinAngle * r0,
  45634. strokeColor: color === 'auto' ? this._getColor(seriesIndex, min + total / splitNumber * i) : color,
  45635. lineType: lineStyle.type,
  45636. lineWidth: lineStyle.width,
  45637. shadowColor: lineStyle.shadowColor,
  45638. shadowBlur: lineStyle.shadowBlur,
  45639. shadowOffsetX: lineStyle.shadowOffsetX,
  45640. shadowOffsetY: lineStyle.shadowOffsetY
  45641. }
  45642. }));
  45643. }
  45644. },
  45645. _buildAxisTick: function (seriesIndex) {
  45646. var serie = this.series[seriesIndex];
  45647. if (!serie.axisTick.show) {
  45648. return;
  45649. }
  45650. var params = this._paramsMap[seriesIndex];
  45651. var splitNumber = serie.splitNumber;
  45652. var min = serie.min;
  45653. var total = serie.max - min;
  45654. var axisTick = serie.axisTick;
  45655. var tickSplit = axisTick.splitNumber;
  45656. var length = this.parsePercent(axisTick.length, params.radius[1]);
  45657. var lineStyle = axisTick.lineStyle;
  45658. var color = lineStyle.color;
  45659. var center = params.center;
  45660. var startAngle = params.startAngle * Math.PI / 180;
  45661. var totalAngle = params.totalAngle * Math.PI / 180;
  45662. var r = params.radius[1];
  45663. var r0 = r - length;
  45664. var angle;
  45665. var sinAngle;
  45666. var cosAngle;
  45667. for (var i = 0, l = splitNumber * tickSplit; i <= l; i++) {
  45668. if (i % tickSplit === 0) {
  45669. continue;
  45670. }
  45671. angle = startAngle - totalAngle / l * i;
  45672. sinAngle = Math.sin(angle);
  45673. cosAngle = Math.cos(angle);
  45674. this.shapeList.push(new LineShape({
  45675. zlevel: this.getZlevelBase(),
  45676. z: this.getZBase() + 1,
  45677. hoverable: false,
  45678. style: {
  45679. xStart: center[0] + cosAngle * r,
  45680. yStart: center[1] - sinAngle * r,
  45681. xEnd: center[0] + cosAngle * r0,
  45682. yEnd: center[1] - sinAngle * r0,
  45683. strokeColor: color === 'auto' ? this._getColor(seriesIndex, min + total / l * i) : color,
  45684. lineType: lineStyle.type,
  45685. lineWidth: lineStyle.width,
  45686. shadowColor: lineStyle.shadowColor,
  45687. shadowBlur: lineStyle.shadowBlur,
  45688. shadowOffsetX: lineStyle.shadowOffsetX,
  45689. shadowOffsetY: lineStyle.shadowOffsetY
  45690. }
  45691. }));
  45692. }
  45693. },
  45694. _buildAxisLabel: function (seriesIndex) {
  45695. var serie = this.series[seriesIndex];
  45696. if (!serie.axisLabel.show) {
  45697. return;
  45698. }
  45699. var splitNumber = serie.splitNumber;
  45700. var min = serie.min;
  45701. var total = serie.max - min;
  45702. var textStyle = serie.axisLabel.textStyle;
  45703. var textFont = this.getFont(textStyle);
  45704. var color = textStyle.color;
  45705. var params = this._paramsMap[seriesIndex];
  45706. var center = params.center;
  45707. var startAngle = params.startAngle;
  45708. var totalAngle = params.totalAngle;
  45709. var r0 = params.radius[1] - this.parsePercent(serie.splitLine.length, params.radius[1]) - 5;
  45710. var angle;
  45711. var sinAngle;
  45712. var cosAngle;
  45713. var value;
  45714. for (var i = 0; i <= splitNumber; i++) {
  45715. value = accMath.accAdd(min, accMath.accMul(accMath.accDiv(total, splitNumber), i));
  45716. angle = startAngle - totalAngle / splitNumber * i;
  45717. sinAngle = Math.sin(angle * Math.PI / 180);
  45718. cosAngle = Math.cos(angle * Math.PI / 180);
  45719. angle = (angle + 360) % 360;
  45720. this.shapeList.push(new TextShape({
  45721. zlevel: this.getZlevelBase(),
  45722. z: this.getZBase() + 1,
  45723. hoverable: false,
  45724. style: {
  45725. x: center[0] + cosAngle * r0,
  45726. y: center[1] - sinAngle * r0,
  45727. color: color === 'auto' ? this._getColor(seriesIndex, value) : color,
  45728. text: this._getLabelText(serie.axisLabel.formatter, value),
  45729. textAlign: angle >= 110 && angle <= 250 ? 'left' : angle <= 70 || angle >= 290 ? 'right' : 'center',
  45730. textBaseline: angle >= 10 && angle <= 170 ? 'top' : angle >= 190 && angle <= 350 ? 'bottom' : 'middle',
  45731. textFont: textFont,
  45732. shadowColor: textStyle.shadowColor,
  45733. shadowBlur: textStyle.shadowBlur,
  45734. shadowOffsetX: textStyle.shadowOffsetX,
  45735. shadowOffsetY: textStyle.shadowOffsetY
  45736. }
  45737. }));
  45738. }
  45739. },
  45740. _buildPointer: function (seriesIndex) {
  45741. var serie = this.series[seriesIndex];
  45742. if (!serie.pointer.show) {
  45743. return;
  45744. }
  45745. var total = serie.max - serie.min;
  45746. var pointer = serie.pointer;
  45747. var params = this._paramsMap[seriesIndex];
  45748. var length = this.parsePercent(pointer.length, params.radius[1]);
  45749. var width = this.parsePercent(pointer.width, params.radius[1]);
  45750. var center = params.center;
  45751. var value = this._getValue(seriesIndex);
  45752. value = value < serie.max ? value : serie.max;
  45753. var angle = (params.startAngle - params.totalAngle / total * (value - serie.min)) * Math.PI / 180;
  45754. var color = pointer.color === 'auto' ? this._getColor(seriesIndex, value) : pointer.color;
  45755. var pointShape = new GaugePointerShape({
  45756. zlevel: this.getZlevelBase(),
  45757. z: this.getZBase() + 1,
  45758. clickable: this.query(serie, 'clickable'),
  45759. style: {
  45760. x: center[0],
  45761. y: center[1],
  45762. r: length,
  45763. startAngle: params.startAngle * Math.PI / 180,
  45764. angle: angle,
  45765. color: color,
  45766. width: width,
  45767. shadowColor: pointer.shadowColor,
  45768. shadowBlur: pointer.shadowBlur,
  45769. shadowOffsetX: pointer.shadowOffsetX,
  45770. shadowOffsetY: pointer.shadowOffsetY
  45771. },
  45772. highlightStyle: {
  45773. brushType: 'fill',
  45774. width: width > 2 ? 2 : width / 2,
  45775. color: '#fff'
  45776. }
  45777. });
  45778. ecData.pack(pointShape, this.series[seriesIndex], seriesIndex, this.series[seriesIndex].data[0], 0, this.series[seriesIndex].data[0].name, value);
  45779. this.shapeList.push(pointShape);
  45780. this.shapeList.push(new CircleShape({
  45781. zlevel: this.getZlevelBase(),
  45782. z: this.getZBase() + 2,
  45783. hoverable: false,
  45784. style: {
  45785. x: center[0],
  45786. y: center[1],
  45787. r: pointer.width / 2.5,
  45788. color: '#fff'
  45789. }
  45790. }));
  45791. },
  45792. _buildTitle: function (seriesIndex) {
  45793. var serie = this.series[seriesIndex];
  45794. if (!serie.title.show) {
  45795. return;
  45796. }
  45797. var data = serie.data[0];
  45798. var name = data.name != null ? data.name : '';
  45799. if (name !== '') {
  45800. var title = serie.title;
  45801. var offsetCenter = title.offsetCenter;
  45802. var textStyle = title.textStyle;
  45803. var textColor = textStyle.color;
  45804. var params = this._paramsMap[seriesIndex];
  45805. var x = params.center[0] + this.parsePercent(offsetCenter[0], params.radius[1]);
  45806. var y = params.center[1] + this.parsePercent(offsetCenter[1], params.radius[1]);
  45807. this.shapeList.push(new TextShape({
  45808. zlevel: this.getZlevelBase(),
  45809. z: this.getZBase() + (Math.abs(x - params.center[0]) + Math.abs(y - params.center[1]) < textStyle.fontSize * 2 ? 2 : 1),
  45810. hoverable: false,
  45811. style: {
  45812. x: x,
  45813. y: y,
  45814. color: textColor === 'auto' ? this._getColor(seriesIndex) : textColor,
  45815. text: name,
  45816. textAlign: 'center',
  45817. textFont: this.getFont(textStyle),
  45818. shadowColor: textStyle.shadowColor,
  45819. shadowBlur: textStyle.shadowBlur,
  45820. shadowOffsetX: textStyle.shadowOffsetX,
  45821. shadowOffsetY: textStyle.shadowOffsetY
  45822. }
  45823. }));
  45824. }
  45825. },
  45826. _buildDetail: function (seriesIndex) {
  45827. var serie = this.series[seriesIndex];
  45828. if (!serie.detail.show) {
  45829. return;
  45830. }
  45831. var detail = serie.detail;
  45832. var offsetCenter = detail.offsetCenter;
  45833. var color = detail.backgroundColor;
  45834. var textStyle = detail.textStyle;
  45835. var textColor = textStyle.color;
  45836. var params = this._paramsMap[seriesIndex];
  45837. var value = this._getValue(seriesIndex);
  45838. var x = params.center[0] - detail.width / 2 + this.parsePercent(offsetCenter[0], params.radius[1]);
  45839. var y = params.center[1] + this.parsePercent(offsetCenter[1], params.radius[1]);
  45840. this.shapeList.push(new RectangleShape({
  45841. zlevel: this.getZlevelBase(),
  45842. z: this.getZBase() + (Math.abs(x + detail.width / 2 - params.center[0]) + Math.abs(y + detail.height / 2 - params.center[1]) < textStyle.fontSize ? 2 : 1),
  45843. hoverable: false,
  45844. style: {
  45845. x: x,
  45846. y: y,
  45847. width: detail.width,
  45848. height: detail.height,
  45849. brushType: 'both',
  45850. color: color === 'auto' ? this._getColor(seriesIndex, value) : color,
  45851. lineWidth: detail.borderWidth,
  45852. strokeColor: detail.borderColor,
  45853. shadowColor: detail.shadowColor,
  45854. shadowBlur: detail.shadowBlur,
  45855. shadowOffsetX: detail.shadowOffsetX,
  45856. shadowOffsetY: detail.shadowOffsetY,
  45857. text: this._getLabelText(detail.formatter, value),
  45858. textFont: this.getFont(textStyle),
  45859. textPosition: 'inside',
  45860. textColor: textColor === 'auto' ? this._getColor(seriesIndex, value) : textColor
  45861. }
  45862. }));
  45863. },
  45864. _getValue: function (seriesIndex) {
  45865. return this.getDataFromOption(this.series[seriesIndex].data[0]);
  45866. },
  45867. _colorMap: function (seriesIndex) {
  45868. var serie = this.series[seriesIndex];
  45869. var min = serie.min;
  45870. var total = serie.max - min;
  45871. var color = serie.axisLine.lineStyle.color;
  45872. if (!(color instanceof Array)) {
  45873. color = [[
  45874. 1,
  45875. color
  45876. ]];
  45877. }
  45878. var colorArray = [];
  45879. for (var i = 0, l = color.length; i < l; i++) {
  45880. colorArray.push([
  45881. color[i][0] * total + min,
  45882. color[i][1]
  45883. ]);
  45884. }
  45885. this._paramsMap[seriesIndex].colorArray = colorArray;
  45886. },
  45887. _getColor: function (seriesIndex, value) {
  45888. if (value == null) {
  45889. value = this._getValue(seriesIndex);
  45890. }
  45891. var colorArray = this._paramsMap[seriesIndex].colorArray;
  45892. for (var i = 0, l = colorArray.length; i < l; i++) {
  45893. if (colorArray[i][0] >= value) {
  45894. return colorArray[i][1];
  45895. }
  45896. }
  45897. return colorArray[colorArray.length - 1][1];
  45898. },
  45899. _getSector: function (center, r0, r, startAngle, endAngle, color, lineStyle) {
  45900. return new SectorShape({
  45901. zlevel: this.getZlevelBase(),
  45902. z: this.getZBase(),
  45903. hoverable: false,
  45904. style: {
  45905. x: center[0],
  45906. y: center[1],
  45907. r0: r0,
  45908. r: r,
  45909. startAngle: startAngle,
  45910. endAngle: endAngle,
  45911. brushType: 'fill',
  45912. color: color,
  45913. shadowColor: lineStyle.shadowColor,
  45914. shadowBlur: lineStyle.shadowBlur,
  45915. shadowOffsetX: lineStyle.shadowOffsetX,
  45916. shadowOffsetY: lineStyle.shadowOffsetY
  45917. }
  45918. });
  45919. },
  45920. _getLabelText: function (formatter, value) {
  45921. if (formatter) {
  45922. if (typeof formatter === 'function') {
  45923. return formatter.call(this.myChart, value);
  45924. } else if (typeof formatter === 'string') {
  45925. return formatter.replace('{value}', value);
  45926. }
  45927. }
  45928. return value;
  45929. },
  45930. refresh: function (newOption) {
  45931. if (newOption) {
  45932. this.option = newOption;
  45933. this.series = newOption.series;
  45934. }
  45935. this.backupShapeList();
  45936. this._buildShape();
  45937. }
  45938. };
  45939. zrUtil.inherits(Gauge, ChartBase);
  45940. require('../chart').define('gauge', Gauge);
  45941. return Gauge;
  45942. });define('echarts/util/shape/GaugePointer', [
  45943. 'require',
  45944. 'zrender/shape/Base',
  45945. 'zrender/tool/util',
  45946. './normalIsCover'
  45947. ], function (require) {
  45948. var Base = require('zrender/shape/Base');
  45949. var zrUtil = require('zrender/tool/util');
  45950. function GaugePointer(options) {
  45951. Base.call(this, options);
  45952. }
  45953. GaugePointer.prototype = {
  45954. type: 'gauge-pointer',
  45955. buildPath: function (ctx, style) {
  45956. var r = style.r;
  45957. var width = style.width;
  45958. var angle = style.angle;
  45959. var x = style.x - Math.cos(angle) * width * (width >= r / 3 ? 1 : 2);
  45960. var y = style.y + Math.sin(angle) * width * (width >= r / 3 ? 1 : 2);
  45961. angle = style.angle - Math.PI / 2;
  45962. ctx.moveTo(x, y);
  45963. ctx.lineTo(style.x + Math.cos(angle) * width, style.y - Math.sin(angle) * width);
  45964. ctx.lineTo(style.x + Math.cos(style.angle) * r, style.y - Math.sin(style.angle) * r);
  45965. ctx.lineTo(style.x - Math.cos(angle) * width, style.y + Math.sin(angle) * width);
  45966. ctx.lineTo(x, y);
  45967. return;
  45968. },
  45969. getRect: function (style) {
  45970. if (style.__rect) {
  45971. return style.__rect;
  45972. }
  45973. var width = style.width * 2;
  45974. var xStart = style.x;
  45975. var yStart = style.y;
  45976. var xEnd = xStart + Math.cos(style.angle) * style.r;
  45977. var yEnd = yStart - Math.sin(style.angle) * style.r;
  45978. style.__rect = {
  45979. x: Math.min(xStart, xEnd) - width,
  45980. y: Math.min(yStart, yEnd) - width,
  45981. width: Math.abs(xStart - xEnd) + width,
  45982. height: Math.abs(yStart - yEnd) + width
  45983. };
  45984. return style.__rect;
  45985. },
  45986. isCover: require('./normalIsCover')
  45987. };
  45988. zrUtil.inherits(GaugePointer, Base);
  45989. return GaugePointer;
  45990. });define('echarts/chart/funnel', [
  45991. 'require',
  45992. './base',
  45993. 'zrender/shape/Text',
  45994. 'zrender/shape/Line',
  45995. 'zrender/shape/Polygon',
  45996. '../config',
  45997. '../util/ecData',
  45998. '../util/number',
  45999. 'zrender/tool/util',
  46000. 'zrender/tool/color',
  46001. 'zrender/tool/area',
  46002. '../chart'
  46003. ], function (require) {
  46004. var ChartBase = require('./base');
  46005. var TextShape = require('zrender/shape/Text');
  46006. var LineShape = require('zrender/shape/Line');
  46007. var PolygonShape = require('zrender/shape/Polygon');
  46008. var ecConfig = require('../config');
  46009. ecConfig.funnel = {
  46010. zlevel: 0,
  46011. z: 2,
  46012. clickable: true,
  46013. legendHoverLink: true,
  46014. x: 80,
  46015. y: 60,
  46016. x2: 80,
  46017. y2: 60,
  46018. min: 0,
  46019. max: 100,
  46020. minSize: '0%',
  46021. maxSize: '100%',
  46022. sort: 'descending',
  46023. gap: 0,
  46024. funnelAlign: 'center',
  46025. itemStyle: {
  46026. normal: {
  46027. borderColor: '#fff',
  46028. borderWidth: 1,
  46029. label: {
  46030. show: true,
  46031. position: 'outer'
  46032. },
  46033. labelLine: {
  46034. show: true,
  46035. length: 10,
  46036. lineStyle: {
  46037. width: 1,
  46038. type: 'solid'
  46039. }
  46040. }
  46041. },
  46042. emphasis: {
  46043. borderColor: 'rgba(0,0,0,0)',
  46044. borderWidth: 1,
  46045. label: { show: true },
  46046. labelLine: { show: true }
  46047. }
  46048. }
  46049. };
  46050. var ecData = require('../util/ecData');
  46051. var number = require('../util/number');
  46052. var zrUtil = require('zrender/tool/util');
  46053. var zrColor = require('zrender/tool/color');
  46054. var zrArea = require('zrender/tool/area');
  46055. function Funnel(ecTheme, messageCenter, zr, option, myChart) {
  46056. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  46057. this.refresh(option);
  46058. }
  46059. Funnel.prototype = {
  46060. type: ecConfig.CHART_TYPE_FUNNEL,
  46061. _buildShape: function () {
  46062. var series = this.series;
  46063. var legend = this.component.legend;
  46064. this._paramsMap = {};
  46065. this._selected = {};
  46066. this.selectedMap = {};
  46067. var serieName;
  46068. for (var i = 0, l = series.length; i < l; i++) {
  46069. if (series[i].type === ecConfig.CHART_TYPE_FUNNEL) {
  46070. series[i] = this.reformOption(series[i]);
  46071. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  46072. serieName = series[i].name || '';
  46073. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  46074. if (!this.selectedMap[serieName]) {
  46075. continue;
  46076. }
  46077. this._buildSingleFunnel(i);
  46078. this.buildMark(i);
  46079. }
  46080. }
  46081. this.addShapeList();
  46082. },
  46083. _buildSingleFunnel: function (seriesIndex) {
  46084. var legend = this.component.legend;
  46085. var serie = this.series[seriesIndex];
  46086. var data = this._mapData(seriesIndex);
  46087. var location = this._getLocation(seriesIndex);
  46088. this._paramsMap[seriesIndex] = {
  46089. location: location,
  46090. data: data
  46091. };
  46092. var itemName;
  46093. var total = 0;
  46094. var selectedData = [];
  46095. for (var i = 0, l = data.length; i < l; i++) {
  46096. itemName = data[i].name;
  46097. this.selectedMap[itemName] = legend ? legend.isSelected(itemName) : true;
  46098. if (this.selectedMap[itemName] && !isNaN(data[i].value)) {
  46099. selectedData.push(data[i]);
  46100. total++;
  46101. }
  46102. }
  46103. if (total === 0) {
  46104. return;
  46105. }
  46106. var funnelCase = this._buildFunnelCase(seriesIndex);
  46107. var align = serie.funnelAlign;
  46108. var gap = serie.gap;
  46109. var height = total > 1 ? (location.height - (total - 1) * gap) / total : location.height;
  46110. var width;
  46111. var lastY = location.y;
  46112. var lastWidth = serie.sort === 'descending' ? this._getItemWidth(seriesIndex, selectedData[0].value) : number.parsePercent(serie.minSize, location.width);
  46113. var next = serie.sort === 'descending' ? 1 : 0;
  46114. var centerX = location.centerX;
  46115. var pointList = [];
  46116. var x;
  46117. var polygon;
  46118. var lastPolygon;
  46119. for (var i = 0, l = selectedData.length; i < l; i++) {
  46120. itemName = selectedData[i].name;
  46121. if (this.selectedMap[itemName] && !isNaN(selectedData[i].value)) {
  46122. 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);
  46123. switch (align) {
  46124. case 'left':
  46125. x = location.x;
  46126. break;
  46127. case 'right':
  46128. x = location.x + location.width - lastWidth;
  46129. break;
  46130. default:
  46131. x = centerX - lastWidth / 2;
  46132. }
  46133. polygon = this._buildItem(seriesIndex, selectedData[i]._index, legend ? legend.getColor(itemName) : this.zr.getColor(selectedData[i]._index), x, lastY, lastWidth, width, height, align);
  46134. lastY += height + gap;
  46135. lastPolygon = polygon.style.pointList;
  46136. pointList.unshift([
  46137. lastPolygon[0][0] - 10,
  46138. lastPolygon[0][1]
  46139. ]);
  46140. pointList.push([
  46141. lastPolygon[1][0] + 10,
  46142. lastPolygon[1][1]
  46143. ]);
  46144. if (i === 0) {
  46145. if (lastWidth === 0) {
  46146. lastPolygon = pointList.pop();
  46147. align == 'center' && (pointList[0][0] += 10);
  46148. align == 'right' && (pointList[0][0] = lastPolygon[0]);
  46149. pointList[0][1] -= align == 'center' ? 10 : 15;
  46150. if (l == 1) {
  46151. lastPolygon = polygon.style.pointList;
  46152. }
  46153. } else {
  46154. pointList[pointList.length - 1][1] -= 5;
  46155. pointList[0][1] -= 5;
  46156. }
  46157. }
  46158. lastWidth = width;
  46159. }
  46160. }
  46161. if (funnelCase) {
  46162. pointList.unshift([
  46163. lastPolygon[3][0] - 10,
  46164. lastPolygon[3][1]
  46165. ]);
  46166. pointList.push([
  46167. lastPolygon[2][0] + 10,
  46168. lastPolygon[2][1]
  46169. ]);
  46170. if (lastWidth === 0) {
  46171. lastPolygon = pointList.pop();
  46172. align == 'center' && (pointList[0][0] += 10);
  46173. align == 'right' && (pointList[0][0] = lastPolygon[0]);
  46174. pointList[0][1] += align == 'center' ? 10 : 15;
  46175. } else {
  46176. pointList[pointList.length - 1][1] += 5;
  46177. pointList[0][1] += 5;
  46178. }
  46179. funnelCase.style.pointList = pointList;
  46180. }
  46181. },
  46182. _buildFunnelCase: function (seriesIndex) {
  46183. var serie = this.series[seriesIndex];
  46184. if (this.deepQuery([
  46185. serie,
  46186. this.option
  46187. ], 'calculable')) {
  46188. var location = this._paramsMap[seriesIndex].location;
  46189. var gap = 10;
  46190. var funnelCase = {
  46191. hoverable: false,
  46192. style: {
  46193. pointListd: [
  46194. [
  46195. location.x - gap,
  46196. location.y - gap
  46197. ],
  46198. [
  46199. location.x + location.width + gap,
  46200. location.y - gap
  46201. ],
  46202. [
  46203. location.x + location.width + gap,
  46204. location.y + location.height + gap
  46205. ],
  46206. [
  46207. location.x - gap,
  46208. location.y + location.height + gap
  46209. ]
  46210. ],
  46211. brushType: 'stroke',
  46212. lineWidth: 1,
  46213. strokeColor: serie.calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor
  46214. }
  46215. };
  46216. ecData.pack(funnelCase, serie, seriesIndex, undefined, -1);
  46217. this.setCalculable(funnelCase);
  46218. funnelCase = new PolygonShape(funnelCase);
  46219. this.shapeList.push(funnelCase);
  46220. return funnelCase;
  46221. }
  46222. },
  46223. _getLocation: function (seriesIndex) {
  46224. var gridOption = this.series[seriesIndex];
  46225. var zrWidth = this.zr.getWidth();
  46226. var zrHeight = this.zr.getHeight();
  46227. var x = this.parsePercent(gridOption.x, zrWidth);
  46228. var y = this.parsePercent(gridOption.y, zrHeight);
  46229. var width = gridOption.width == null ? zrWidth - x - this.parsePercent(gridOption.x2, zrWidth) : this.parsePercent(gridOption.width, zrWidth);
  46230. return {
  46231. x: x,
  46232. y: y,
  46233. width: width,
  46234. height: gridOption.height == null ? zrHeight - y - this.parsePercent(gridOption.y2, zrHeight) : this.parsePercent(gridOption.height, zrHeight),
  46235. centerX: x + width / 2
  46236. };
  46237. },
  46238. _mapData: function (seriesIndex) {
  46239. var serie = this.series[seriesIndex];
  46240. var funnelData = zrUtil.clone(serie.data);
  46241. for (var i = 0, l = funnelData.length; i < l; i++) {
  46242. funnelData[i]._index = i;
  46243. }
  46244. function numDescending(a, b) {
  46245. if (a.value === '-') {
  46246. return 1;
  46247. } else if (b.value === '-') {
  46248. return -1;
  46249. }
  46250. return b.value - a.value;
  46251. }
  46252. function numAscending(a, b) {
  46253. return -numDescending(a, b);
  46254. }
  46255. if (serie.sort != 'none') {
  46256. funnelData.sort(serie.sort === 'descending' ? numDescending : numAscending);
  46257. }
  46258. return funnelData;
  46259. },
  46260. _buildItem: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
  46261. var series = this.series;
  46262. var serie = series[seriesIndex];
  46263. var data = serie.data[dataIndex];
  46264. var polygon = this.getPolygon(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
  46265. ecData.pack(polygon, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
  46266. this.shapeList.push(polygon);
  46267. var label = this.getLabel(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
  46268. ecData.pack(label, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
  46269. this.shapeList.push(label);
  46270. if (!this._needLabel(serie, data, false)) {
  46271. label.invisible = true;
  46272. }
  46273. var labelLine = this.getLabelLine(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
  46274. this.shapeList.push(labelLine);
  46275. if (!this._needLabelLine(serie, data, false)) {
  46276. labelLine.invisible = true;
  46277. }
  46278. var polygonHoverConnect = [];
  46279. var labelHoverConnect = [];
  46280. if (this._needLabelLine(serie, data, true)) {
  46281. polygonHoverConnect.push(labelLine.id);
  46282. labelHoverConnect.push(labelLine.id);
  46283. }
  46284. if (this._needLabel(serie, data, true)) {
  46285. polygonHoverConnect.push(label.id);
  46286. labelHoverConnect.push(polygon.id);
  46287. }
  46288. polygon.hoverConnect = polygonHoverConnect;
  46289. label.hoverConnect = labelHoverConnect;
  46290. return polygon;
  46291. },
  46292. _getItemWidth: function (seriesIndex, value) {
  46293. var serie = this.series[seriesIndex];
  46294. var location = this._paramsMap[seriesIndex].location;
  46295. var min = serie.min;
  46296. var max = serie.max;
  46297. var minSize = number.parsePercent(serie.minSize, location.width);
  46298. var maxSize = number.parsePercent(serie.maxSize, location.width);
  46299. return (value - min) * (maxSize - minSize) / (max - min) + minSize;
  46300. },
  46301. getPolygon: function (seriesIndex, dataIndex, defaultColor, xLT, y, topWidth, bottomWidth, height, align) {
  46302. var serie = this.series[seriesIndex];
  46303. var data = serie.data[dataIndex];
  46304. var queryTarget = [
  46305. data,
  46306. serie
  46307. ];
  46308. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  46309. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  46310. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  46311. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  46312. var xLB;
  46313. switch (align) {
  46314. case 'left':
  46315. xLB = xLT;
  46316. break;
  46317. case 'right':
  46318. xLB = xLT + (topWidth - bottomWidth);
  46319. break;
  46320. default:
  46321. xLB = xLT + (topWidth - bottomWidth) / 2;
  46322. break;
  46323. }
  46324. var polygon = {
  46325. zlevel: this.getZlevelBase(),
  46326. z: this.getZBase(),
  46327. clickable: this.deepQuery(queryTarget, 'clickable'),
  46328. style: {
  46329. pointList: [
  46330. [
  46331. xLT,
  46332. y
  46333. ],
  46334. [
  46335. xLT + topWidth,
  46336. y
  46337. ],
  46338. [
  46339. xLB + bottomWidth,
  46340. y + height
  46341. ],
  46342. [
  46343. xLB,
  46344. y + height
  46345. ]
  46346. ],
  46347. brushType: 'both',
  46348. color: normalColor,
  46349. lineWidth: normal.borderWidth,
  46350. strokeColor: normal.borderColor
  46351. },
  46352. highlightStyle: {
  46353. color: emphasisColor,
  46354. lineWidth: emphasis.borderWidth,
  46355. strokeColor: emphasis.borderColor
  46356. }
  46357. };
  46358. if (this.deepQuery([
  46359. data,
  46360. serie,
  46361. this.option
  46362. ], 'calculable')) {
  46363. this.setCalculable(polygon);
  46364. polygon.draggable = true;
  46365. }
  46366. return new PolygonShape(polygon);
  46367. },
  46368. getLabel: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
  46369. var serie = this.series[seriesIndex];
  46370. var data = serie.data[dataIndex];
  46371. var location = this._paramsMap[seriesIndex].location;
  46372. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  46373. var status = 'normal';
  46374. var labelControl = itemStyle[status].label;
  46375. var textStyle = labelControl.textStyle || {};
  46376. var lineLength = itemStyle[status].labelLine.length;
  46377. var text = this.getLabelText(seriesIndex, dataIndex, status);
  46378. var textFont = this.getFont(textStyle);
  46379. var textAlign;
  46380. var textColor = defaultColor;
  46381. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  46382. if (labelControl.position === 'inner' || labelControl.position === 'inside' || labelControl.position === 'center') {
  46383. textAlign = align;
  46384. textColor = Math.max(topWidth, bottomWidth) / 2 > zrArea.getTextWidth(text, textFont) ? '#fff' : zrColor.reverse(defaultColor);
  46385. } else if (labelControl.position === 'left') {
  46386. textAlign = 'right';
  46387. } else {
  46388. textAlign = 'left';
  46389. }
  46390. var textShape = {
  46391. zlevel: this.getZlevelBase(),
  46392. z: this.getZBase() + 1,
  46393. style: {
  46394. x: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  46395. y: y + height / 2,
  46396. color: textStyle.color || textColor,
  46397. text: text,
  46398. textAlign: textStyle.align || textAlign,
  46399. textBaseline: textStyle.baseline || 'middle',
  46400. textFont: textFont
  46401. }
  46402. };
  46403. status = 'emphasis';
  46404. labelControl = itemStyle[status].label || labelControl;
  46405. textStyle = labelControl.textStyle || textStyle;
  46406. lineLength = itemStyle[status].labelLine.length || lineLength;
  46407. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  46408. text = this.getLabelText(seriesIndex, dataIndex, status);
  46409. textFont = this.getFont(textStyle);
  46410. textColor = defaultColor;
  46411. if (labelControl.position === 'inner' || labelControl.position === 'inside' || labelControl.position === 'center') {
  46412. textAlign = align;
  46413. textColor = Math.max(topWidth, bottomWidth) / 2 > zrArea.getTextWidth(text, textFont) ? '#fff' : zrColor.reverse(defaultColor);
  46414. } else if (labelControl.position === 'left') {
  46415. textAlign = 'right';
  46416. } else {
  46417. textAlign = 'left';
  46418. }
  46419. textShape.highlightStyle = {
  46420. x: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  46421. color: textStyle.color || textColor,
  46422. text: text,
  46423. textAlign: textStyle.align || textAlign,
  46424. textFont: textFont,
  46425. brushType: 'fill'
  46426. };
  46427. return new TextShape(textShape);
  46428. },
  46429. getLabelText: function (seriesIndex, dataIndex, status) {
  46430. var series = this.series;
  46431. var serie = series[seriesIndex];
  46432. var data = serie.data[dataIndex];
  46433. var formatter = this.deepQuery([
  46434. data,
  46435. serie
  46436. ], 'itemStyle.' + status + '.label.formatter');
  46437. if (formatter) {
  46438. if (typeof formatter === 'function') {
  46439. return formatter.call(this.myChart, {
  46440. seriesIndex: seriesIndex,
  46441. seriesName: serie.name || '',
  46442. series: serie,
  46443. dataIndex: dataIndex,
  46444. data: data,
  46445. name: data.name,
  46446. value: data.value
  46447. });
  46448. } else if (typeof formatter === 'string') {
  46449. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', serie.name).replace('{b0}', data.name).replace('{c0}', data.value);
  46450. return formatter;
  46451. }
  46452. } else {
  46453. return data.name;
  46454. }
  46455. },
  46456. getLabelLine: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
  46457. var serie = this.series[seriesIndex];
  46458. var data = serie.data[dataIndex];
  46459. var location = this._paramsMap[seriesIndex].location;
  46460. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  46461. var status = 'normal';
  46462. var labelLineControl = itemStyle[status].labelLine;
  46463. var lineLength = itemStyle[status].labelLine.length;
  46464. var lineStyle = labelLineControl.lineStyle || {};
  46465. var labelControl = itemStyle[status].label;
  46466. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  46467. var lineShape = {
  46468. zlevel: this.getZlevelBase(),
  46469. z: this.getZBase() + 1,
  46470. hoverable: false,
  46471. style: {
  46472. xStart: this._getLabelLineStartPoint(x, location, topWidth, bottomWidth, align),
  46473. yStart: y + height / 2,
  46474. xEnd: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  46475. yEnd: y + height / 2,
  46476. strokeColor: lineStyle.color || defaultColor,
  46477. lineType: lineStyle.type,
  46478. lineWidth: lineStyle.width
  46479. }
  46480. };
  46481. status = 'emphasis';
  46482. labelLineControl = itemStyle[status].labelLine || labelLineControl;
  46483. lineLength = itemStyle[status].labelLine.length || lineLength;
  46484. lineStyle = labelLineControl.lineStyle || lineStyle;
  46485. labelControl = itemStyle[status].label || labelControl;
  46486. labelControl.position = labelControl.position;
  46487. lineShape.highlightStyle = {
  46488. xEnd: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  46489. strokeColor: lineStyle.color || defaultColor,
  46490. lineType: lineStyle.type,
  46491. lineWidth: lineStyle.width
  46492. };
  46493. return new LineShape(lineShape);
  46494. },
  46495. _getLabelPoint: function (position, x, location, topWidth, bottomWidth, lineLength, align) {
  46496. position = position === 'inner' || position === 'inside' ? 'center' : position;
  46497. switch (position) {
  46498. case 'center':
  46499. return align == 'center' ? x + topWidth / 2 : align == 'left' ? x + 10 : x + topWidth - 10;
  46500. case 'left':
  46501. if (lineLength === 'auto') {
  46502. return location.x - 10;
  46503. } else {
  46504. return align == 'center' ? location.centerX - Math.max(topWidth, bottomWidth) / 2 - lineLength : align == 'right' ? x - (topWidth < bottomWidth ? bottomWidth - topWidth : 0) - lineLength : location.x - lineLength;
  46505. }
  46506. break;
  46507. default:
  46508. if (lineLength === 'auto') {
  46509. return location.x + location.width + 10;
  46510. } else {
  46511. return align == 'center' ? location.centerX + Math.max(topWidth, bottomWidth) / 2 + lineLength : align == 'right' ? location.x + location.width + lineLength : x + Math.max(topWidth, bottomWidth) + lineLength;
  46512. }
  46513. }
  46514. },
  46515. _getLabelLineStartPoint: function (x, location, topWidth, bottomWidth, align) {
  46516. return align == 'center' ? location.centerX : topWidth < bottomWidth ? x + Math.min(topWidth, bottomWidth) / 2 : x + Math.max(topWidth, bottomWidth) / 2;
  46517. },
  46518. _needLabel: function (serie, data, isEmphasis) {
  46519. return this.deepQuery([
  46520. data,
  46521. serie
  46522. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.label.show');
  46523. },
  46524. _needLabelLine: function (serie, data, isEmphasis) {
  46525. return this.deepQuery([
  46526. data,
  46527. serie
  46528. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.labelLine.show');
  46529. },
  46530. refresh: function (newOption) {
  46531. if (newOption) {
  46532. this.option = newOption;
  46533. this.series = newOption.series;
  46534. }
  46535. this.backupShapeList();
  46536. this._buildShape();
  46537. }
  46538. };
  46539. zrUtil.inherits(Funnel, ChartBase);
  46540. require('../chart').define('funnel', Funnel);
  46541. return Funnel;
  46542. });define('echarts/chart/eventRiver', [
  46543. 'require',
  46544. './base',
  46545. '../layout/eventRiver',
  46546. 'zrender/shape/Polygon',
  46547. '../component/axis',
  46548. '../component/grid',
  46549. '../component/dataZoom',
  46550. '../config',
  46551. '../util/ecData',
  46552. '../util/date',
  46553. 'zrender/tool/util',
  46554. 'zrender/tool/color',
  46555. '../chart'
  46556. ], function (require) {
  46557. var ChartBase = require('./base');
  46558. var eventRiverLayout = require('../layout/eventRiver');
  46559. var PolygonShape = require('zrender/shape/Polygon');
  46560. require('../component/axis');
  46561. require('../component/grid');
  46562. require('../component/dataZoom');
  46563. var ecConfig = require('../config');
  46564. ecConfig.eventRiver = {
  46565. zlevel: 0,
  46566. z: 2,
  46567. clickable: true,
  46568. legendHoverLink: true,
  46569. itemStyle: {
  46570. normal: {
  46571. borderColor: 'rgba(0,0,0,0)',
  46572. borderWidth: 1,
  46573. label: {
  46574. show: true,
  46575. position: 'inside',
  46576. formatter: '{b}'
  46577. }
  46578. },
  46579. emphasis: {
  46580. borderColor: 'rgba(0,0,0,0)',
  46581. borderWidth: 1,
  46582. label: { show: true }
  46583. }
  46584. }
  46585. };
  46586. var ecData = require('../util/ecData');
  46587. var ecDate = require('../util/date');
  46588. var zrUtil = require('zrender/tool/util');
  46589. var zrColor = require('zrender/tool/color');
  46590. function EventRiver(ecTheme, messageCenter, zr, option, myChart) {
  46591. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  46592. var self = this;
  46593. self._ondragend = function () {
  46594. self.isDragend = true;
  46595. };
  46596. this.refresh(option);
  46597. }
  46598. EventRiver.prototype = {
  46599. type: ecConfig.CHART_TYPE_EVENTRIVER,
  46600. _buildShape: function () {
  46601. var series = this.series;
  46602. this.selectedMap = {};
  46603. this._dataPreprocessing();
  46604. var legend = this.component.legend;
  46605. var eventRiverSeries = [];
  46606. for (var i = 0; i < series.length; i++) {
  46607. if (series[i].type === this.type) {
  46608. series[i] = this.reformOption(series[i]);
  46609. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  46610. var serieName = series[i].name || '';
  46611. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  46612. if (!this.selectedMap[serieName]) {
  46613. continue;
  46614. }
  46615. this.buildMark(i);
  46616. eventRiverSeries.push(this.series[i]);
  46617. }
  46618. }
  46619. eventRiverLayout(eventRiverSeries, this._intervalX, this.component.grid.getArea());
  46620. this._drawEventRiver();
  46621. this.addShapeList();
  46622. },
  46623. _dataPreprocessing: function () {
  46624. var series = this.series;
  46625. var xAxis;
  46626. var evolutionList;
  46627. for (var i = 0, iLen = series.length; i < iLen; i++) {
  46628. if (series[i].type === this.type) {
  46629. xAxis = this.component.xAxis.getAxis(series[i].xAxisIndex || 0);
  46630. for (var j = 0, jLen = series[i].data.length; j < jLen; j++) {
  46631. evolutionList = series[i].data[j].evolution;
  46632. for (var k = 0, kLen = evolutionList.length; k < kLen; k++) {
  46633. evolutionList[k].timeScale = xAxis.getCoord(ecDate.getNewDate(evolutionList[k].time) - 0);
  46634. evolutionList[k].valueScale = Math.pow(evolutionList[k].value, 0.8);
  46635. }
  46636. }
  46637. }
  46638. }
  46639. this._intervalX = Math.round(this.component.grid.getWidth() / 40);
  46640. },
  46641. _drawEventRiver: function () {
  46642. var series = this.series;
  46643. for (var i = 0; i < series.length; i++) {
  46644. var serieName = series[i].name || '';
  46645. if (series[i].type === this.type && this.selectedMap[serieName]) {
  46646. for (var j = 0; j < series[i].data.length; j++) {
  46647. this._drawEventBubble(series[i].data[j], i, j);
  46648. }
  46649. }
  46650. }
  46651. },
  46652. _drawEventBubble: function (oneEvent, seriesIndex, dataIndex) {
  46653. var series = this.series;
  46654. var serie = series[seriesIndex];
  46655. var serieName = serie.name || '';
  46656. var data = serie.data[dataIndex];
  46657. var queryTarget = [
  46658. data,
  46659. serie
  46660. ];
  46661. var legend = this.component.legend;
  46662. var defaultColor = legend ? legend.getColor(serieName) : this.zr.getColor(seriesIndex);
  46663. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  46664. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  46665. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  46666. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  46667. var pts = this._calculateControlPoints(oneEvent);
  46668. var eventBubbleShape = {
  46669. zlevel: this.getZlevelBase(),
  46670. z: this.getZBase(),
  46671. clickable: this.deepQuery(queryTarget, 'clickable'),
  46672. style: {
  46673. pointList: pts,
  46674. smooth: 'spline',
  46675. brushType: 'both',
  46676. lineJoin: 'round',
  46677. color: normalColor,
  46678. lineWidth: normal.borderWidth,
  46679. strokeColor: normal.borderColor
  46680. },
  46681. highlightStyle: {
  46682. color: emphasisColor,
  46683. lineWidth: emphasis.borderWidth,
  46684. strokeColor: emphasis.borderColor
  46685. },
  46686. draggable: 'vertical',
  46687. ondragend: this._ondragend
  46688. };
  46689. eventBubbleShape = new PolygonShape(eventBubbleShape);
  46690. this.addLabel(eventBubbleShape, serie, data, oneEvent.name);
  46691. ecData.pack(eventBubbleShape, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
  46692. this.shapeList.push(eventBubbleShape);
  46693. },
  46694. _calculateControlPoints: function (oneEvent) {
  46695. var intervalX = this._intervalX;
  46696. var posY = oneEvent.y;
  46697. var evolution = oneEvent.evolution;
  46698. var n = evolution.length;
  46699. if (n < 1) {
  46700. return;
  46701. }
  46702. var time = [];
  46703. var value = [];
  46704. for (var i = 0; i < n; i++) {
  46705. time.push(evolution[i].timeScale);
  46706. value.push(evolution[i].valueScale);
  46707. }
  46708. var pts = [];
  46709. pts.push([
  46710. time[0],
  46711. posY
  46712. ]);
  46713. var i = 0;
  46714. for (i = 0; i < n - 1; i++) {
  46715. pts.push([
  46716. (time[i] + time[i + 1]) / 2,
  46717. value[i] / -2 + posY
  46718. ]);
  46719. }
  46720. pts.push([
  46721. (time[i] + (time[i] + intervalX)) / 2,
  46722. value[i] / -2 + posY
  46723. ]);
  46724. pts.push([
  46725. time[i] + intervalX,
  46726. posY
  46727. ]);
  46728. pts.push([
  46729. (time[i] + (time[i] + intervalX)) / 2,
  46730. value[i] / 2 + posY
  46731. ]);
  46732. for (i = n - 1; i > 0; i--) {
  46733. pts.push([
  46734. (time[i] + time[i - 1]) / 2,
  46735. value[i - 1] / 2 + posY
  46736. ]);
  46737. }
  46738. return pts;
  46739. },
  46740. ondragend: function (param, status) {
  46741. if (!this.isDragend || !param.target) {
  46742. return;
  46743. }
  46744. status.dragOut = true;
  46745. status.dragIn = true;
  46746. status.needRefresh = false;
  46747. this.isDragend = false;
  46748. },
  46749. refresh: function (newOption) {
  46750. if (newOption) {
  46751. this.option = newOption;
  46752. this.series = newOption.series;
  46753. }
  46754. this.backupShapeList();
  46755. this._buildShape();
  46756. }
  46757. };
  46758. zrUtil.inherits(EventRiver, ChartBase);
  46759. require('../chart').define('eventRiver', EventRiver);
  46760. return EventRiver;
  46761. });define('echarts/layout/eventRiver', ['require'], function (require) {
  46762. function eventRiverLayout(series, intervalX, area) {
  46763. var space = 5;
  46764. var scale = intervalX;
  46765. function importanceSort(a, b) {
  46766. var x = a.importance;
  46767. var y = b.importance;
  46768. return x > y ? -1 : x < y ? 1 : 0;
  46769. }
  46770. function indexOf(array, value) {
  46771. if (array.indexOf) {
  46772. return array.indexOf(value);
  46773. }
  46774. for (var i = 0, len = array.length; i < len; i++) {
  46775. if (array[i] === value) {
  46776. return i;
  46777. }
  46778. }
  46779. return -1;
  46780. }
  46781. for (var i = 0; i < series.length; i++) {
  46782. for (var j = 0; j < series[i].data.length; j++) {
  46783. if (series[i].data[j].weight == null) {
  46784. series[i].data[j].weight = 1;
  46785. }
  46786. var importance = 0;
  46787. for (var k = 0; k < series[i].data[j].evolution.length; k++) {
  46788. importance += series[i].data[j].evolution[k].valueScale;
  46789. }
  46790. series[i].data[j].importance = importance * series[i].data[j].weight;
  46791. }
  46792. series[i].data.sort(importanceSort);
  46793. }
  46794. for (var i = 0; i < series.length; i++) {
  46795. if (series[i].weight == null) {
  46796. series[i].weight = 1;
  46797. }
  46798. var importance = 0;
  46799. for (var j = 0; j < series[i].data.length; j++) {
  46800. importance += series[i].data[j].weight;
  46801. }
  46802. series[i].importance = importance * series[i].weight;
  46803. }
  46804. series.sort(importanceSort);
  46805. var minTime = Number.MAX_VALUE;
  46806. var maxTime = 0;
  46807. for (var i = 0; i < series.length; i++) {
  46808. for (var j = 0; j < series[i].data.length; j++) {
  46809. for (var k = 0; k < series[i].data[j].evolution.length; k++) {
  46810. var time = series[i].data[j].evolution[k].timeScale;
  46811. minTime = Math.min(minTime, time);
  46812. maxTime = Math.max(maxTime, time);
  46813. }
  46814. }
  46815. }
  46816. var root = segmentTreeBuild(Math.floor(minTime), Math.ceil(maxTime));
  46817. var totalMaxY = 0;
  46818. for (var i = 0; i < series.length; i++) {
  46819. for (var j = 0; j < series[i].data.length; j++) {
  46820. var e = series[i].data[j];
  46821. e.time = [];
  46822. e.value = [];
  46823. for (var k = 0; k < series[i].data[j].evolution.length; k++) {
  46824. e.time.push(series[i].data[j].evolution[k].timeScale);
  46825. e.value.push(series[i].data[j].evolution[k].valueScale);
  46826. }
  46827. var mxIndex = indexOf(e.value, Math.max.apply(Math, e.value));
  46828. var maxY = segmentTreeQuery(root, e.time[mxIndex], e.time[mxIndex + 1]);
  46829. var k = 0;
  46830. e.y = maxY + e.value[mxIndex] / 2 + space;
  46831. for (k = 0; k < e.time.length - 1; k++) {
  46832. var curMaxY = segmentTreeQuery(root, e.time[k], e.time[k + 1]);
  46833. if (e.y - e.value[k] / 2 - space < curMaxY) {
  46834. e.y = curMaxY + e.value[k] / 2 + space;
  46835. }
  46836. }
  46837. var curMaxY = segmentTreeQuery(root, e.time[k], e.time[k] + scale);
  46838. if (e.y - e.value[k] / 2 - space < curMaxY) {
  46839. e.y = curMaxY + e.value[k] / 2 + space;
  46840. }
  46841. series[i].y = e.y;
  46842. totalMaxY = Math.max(totalMaxY, e.y + e.value[mxIndex] / 2);
  46843. for (k = 0; k < e.time.length - 1; k++) {
  46844. segmentTreeInsert(root, e.time[k], e.time[k + 1], e.y + e.value[k] / 2);
  46845. }
  46846. segmentTreeInsert(root, e.time[k], e.time[k] + scale, e.y + e.value[k] / 2);
  46847. }
  46848. }
  46849. scaleY(series, area, totalMaxY, space);
  46850. }
  46851. function scaleY(series, area, maxY, space) {
  46852. var yBase = area.y;
  46853. var yScale = (area.height - space) / maxY;
  46854. for (var i = 0; i < series.length; i++) {
  46855. series[i].y = series[i].y * yScale + yBase;
  46856. var eventList = series[i].data;
  46857. for (var j = 0; j < eventList.length; j++) {
  46858. eventList[j].y = eventList[j].y * yScale + yBase;
  46859. var evolutionList = eventList[j].evolution;
  46860. for (var k = 0; k < evolutionList.length; k++) {
  46861. evolutionList[k].valueScale *= yScale * 1;
  46862. }
  46863. }
  46864. }
  46865. }
  46866. function segmentTreeBuild(left, right) {
  46867. var root = {
  46868. 'left': left,
  46869. 'right': right,
  46870. 'leftChild': null,
  46871. 'rightChild': null,
  46872. 'maxValue': 0
  46873. };
  46874. if (left + 1 < right) {
  46875. var mid = Math.round((left + right) / 2);
  46876. root.leftChild = segmentTreeBuild(left, mid);
  46877. root.rightChild = segmentTreeBuild(mid, right);
  46878. }
  46879. return root;
  46880. }
  46881. function segmentTreeQuery(root, left, right) {
  46882. if (right - left < 1) {
  46883. return 0;
  46884. }
  46885. var mid = Math.round((root.left + root.right) / 2);
  46886. var result = 0;
  46887. if (left == root.left && right == root.right) {
  46888. result = root.maxValue;
  46889. } else if (right <= mid && root.leftChild != null) {
  46890. result = segmentTreeQuery(root.leftChild, left, right);
  46891. } else if (left >= mid && root.rightChild != null) {
  46892. result = segmentTreeQuery(root.rightChild, left, right);
  46893. } else {
  46894. var leftValue = 0;
  46895. var rightValue = 0;
  46896. if (root.leftChild != null) {
  46897. leftValue = segmentTreeQuery(root.leftChild, left, mid);
  46898. }
  46899. if (root.rightChild != null) {
  46900. rightValue = segmentTreeQuery(root.rightChild, mid, right);
  46901. }
  46902. result = leftValue > rightValue ? leftValue : rightValue;
  46903. }
  46904. return result;
  46905. }
  46906. function segmentTreeInsert(root, left, right, value) {
  46907. if (root == null) {
  46908. return;
  46909. }
  46910. var mid = Math.round((root.left + root.right) / 2);
  46911. root.maxValue = root.maxValue > value ? root.maxValue : value;
  46912. if (Math.floor(left * 10) == Math.floor(root.left * 10) && Math.floor(right * 10) == Math.floor(root.right * 10)) {
  46913. return;
  46914. } else if (right <= mid) {
  46915. segmentTreeInsert(root.leftChild, left, right, value);
  46916. } else if (left >= mid) {
  46917. segmentTreeInsert(root.rightChild, left, right, value);
  46918. } else {
  46919. segmentTreeInsert(root.leftChild, left, mid, value);
  46920. segmentTreeInsert(root.rightChild, mid, right, value);
  46921. }
  46922. }
  46923. return eventRiverLayout;
  46924. });
  46925. var zrender = require('zrender');
  46926. zrender.tool = {
  46927. color : require('zrender/tool/color'),
  46928. math : require('zrender/tool/math'),
  46929. util : require('zrender/tool/util'),
  46930. vector : require('zrender/tool/vector'),
  46931. area : require('zrender/tool/area'),
  46932. event : require('zrender/tool/event')
  46933. }
  46934. zrender.animation = {
  46935. Animation : require('zrender/animation/Animation'),
  46936. Cip : require('zrender/animation/Clip'),
  46937. easing : require('zrender/animation/easing')
  46938. }
  46939. var echarts = require('echarts');
  46940. echarts.config = require('echarts/config');
  46941. echarts.util = {
  46942. mapData : {
  46943. params : require('echarts/util/mapData/params')
  46944. }
  46945. }
  46946. require("echarts/chart/line");
  46947. require("echarts/chart/bar");
  46948. require("echarts/chart/scatter");
  46949. require("echarts/chart/k");
  46950. require("echarts/chart/pie");
  46951. require("echarts/chart/radar");
  46952. require("echarts/chart/chord");
  46953. require("echarts/chart/force");
  46954. require("echarts/chart/map");
  46955. require("echarts/chart/gauge");
  46956. require("echarts/chart/funnel");
  46957. require("echarts/chart/eventRiver");
  46958. _global['echarts'] = echarts;
  46959. _global['zrender'] = zrender;
  46960. })(window);