123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- /* Polyfill service v3.13.0
- * For detailed credits and licence information see http://github.com/financial-times/polyfill-service
- *
- * - Array.prototype.fill, License: CC0 */
- if (!('fill' in Array.prototype)) {
- Object.defineProperty(Array.prototype, 'fill', {
- configurable: true,
- value: function fill (value) {
- if (this === undefined || this === null) {
- throw new TypeError(this + ' is not an object')
- }
- var arrayLike = Object(this);
- var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;
- var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;
- relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);
- var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;
- relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);
- while (relativeStart < relativeEnd) {
- arrayLike[relativeStart] = value;
- ++relativeStart;
- }
- return arrayLike
- },
- writable: true
- });
- }
- /**
- * Polyfill for IE support
- */
- Number.isFinite = Number.isFinite || function (value) {
- return typeof value === 'number' && isFinite(value)
- };
- Number.isInteger = Number.isInteger || function (val) {
- return typeof val === 'number' &&
- isFinite(val) &&
- Math.floor(val) === val
- };
- Number.parseFloat = Number.parseFloat || parseFloat;
- Number.isNaN = Number.isNaN || function (value) {
- return value !== value // eslint-disable-line
- };
- /**
- * Polyfill for IE support
- */
- Math.trunc = Math.trunc || function (x) {
- return x < 0 ? Math.ceil(x) : Math.floor(x)
- };
- var NumberUtil = function NumberUtil () {};
- NumberUtil.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- NumberUtil.prototype.getClass = function getClass () {
- return NumberUtil
- };
- NumberUtil.prototype.equalsWithTolerance = function equalsWithTolerance (x1, x2, tolerance) {
- return Math.abs(x1 - x2) <= tolerance
- };
- var IllegalArgumentException = (function (Error) {
- function IllegalArgumentException (message) {
- Error.call(this, message);
- this.name = 'IllegalArgumentException';
- this.message = message;
- this.stack = (new Error()).stack;
- }
- if ( Error ) IllegalArgumentException.__proto__ = Error;
- IllegalArgumentException.prototype = Object.create( Error && Error.prototype );
- IllegalArgumentException.prototype.constructor = IllegalArgumentException;
- return IllegalArgumentException;
- }(Error));
- var Double = function Double () {};
- var staticAccessors$1 = { MAX_VALUE: { configurable: true } };
- Double.isNaN = function isNaN (n) { return Number.isNaN(n) };
- Double.doubleToLongBits = function doubleToLongBits (n) { return n };
- Double.longBitsToDouble = function longBitsToDouble (n) { return n };
- Double.isInfinite = function isInfinite (n) { return !Number.isFinite(n) };
- staticAccessors$1.MAX_VALUE.get = function () { return Number.MAX_VALUE };
- Object.defineProperties( Double, staticAccessors$1 );
- var Comparable = function Comparable () {};
- var Clonable = function Clonable () {};
- var Comparator = function Comparator () {};
- function Serializable () {}
- // import Assert from '../util/Assert'
- var Coordinate = function Coordinate () {
- this.x = null;
- this.y = null;
- this.z = null;
- if (arguments.length === 0) {
- this.x = 0.0;
- this.y = 0.0;
- this.z = Coordinate.NULL_ORDINATE;
- } else if (arguments.length === 1) {
- var c = arguments[0];
- this.x = c.x;
- this.y = c.y;
- this.z = c.z;
- } else if (arguments.length === 2) {
- this.x = arguments[0];
- this.y = arguments[1];
- this.z = Coordinate.NULL_ORDINATE;
- } else if (arguments.length === 3) {
- this.x = arguments[0];
- this.y = arguments[1];
- this.z = arguments[2];
- }
- };
- var staticAccessors = { DimensionalComparator: { configurable: true },serialVersionUID: { configurable: true },NULL_ORDINATE: { configurable: true },X: { configurable: true },Y: { configurable: true },Z: { configurable: true } };
- Coordinate.prototype.setOrdinate = function setOrdinate (ordinateIndex, value) {
- switch (ordinateIndex) {
- case Coordinate.X:
- this.x = value;
- break
- case Coordinate.Y:
- this.y = value;
- break
- case Coordinate.Z:
- this.z = value;
- break
- default:
- throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
- }
- };
- Coordinate.prototype.equals2D = function equals2D () {
- if (arguments.length === 1) {
- var other = arguments[0];
- if (this.x !== other.x) {
- return false
- }
- if (this.y !== other.y) {
- return false
- }
- return true
- } else if (arguments.length === 2) {
- var c = arguments[0];
- var tolerance = arguments[1];
- if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {
- return false
- }
- if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {
- return false
- }
- return true
- }
- };
- Coordinate.prototype.getOrdinate = function getOrdinate (ordinateIndex) {
- switch (ordinateIndex) {
- case Coordinate.X:
- return this.x
- case Coordinate.Y:
- return this.y
- case Coordinate.Z:
- return this.z
- default:
- }
- throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
- };
- Coordinate.prototype.equals3D = function equals3D (other) {
- return this.x === other.x &&
- this.y === other.y &&
- ((this.z === other.z || Double.isNaN(this.z)) &&
- Double.isNaN(other.z))
- };
- Coordinate.prototype.equals = function equals (other) {
- if (!(other instanceof Coordinate)) {
- return false
- }
- return this.equals2D(other)
- };
- Coordinate.prototype.equalInZ = function equalInZ (c, tolerance) {
- return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)
- };
- Coordinate.prototype.compareTo = function compareTo (o) {
- var other = o;
- if (this.x < other.x) { return -1 }
- if (this.x > other.x) { return 1 }
- if (this.y < other.y) { return -1 }
- if (this.y > other.y) { return 1 }
- return 0
- };
- Coordinate.prototype.clone = function clone () {
- // try {
- // var coord = null
- // return coord
- // } catch (e) {
- // if (e instanceof CloneNotSupportedException) {
- // Assert.shouldNeverReachHere("this shouldn't happen because this class is Cloneable")
- // return null
- // } else throw e
- // } finally {}
- };
- Coordinate.prototype.copy = function copy () {
- return new Coordinate(this)
- };
- Coordinate.prototype.toString = function toString () {
- return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'
- };
- Coordinate.prototype.distance3D = function distance3D (c) {
- var dx = this.x - c.x;
- var dy = this.y - c.y;
- var dz = this.z - c.z;
- return Math.sqrt(dx * dx + dy * dy + dz * dz)
- };
- Coordinate.prototype.distance = function distance (c) {
- var dx = this.x - c.x;
- var dy = this.y - c.y;
- return Math.sqrt(dx * dx + dy * dy)
- };
- Coordinate.prototype.hashCode = function hashCode () {
- var result = 17;
- result = 37 * result + Coordinate.hashCode(this.x);
- result = 37 * result + Coordinate.hashCode(this.y);
- return result
- };
- Coordinate.prototype.setCoordinate = function setCoordinate (other) {
- this.x = other.x;
- this.y = other.y;
- this.z = other.z;
- };
- Coordinate.prototype.interfaces_ = function interfaces_ () {
- return [Comparable, Clonable, Serializable]
- };
- Coordinate.prototype.getClass = function getClass () {
- return Coordinate
- };
- Coordinate.hashCode = function hashCode () {
- if (arguments.length === 1) {
- var x = arguments[0];
- var f = Double.doubleToLongBits(x);
- return Math.trunc((f ^ f) >>> 32)
- }
- };
- staticAccessors.DimensionalComparator.get = function () { return DimensionalComparator };
- staticAccessors.serialVersionUID.get = function () { return 6683108902428366910 };
- staticAccessors.NULL_ORDINATE.get = function () { return Double.NaN };
- staticAccessors.X.get = function () { return 0 };
- staticAccessors.Y.get = function () { return 1 };
- staticAccessors.Z.get = function () { return 2 };
- Object.defineProperties( Coordinate, staticAccessors );
- var DimensionalComparator = function DimensionalComparator (dimensionsToTest) {
- this._dimensionsToTest = 2;
- if (arguments.length === 0) {} else if (arguments.length === 1) {
- var dimensionsToTest$1 = arguments[0];
- if (dimensionsToTest$1 !== 2 && dimensionsToTest$1 !== 3) { throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') }
- this._dimensionsToTest = dimensionsToTest$1;
- }
- };
- DimensionalComparator.prototype.compare = function compare (o1, o2) {
- var c1 = o1;
- var c2 = o2;
- var compX = DimensionalComparator.compare(c1.x, c2.x);
- if (compX !== 0) { return compX }
- var compY = DimensionalComparator.compare(c1.y, c2.y);
- if (compY !== 0) { return compY }
- if (this._dimensionsToTest <= 2) { return 0 }
- var compZ = DimensionalComparator.compare(c1.z, c2.z);
- return compZ
- };
- DimensionalComparator.prototype.interfaces_ = function interfaces_ () {
- return [Comparator]
- };
- DimensionalComparator.prototype.getClass = function getClass () {
- return DimensionalComparator
- };
- DimensionalComparator.compare = function compare (a, b) {
- if (a < b) { return -1 }
- if (a > b) { return 1 }
- if (Double.isNaN(a)) {
- if (Double.isNaN(b)) { return 0 }
- return -1
- }
- if (Double.isNaN(b)) { return 1 }
- return 0
- };
- // import hasInterface from '../../../../hasInterface'
- // import CoordinateSequence from './CoordinateSequence'
- var CoordinateSequenceFactory = function CoordinateSequenceFactory () {};
- CoordinateSequenceFactory.prototype.create = function create () {
- // if (arguments.length === 1) {
- // if (arguments[0] instanceof Array) {
- // let coordinates = arguments[0]
- // } else if (hasInterface(arguments[0], CoordinateSequence)) {
- // let coordSeq = arguments[0]
- // }
- // } else if (arguments.length === 2) {
- // let size = arguments[0]
- // let dimension = arguments[1]
- // }
- };
- CoordinateSequenceFactory.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CoordinateSequenceFactory.prototype.getClass = function getClass () {
- return CoordinateSequenceFactory
- };
- var Location = function Location () {};
- var staticAccessors$4 = { INTERIOR: { configurable: true },BOUNDARY: { configurable: true },EXTERIOR: { configurable: true },NONE: { configurable: true } };
- Location.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Location.prototype.getClass = function getClass () {
- return Location
- };
- Location.toLocationSymbol = function toLocationSymbol (locationValue) {
- switch (locationValue) {
- case Location.EXTERIOR:
- return 'e'
- case Location.BOUNDARY:
- return 'b'
- case Location.INTERIOR:
- return 'i'
- case Location.NONE:
- return '-'
- default:
- }
- throw new IllegalArgumentException('Unknown location value: ' + locationValue)
- };
- staticAccessors$4.INTERIOR.get = function () { return 0 };
- staticAccessors$4.BOUNDARY.get = function () { return 1 };
- staticAccessors$4.EXTERIOR.get = function () { return 2 };
- staticAccessors$4.NONE.get = function () { return -1 };
- Object.defineProperties( Location, staticAccessors$4 );
- var hasInterface = function (o, i) {
- return o.interfaces_ && o.interfaces_().indexOf(i) > -1
- };
- var MathUtil = function MathUtil () {};
- var staticAccessors$5 = { LOG_10: { configurable: true } };
- MathUtil.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MathUtil.prototype.getClass = function getClass () {
- return MathUtil
- };
- MathUtil.log10 = function log10 (x) {
- var ln = Math.log(x);
- if (Double.isInfinite(ln)) { return ln }
- if (Double.isNaN(ln)) { return ln }
- return ln / MathUtil.LOG_10
- };
- MathUtil.min = function min (v1, v2, v3, v4) {
- var min = v1;
- if (v2 < min) { min = v2; }
- if (v3 < min) { min = v3; }
- if (v4 < min) { min = v4; }
- return min
- };
- MathUtil.clamp = function clamp () {
- if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {
- var x = arguments[0];
- var min = arguments[1];
- var max = arguments[2];
- if (x < min) { return min }
- if (x > max) { return max }
- return x
- } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {
- var x$1 = arguments[0];
- var min$1 = arguments[1];
- var max$1 = arguments[2];
- if (x$1 < min$1) { return min$1 }
- if (x$1 > max$1) { return max$1 }
- return x$1
- }
- };
- MathUtil.wrap = function wrap (index, max) {
- if (index < 0) {
- return max - -index % max
- }
- return index % max
- };
- MathUtil.max = function max () {
- if (arguments.length === 3) {
- var v1 = arguments[0];
- var v2 = arguments[1];
- var v3 = arguments[2];
- var max = v1;
- if (v2 > max) { max = v2; }
- if (v3 > max) { max = v3; }
- return max
- } else if (arguments.length === 4) {
- var v1$1 = arguments[0];
- var v2$1 = arguments[1];
- var v3$1 = arguments[2];
- var v4 = arguments[3];
- var max$1 = v1$1;
- if (v2$1 > max$1) { max$1 = v2$1; }
- if (v3$1 > max$1) { max$1 = v3$1; }
- if (v4 > max$1) { max$1 = v4; }
- return max$1
- }
- };
- MathUtil.average = function average (x1, x2) {
- return (x1 + x2) / 2.0
- };
- staticAccessors$5.LOG_10.get = function () { return Math.log(10) };
- Object.defineProperties( MathUtil, staticAccessors$5 );
- var StringBuffer = function StringBuffer (str) {
- this.str = str;
- };
- StringBuffer.prototype.append = function append (e) {
- this.str += e;
- };
- StringBuffer.prototype.setCharAt = function setCharAt (i, c) {
- this.str = this.str.substr(0, i) + c + this.str.substr(i + 1);
- };
- StringBuffer.prototype.toString = function toString (e) {
- return this.str
- };
- var Integer = function Integer (value) {
- this.value = value;
- };
- Integer.prototype.intValue = function intValue () {
- return this.value
- };
- Integer.prototype.compareTo = function compareTo (o) {
- if (this.value < o) { return -1 }
- if (this.value > o) { return 1 }
- return 0
- };
- Integer.isNaN = function isNaN (n) { return Number.isNaN(n) };
- var Character = function Character () {};
- Character.isWhitespace = function isWhitespace (c) { return ((c <= 32 && c >= 0) || c === 127) };
- Character.toUpperCase = function toUpperCase (c) { return c.toUpperCase() };
- var DD = function DD () {
- this._hi = 0.0;
- this._lo = 0.0;
- if (arguments.length === 0) {
- this.init(0.0);
- } else if (arguments.length === 1) {
- if (typeof arguments[0] === 'number') {
- var x = arguments[0];
- this.init(x);
- } else if (arguments[0] instanceof DD) {
- var dd = arguments[0];
- this.init(dd);
- } else if (typeof arguments[0] === 'string') {
- var str = arguments[0];
- DD.call(this, DD.parse(str));
- }
- } else if (arguments.length === 2) {
- var hi = arguments[0];
- var lo = arguments[1];
- this.init(hi, lo);
- }
- };
- var staticAccessors$7 = { PI: { configurable: true },TWO_PI: { configurable: true },PI_2: { configurable: true },E: { configurable: true },NaN: { configurable: true },EPS: { configurable: true },SPLIT: { configurable: true },MAX_PRINT_DIGITS: { configurable: true },TEN: { configurable: true },ONE: { configurable: true },SCI_NOT_EXPONENT_CHAR: { configurable: true },SCI_NOT_ZERO: { configurable: true } };
- DD.prototype.le = function le (y) {
- return (this._hi < y._hi || this._hi === y._hi) && this._lo <= y._lo
- };
- DD.prototype.extractSignificantDigits = function extractSignificantDigits (insertDecimalPoint, magnitude) {
- var y = this.abs();
- var mag = DD.magnitude(y._hi);
- var scale = DD.TEN.pow(mag);
- y = y.divide(scale);
- if (y.gt(DD.TEN)) {
- y = y.divide(DD.TEN);
- mag += 1;
- } else if (y.lt(DD.ONE)) {
- y = y.multiply(DD.TEN);
- mag -= 1;
- }
- var decimalPointPos = mag + 1;
- var buf = new StringBuffer();
- var numDigits = DD.MAX_PRINT_DIGITS - 1;
- for (var i = 0; i <= numDigits; i++) {
- if (insertDecimalPoint && i === decimalPointPos) {
- buf.append('.');
- }
- var digit = Math.trunc(y._hi);
- if (digit < 0) {
- break
- }
- var rebiasBy10 = false;
- var digitChar = 0;
- if (digit > 9) {
- rebiasBy10 = true;
- digitChar = '9';
- } else {
- digitChar = '0' + digit;
- }
- buf.append(digitChar);
- y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);
- if (rebiasBy10) { y.selfAdd(DD.TEN); }
- var continueExtractingDigits = true;
- var remMag = DD.magnitude(y._hi);
- if (remMag < 0 && Math.abs(remMag) >= numDigits - i) { continueExtractingDigits = false; }
- if (!continueExtractingDigits) { break }
- }
- magnitude[0] = mag;
- return buf.toString()
- };
- DD.prototype.sqr = function sqr () {
- return this.multiply(this)
- };
- DD.prototype.doubleValue = function doubleValue () {
- return this._hi + this._lo
- };
- DD.prototype.subtract = function subtract () {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- return this.add(y.negate())
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- return this.add(-y$1)
- }
- };
- DD.prototype.equals = function equals () {
- if (arguments.length === 1) {
- var y = arguments[0];
- return this._hi === y._hi && this._lo === y._lo
- }
- };
- DD.prototype.isZero = function isZero () {
- return this._hi === 0.0 && this._lo === 0.0
- };
- DD.prototype.selfSubtract = function selfSubtract () {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- if (this.isNaN()) { return this }
- return this.selfAdd(-y._hi, -y._lo)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- if (this.isNaN()) { return this }
- return this.selfAdd(-y$1, 0.0)
- }
- };
- DD.prototype.getSpecialNumberString = function getSpecialNumberString () {
- if (this.isZero()) { return '0.0' }
- if (this.isNaN()) { return 'NaN ' }
- return null
- };
- DD.prototype.min = function min (x) {
- if (this.le(x)) {
- return this
- } else {
- return x
- }
- };
- DD.prototype.selfDivide = function selfDivide () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- return this.selfDivide(y._hi, y._lo)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- return this.selfDivide(y$1, 0.0)
- }
- } else if (arguments.length === 2) {
- var yhi = arguments[0];
- var ylo = arguments[1];
- var hc = null;
- var tc = null;
- var hy = null;
- var ty = null;
- var C = null;
- var c = null;
- var U = null;
- var u = null;
- C = this._hi / yhi;
- c = DD.SPLIT * C;
- hc = c - C;
- u = DD.SPLIT * yhi;
- hc = c - hc;
- tc = C - hc;
- hy = u - yhi;
- U = C * yhi;
- hy = u - hy;
- ty = yhi - hy;
- u = hc * hy - U + hc * ty + tc * hy + tc * ty;
- c = (this._hi - U - u + this._lo - C * ylo) / yhi;
- u = C + c;
- this._hi = u;
- this._lo = C - u + c;
- return this
- }
- };
- DD.prototype.dump = function dump () {
- return 'DD<' + this._hi + ', ' + this._lo + '>'
- };
- DD.prototype.divide = function divide () {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- var hc = null;
- var tc = null;
- var hy = null;
- var ty = null;
- var C = null;
- var c = null;
- var U = null;
- var u = null;
- C = this._hi / y._hi;
- c = DD.SPLIT * C;
- hc = c - C;
- u = DD.SPLIT * y._hi;
- hc = c - hc;
- tc = C - hc;
- hy = u - y._hi;
- U = C * y._hi;
- hy = u - hy;
- ty = y._hi - hy;
- u = hc * hy - U + hc * ty + tc * hy + tc * ty;
- c = (this._hi - U - u + this._lo - C * y._lo) / y._hi;
- u = C + c;
- var zhi = u;
- var zlo = C - u + c;
- return new DD(zhi, zlo)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- if (Double.isNaN(y$1)) { return DD.createNaN() }
- return DD.copy(this).selfDivide(y$1, 0.0)
- }
- };
- DD.prototype.ge = function ge (y) {
- return (this._hi > y._hi || this._hi === y._hi) && this._lo >= y._lo
- };
- DD.prototype.pow = function pow (exp) {
- if (exp === 0.0) { return DD.valueOf(1.0) }
- var r = new DD(this);
- var s = DD.valueOf(1.0);
- var n = Math.abs(exp);
- if (n > 1) {
- while (n > 0) {
- if (n % 2 === 1) {
- s.selfMultiply(r);
- }
- n /= 2;
- if (n > 0) { r = r.sqr(); }
- }
- } else {
- s = r;
- }
- if (exp < 0) { return s.reciprocal() }
- return s
- };
- DD.prototype.ceil = function ceil () {
- if (this.isNaN()) { return DD.NaN }
- var fhi = Math.ceil(this._hi);
- var flo = 0.0;
- if (fhi === this._hi) {
- flo = Math.ceil(this._lo);
- }
- return new DD(fhi, flo)
- };
- DD.prototype.compareTo = function compareTo (o) {
- var other = o;
- if (this._hi < other._hi) { return -1 }
- if (this._hi > other._hi) { return 1 }
- if (this._lo < other._lo) { return -1 }
- if (this._lo > other._lo) { return 1 }
- return 0
- };
- DD.prototype.rint = function rint () {
- if (this.isNaN()) { return this }
- var plus5 = this.add(0.5);
- return plus5.floor()
- };
- DD.prototype.setValue = function setValue () {
- if (arguments[0] instanceof DD) {
- var value = arguments[0];
- this.init(value);
- return this
- } else if (typeof arguments[0] === 'number') {
- var value$1 = arguments[0];
- this.init(value$1);
- return this
- }
- };
- DD.prototype.max = function max (x) {
- if (this.ge(x)) {
- return this
- } else {
- return x
- }
- };
- DD.prototype.sqrt = function sqrt () {
- if (this.isZero()) { return DD.valueOf(0.0) }
- if (this.isNegative()) {
- return DD.NaN
- }
- var x = 1.0 / Math.sqrt(this._hi);
- var ax = this._hi * x;
- var axdd = DD.valueOf(ax);
- var diffSq = this.subtract(axdd.sqr());
- var d2 = diffSq._hi * (x * 0.5);
- return axdd.add(d2)
- };
- DD.prototype.selfAdd = function selfAdd () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- return this.selfAdd(y._hi, y._lo)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- var H = null;
- var h = null;
- var S = null;
- var s = null;
- var e = null;
- var f = null;
- S = this._hi + y$1;
- e = S - this._hi;
- s = S - e;
- s = y$1 - e + (this._hi - s);
- f = s + this._lo;
- H = S + f;
- h = f + (S - H);
- this._hi = H + h;
- this._lo = h + (H - this._hi);
- return this
- }
- } else if (arguments.length === 2) {
- var yhi = arguments[0];
- var ylo = arguments[1];
- var H$1 = null;
- var h$1 = null;
- var T = null;
- var t = null;
- var S$1 = null;
- var s$1 = null;
- var e$1 = null;
- var f$1 = null;
- S$1 = this._hi + yhi;
- T = this._lo + ylo;
- e$1 = S$1 - this._hi;
- f$1 = T - this._lo;
- s$1 = S$1 - e$1;
- t = T - f$1;
- s$1 = yhi - e$1 + (this._hi - s$1);
- t = ylo - f$1 + (this._lo - t);
- e$1 = s$1 + T;
- H$1 = S$1 + e$1;
- h$1 = e$1 + (S$1 - H$1);
- e$1 = t + h$1;
- var zhi = H$1 + e$1;
- var zlo = e$1 + (H$1 - zhi);
- this._hi = zhi;
- this._lo = zlo;
- return this
- }
- };
- DD.prototype.selfMultiply = function selfMultiply () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- return this.selfMultiply(y._hi, y._lo)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- return this.selfMultiply(y$1, 0.0)
- }
- } else if (arguments.length === 2) {
- var yhi = arguments[0];
- var ylo = arguments[1];
- var hx = null;
- var tx = null;
- var hy = null;
- var ty = null;
- var C = null;
- var c = null;
- C = DD.SPLIT * this._hi;
- hx = C - this._hi;
- c = DD.SPLIT * yhi;
- hx = C - hx;
- tx = this._hi - hx;
- hy = c - yhi;
- C = this._hi * yhi;
- hy = c - hy;
- ty = yhi - hy;
- c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);
- var zhi = C + c;
- hx = C - zhi;
- var zlo = c + hx;
- this._hi = zhi;
- this._lo = zlo;
- return this
- }
- };
- DD.prototype.selfSqr = function selfSqr () {
- return this.selfMultiply(this)
- };
- DD.prototype.floor = function floor () {
- if (this.isNaN()) { return DD.NaN }
- var fhi = Math.floor(this._hi);
- var flo = 0.0;
- if (fhi === this._hi) {
- flo = Math.floor(this._lo);
- }
- return new DD(fhi, flo)
- };
- DD.prototype.negate = function negate () {
- if (this.isNaN()) { return this }
- return new DD(-this._hi, -this._lo)
- };
- DD.prototype.clone = function clone () {
- // try {
- // return null
- // } catch (ex) {
- // if (ex instanceof CloneNotSupportedException) {
- // return null
- // } else throw ex
- // } finally {}
- };
- DD.prototype.multiply = function multiply () {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- if (y.isNaN()) { return DD.createNaN() }
- return DD.copy(this).selfMultiply(y)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- if (Double.isNaN(y$1)) { return DD.createNaN() }
- return DD.copy(this).selfMultiply(y$1, 0.0)
- }
- };
- DD.prototype.isNaN = function isNaN () {
- return Double.isNaN(this._hi)
- };
- DD.prototype.intValue = function intValue () {
- return Math.trunc(this._hi)
- };
- DD.prototype.toString = function toString () {
- var mag = DD.magnitude(this._hi);
- if (mag >= -3 && mag <= 20) { return this.toStandardNotation() }
- return this.toSciNotation()
- };
- DD.prototype.toStandardNotation = function toStandardNotation () {
- var specialStr = this.getSpecialNumberString();
- if (specialStr !== null) { return specialStr }
- var magnitude = new Array(1).fill(null);
- var sigDigits = this.extractSignificantDigits(true, magnitude);
- var decimalPointPos = magnitude[0] + 1;
- var num = sigDigits;
- if (sigDigits.charAt(0) === '.') {
- num = '0' + sigDigits;
- } else if (decimalPointPos < 0) {
- num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits;
- } else if (sigDigits.indexOf('.') === -1) {
- var numZeroes = decimalPointPos - sigDigits.length;
- var zeroes = DD.stringOfChar('0', numZeroes);
- num = sigDigits + zeroes + '.0';
- }
- if (this.isNegative()) { return '-' + num }
- return num
- };
- DD.prototype.reciprocal = function reciprocal () {
- var hc = null;
- var tc = null;
- var hy = null;
- var ty = null;
- var C = null;
- var c = null;
- var U = null;
- var u = null;
- C = 1.0 / this._hi;
- c = DD.SPLIT * C;
- hc = c - C;
- u = DD.SPLIT * this._hi;
- hc = c - hc;
- tc = C - hc;
- hy = u - this._hi;
- U = C * this._hi;
- hy = u - hy;
- ty = this._hi - hy;
- u = hc * hy - U + hc * ty + tc * hy + tc * ty;
- c = (1.0 - U - u - C * this._lo) / this._hi;
- var zhi = C + c;
- var zlo = C - zhi + c;
- return new DD(zhi, zlo)
- };
- DD.prototype.toSciNotation = function toSciNotation () {
- if (this.isZero()) { return DD.SCI_NOT_ZERO }
- var specialStr = this.getSpecialNumberString();
- if (specialStr !== null) { return specialStr }
- var magnitude = new Array(1).fill(null);
- var digits = this.extractSignificantDigits(false, magnitude);
- var expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];
- if (digits.charAt(0) === '0') {
- throw new Error('Found leading zero: ' + digits)
- }
- var trailingDigits = '';
- if (digits.length > 1) { trailingDigits = digits.substring(1); }
- var digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits;
- if (this.isNegative()) { return '-' + digitsWithDecimal + expStr }
- return digitsWithDecimal + expStr
- };
- DD.prototype.abs = function abs () {
- if (this.isNaN()) { return DD.NaN }
- if (this.isNegative()) { return this.negate() }
- return new DD(this)
- };
- DD.prototype.isPositive = function isPositive () {
- return (this._hi > 0.0 || this._hi === 0.0) && this._lo > 0.0
- };
- DD.prototype.lt = function lt (y) {
- return (this._hi < y._hi || this._hi === y._hi) && this._lo < y._lo
- };
- DD.prototype.add = function add () {
- if (arguments[0] instanceof DD) {
- var y = arguments[0];
- return DD.copy(this).selfAdd(y)
- } else if (typeof arguments[0] === 'number') {
- var y$1 = arguments[0];
- return DD.copy(this).selfAdd(y$1)
- }
- };
- DD.prototype.init = function init () {
- if (arguments.length === 1) {
- if (typeof arguments[0] === 'number') {
- var x = arguments[0];
- this._hi = x;
- this._lo = 0.0;
- } else if (arguments[0] instanceof DD) {
- var dd = arguments[0];
- this._hi = dd._hi;
- this._lo = dd._lo;
- }
- } else if (arguments.length === 2) {
- var hi = arguments[0];
- var lo = arguments[1];
- this._hi = hi;
- this._lo = lo;
- }
- };
- DD.prototype.gt = function gt (y) {
- return (this._hi > y._hi || this._hi === y._hi) && this._lo > y._lo
- };
- DD.prototype.isNegative = function isNegative () {
- return (this._hi < 0.0 || this._hi === 0.0) && this._lo < 0.0
- };
- DD.prototype.trunc = function trunc () {
- if (this.isNaN()) { return DD.NaN }
- if (this.isPositive()) { return this.floor(); } else { return this.ceil() }
- };
- DD.prototype.signum = function signum () {
- if (this._hi > 0) { return 1 }
- if (this._hi < 0) { return -1 }
- if (this._lo > 0) { return 1 }
- if (this._lo < 0) { return -1 }
- return 0
- };
- DD.prototype.interfaces_ = function interfaces_ () {
- return [Serializable, Comparable, Clonable]
- };
- DD.prototype.getClass = function getClass () {
- return DD
- };
- DD.sqr = function sqr (x) {
- return DD.valueOf(x).selfMultiply(x)
- };
- DD.valueOf = function valueOf () {
- if (typeof arguments[0] === 'string') {
- var str = arguments[0];
- return DD.parse(str)
- } else if (typeof arguments[0] === 'number') {
- var x = arguments[0];
- return new DD(x)
- }
- };
- DD.sqrt = function sqrt (x) {
- return DD.valueOf(x).sqrt()
- };
- DD.parse = function parse (str) {
- var i = 0;
- var strlen = str.length;
- while (Character.isWhitespace(str.charAt(i))) { i++; }
- var isNegative = false;
- if (i < strlen) {
- var signCh = str.charAt(i);
- if (signCh === '-' || signCh === '+') {
- i++;
- if (signCh === '-') { isNegative = true; }
- }
- }
- var val = new DD();
- var numDigits = 0;
- var numBeforeDec = 0;
- var exp = 0;
- while (true) {
- if (i >= strlen) { break }
- var ch = str.charAt(i);
- i++;
- if (Character.isDigit(ch)) {
- var d = ch - '0';
- val.selfMultiply(DD.TEN);
- val.selfAdd(d);
- numDigits++;
- continue
- }
- if (ch === '.') {
- numBeforeDec = numDigits;
- continue
- }
- if (ch === 'e' || ch === 'E') {
- var expStr = str.substring(i);
- try {
- exp = Integer.parseInt(expStr);
- } catch (ex) {
- if (ex instanceof Error) {
- throw new Error('Invalid exponent ' + expStr + ' in string ' + str)
- } else { throw ex }
- } finally {}
- break
- }
- throw new Error("Unexpected character '" + ch + "' at position " + i + ' in string ' + str)
- }
- var val2 = val;
- var numDecPlaces = numDigits - numBeforeDec - exp;
- if (numDecPlaces === 0) {
- val2 = val;
- } else if (numDecPlaces > 0) {
- var scale = DD.TEN.pow(numDecPlaces);
- val2 = val.divide(scale);
- } else if (numDecPlaces < 0) {
- var scale$1 = DD.TEN.pow(-numDecPlaces);
- val2 = val.multiply(scale$1);
- }
- if (isNegative) {
- return val2.negate()
- }
- return val2
- };
- DD.createNaN = function createNaN () {
- return new DD(Double.NaN, Double.NaN)
- };
- DD.copy = function copy (dd) {
- return new DD(dd)
- };
- DD.magnitude = function magnitude (x) {
- var xAbs = Math.abs(x);
- var xLog10 = Math.log(xAbs) / Math.log(10);
- var xMag = Math.trunc(Math.floor(xLog10));
- var xApprox = Math.pow(10, xMag);
- if (xApprox * 10 <= xAbs) { xMag += 1; }
- return xMag
- };
- DD.stringOfChar = function stringOfChar (ch, len) {
- var buf = new StringBuffer();
- for (var i = 0; i < len; i++) {
- buf.append(ch);
- }
- return buf.toString()
- };
- staticAccessors$7.PI.get = function () { return new DD(3.141592653589793116e+00, 1.224646799147353207e-16) };
- staticAccessors$7.TWO_PI.get = function () { return new DD(6.283185307179586232e+00, 2.449293598294706414e-16) };
- staticAccessors$7.PI_2.get = function () { return new DD(1.570796326794896558e+00, 6.123233995736766036e-17) };
- staticAccessors$7.E.get = function () { return new DD(2.718281828459045091e+00, 1.445646891729250158e-16) };
- staticAccessors$7.NaN.get = function () { return new DD(Double.NaN, Double.NaN) };
- staticAccessors$7.EPS.get = function () { return 1.23259516440783e-32 };
- staticAccessors$7.SPLIT.get = function () { return 134217729.0 };
- staticAccessors$7.MAX_PRINT_DIGITS.get = function () { return 32 };
- staticAccessors$7.TEN.get = function () { return DD.valueOf(10.0) };
- staticAccessors$7.ONE.get = function () { return DD.valueOf(1.0) };
- staticAccessors$7.SCI_NOT_EXPONENT_CHAR.get = function () { return 'E' };
- staticAccessors$7.SCI_NOT_ZERO.get = function () { return '0.0E0' };
- Object.defineProperties( DD, staticAccessors$7 );
- var CGAlgorithmsDD = function CGAlgorithmsDD () {};
- var staticAccessors$6 = { DP_SAFE_EPSILON: { configurable: true } };
- CGAlgorithmsDD.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CGAlgorithmsDD.prototype.getClass = function getClass () {
- return CGAlgorithmsDD
- };
- CGAlgorithmsDD.orientationIndex = function orientationIndex (p1, p2, q) {
- var index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);
- if (index <= 1) { return index }
- var dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);
- var dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);
- var dx2 = DD.valueOf(q.x).selfAdd(-p2.x);
- var dy2 = DD.valueOf(q.y).selfAdd(-p2.y);
- return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()
- };
- CGAlgorithmsDD.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
- var det = x1.multiply(y2).selfSubtract(y1.multiply(x2));
- return det.signum()
- };
- CGAlgorithmsDD.intersection = function intersection (p1, p2, q1, q2) {
- var denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));
- var denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));
- var denom = denom1.subtract(denom2);
- var numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
- var numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
- var numx = numx1.subtract(numx2);
- var fracP = numx.selfDivide(denom).doubleValue();
- var x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();
- var numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
- var numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
- var numy = numy1.subtract(numy2);
- var fracQ = numy.selfDivide(denom).doubleValue();
- var y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();
- return new Coordinate(x, y)
- };
- CGAlgorithmsDD.orientationIndexFilter = function orientationIndexFilter (pa, pb, pc) {
- var detsum = null;
- var detleft = (pa.x - pc.x) * (pb.y - pc.y);
- var detright = (pa.y - pc.y) * (pb.x - pc.x);
- var det = detleft - detright;
- if (detleft > 0.0) {
- if (detright <= 0.0) {
- return CGAlgorithmsDD.signum(det)
- } else {
- detsum = detleft + detright;
- }
- } else if (detleft < 0.0) {
- if (detright >= 0.0) {
- return CGAlgorithmsDD.signum(det)
- } else {
- detsum = -detleft - detright;
- }
- } else {
- return CGAlgorithmsDD.signum(det)
- }
- var errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;
- if (det >= errbound || -det >= errbound) {
- return CGAlgorithmsDD.signum(det)
- }
- return 2
- };
- CGAlgorithmsDD.signum = function signum (x) {
- if (x > 0) { return 1 }
- if (x < 0) { return -1 }
- return 0
- };
- staticAccessors$6.DP_SAFE_EPSILON.get = function () { return 1e-15 };
- Object.defineProperties( CGAlgorithmsDD, staticAccessors$6 );
- var CoordinateSequence = function CoordinateSequence () {};
- var staticAccessors$8 = { X: { configurable: true },Y: { configurable: true },Z: { configurable: true },M: { configurable: true } };
- staticAccessors$8.X.get = function () { return 0 };
- staticAccessors$8.Y.get = function () { return 1 };
- staticAccessors$8.Z.get = function () { return 2 };
- staticAccessors$8.M.get = function () { return 3 };
- CoordinateSequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {};
- CoordinateSequence.prototype.size = function size () {};
- CoordinateSequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {};
- CoordinateSequence.prototype.getCoordinate = function getCoordinate () {};
- CoordinateSequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {};
- CoordinateSequence.prototype.getDimension = function getDimension () {};
- CoordinateSequence.prototype.getX = function getX (index) {};
- CoordinateSequence.prototype.clone = function clone () {};
- CoordinateSequence.prototype.expandEnvelope = function expandEnvelope (env) {};
- CoordinateSequence.prototype.copy = function copy () {};
- CoordinateSequence.prototype.getY = function getY (index) {};
- CoordinateSequence.prototype.toCoordinateArray = function toCoordinateArray () {};
- CoordinateSequence.prototype.interfaces_ = function interfaces_ () {
- return [Clonable]
- };
- CoordinateSequence.prototype.getClass = function getClass () {
- return CoordinateSequence
- };
- Object.defineProperties( CoordinateSequence, staticAccessors$8 );
- var Exception = function Exception () {};
- var NotRepresentableException = (function (Exception$$1) {
- function NotRepresentableException () {
- Exception$$1.call(this, 'Projective point not representable on the Cartesian plane.');
- }
- if ( Exception$$1 ) NotRepresentableException.__proto__ = Exception$$1;
- NotRepresentableException.prototype = Object.create( Exception$$1 && Exception$$1.prototype );
- NotRepresentableException.prototype.constructor = NotRepresentableException;
- NotRepresentableException.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- NotRepresentableException.prototype.getClass = function getClass () {
- return NotRepresentableException
- };
- return NotRepresentableException;
- }(Exception));
- var System = function System () {};
- System.arraycopy = function arraycopy (src, srcPos, dest, destPos, len) {
- var c = 0;
- for (var i = srcPos; i < srcPos + len; i++) {
- dest[destPos + c] = src[i];
- c++;
- }
- };
- System.getProperty = function getProperty (name) {
- return {
- 'line.separator': '\n'
- }[name]
- };
- var HCoordinate = function HCoordinate () {
- this.x = null;
- this.y = null;
- this.w = null;
- if (arguments.length === 0) {
- this.x = 0.0;
- this.y = 0.0;
- this.w = 1.0;
- } else if (arguments.length === 1) {
- var p = arguments[0];
- this.x = p.x;
- this.y = p.y;
- this.w = 1.0;
- } else if (arguments.length === 2) {
- if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
- var _x = arguments[0];
- var _y = arguments[1];
- this.x = _x;
- this.y = _y;
- this.w = 1.0;
- } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {
- var p1 = arguments[0];
- var p2 = arguments[1];
- this.x = p1.y * p2.w - p2.y * p1.w;
- this.y = p2.x * p1.w - p1.x * p2.w;
- this.w = p1.x * p2.y - p2.x * p1.y;
- } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
- var p1$1 = arguments[0];
- var p2$1 = arguments[1];
- this.x = p1$1.y - p2$1.y;
- this.y = p2$1.x - p1$1.x;
- this.w = p1$1.x * p2$1.y - p2$1.x * p1$1.y;
- }
- } else if (arguments.length === 3) {
- var _x$1 = arguments[0];
- var _y$1 = arguments[1];
- var _w = arguments[2];
- this.x = _x$1;
- this.y = _y$1;
- this.w = _w;
- } else if (arguments.length === 4) {
- var p1$2 = arguments[0];
- var p2$2 = arguments[1];
- var q1 = arguments[2];
- var q2 = arguments[3];
- var px = p1$2.y - p2$2.y;
- var py = p2$2.x - p1$2.x;
- var pw = p1$2.x * p2$2.y - p2$2.x * p1$2.y;
- var qx = q1.y - q2.y;
- var qy = q2.x - q1.x;
- var qw = q1.x * q2.y - q2.x * q1.y;
- this.x = py * qw - qy * pw;
- this.y = qx * pw - px * qw;
- this.w = px * qy - qx * py;
- }
- };
- HCoordinate.prototype.getY = function getY () {
- var a = this.y / this.w;
- if (Double.isNaN(a) || Double.isInfinite(a)) {
- throw new NotRepresentableException()
- }
- return a
- };
- HCoordinate.prototype.getX = function getX () {
- var a = this.x / this.w;
- if (Double.isNaN(a) || Double.isInfinite(a)) {
- throw new NotRepresentableException()
- }
- return a
- };
- HCoordinate.prototype.getCoordinate = function getCoordinate () {
- var p = new Coordinate();
- p.x = this.getX();
- p.y = this.getY();
- return p
- };
- HCoordinate.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- HCoordinate.prototype.getClass = function getClass () {
- return HCoordinate
- };
- HCoordinate.intersection = function intersection (p1, p2, q1, q2) {
- var px = p1.y - p2.y;
- var py = p2.x - p1.x;
- var pw = p1.x * p2.y - p2.x * p1.y;
- var qx = q1.y - q2.y;
- var qy = q2.x - q1.x;
- var qw = q1.x * q2.y - q2.x * q1.y;
- var x = py * qw - qy * pw;
- var y = qx * pw - px * qw;
- var w = px * qy - qx * py;
- var xInt = x / w;
- var yInt = y / w;
- if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {
- throw new NotRepresentableException()
- }
- return new Coordinate(xInt, yInt)
- };
- var Envelope = function Envelope () {
- this._minx = null;
- this._maxx = null;
- this._miny = null;
- this._maxy = null;
- if (arguments.length === 0) {
- this.init();
- } else if (arguments.length === 1) {
- if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- this.init(p.x, p.x, p.y, p.y);
- } else if (arguments[0] instanceof Envelope) {
- var env = arguments[0];
- this.init(env);
- }
- } else if (arguments.length === 2) {
- var p1 = arguments[0];
- var p2 = arguments[1];
- this.init(p1.x, p2.x, p1.y, p2.y);
- } else if (arguments.length === 4) {
- var x1 = arguments[0];
- var x2 = arguments[1];
- var y1 = arguments[2];
- var y2 = arguments[3];
- this.init(x1, x2, y1, y2);
- }
- };
- var staticAccessors$9 = { serialVersionUID: { configurable: true } };
- Envelope.prototype.getArea = function getArea () {
- return this.getWidth() * this.getHeight()
- };
- Envelope.prototype.equals = function equals (other) {
- if (!(other instanceof Envelope)) {
- return false
- }
- var otherEnvelope = other;
- if (this.isNull()) {
- return otherEnvelope.isNull()
- }
- return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()
- };
- Envelope.prototype.intersection = function intersection (env) {
- if (this.isNull() || env.isNull() || !this.intersects(env)) { return new Envelope() }
- var intMinX = this._minx > env._minx ? this._minx : env._minx;
- var intMinY = this._miny > env._miny ? this._miny : env._miny;
- var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;
- var intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;
- return new Envelope(intMinX, intMaxX, intMinY, intMaxY)
- };
- Envelope.prototype.isNull = function isNull () {
- return this._maxx < this._minx
- };
- Envelope.prototype.getMaxX = function getMaxX () {
- return this._maxx
- };
- Envelope.prototype.covers = function covers () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- return this.covers(p.x, p.y)
- } else if (arguments[0] instanceof Envelope) {
- var other = arguments[0];
- if (this.isNull() || other.isNull()) {
- return false
- }
- return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy
- }
- } else if (arguments.length === 2) {
- var x = arguments[0];
- var y = arguments[1];
- if (this.isNull()) { return false }
- return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy
- }
- };
- Envelope.prototype.intersects = function intersects () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof Envelope) {
- var other = arguments[0];
- if (this.isNull() || other.isNull()) {
- return false
- }
- return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)
- } else if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- return this.intersects(p.x, p.y)
- }
- } else if (arguments.length === 2) {
- var x = arguments[0];
- var y = arguments[1];
- if (this.isNull()) { return false }
- return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)
- }
- };
- Envelope.prototype.getMinY = function getMinY () {
- return this._miny
- };
- Envelope.prototype.getMinX = function getMinX () {
- return this._minx
- };
- Envelope.prototype.expandToInclude = function expandToInclude () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- this.expandToInclude(p.x, p.y);
- } else if (arguments[0] instanceof Envelope) {
- var other = arguments[0];
- if (other.isNull()) {
- return null
- }
- if (this.isNull()) {
- this._minx = other.getMinX();
- this._maxx = other.getMaxX();
- this._miny = other.getMinY();
- this._maxy = other.getMaxY();
- } else {
- if (other._minx < this._minx) {
- this._minx = other._minx;
- }
- if (other._maxx > this._maxx) {
- this._maxx = other._maxx;
- }
- if (other._miny < this._miny) {
- this._miny = other._miny;
- }
- if (other._maxy > this._maxy) {
- this._maxy = other._maxy;
- }
- }
- }
- } else if (arguments.length === 2) {
- var x = arguments[0];
- var y = arguments[1];
- if (this.isNull()) {
- this._minx = x;
- this._maxx = x;
- this._miny = y;
- this._maxy = y;
- } else {
- if (x < this._minx) {
- this._minx = x;
- }
- if (x > this._maxx) {
- this._maxx = x;
- }
- if (y < this._miny) {
- this._miny = y;
- }
- if (y > this._maxy) {
- this._maxy = y;
- }
- }
- }
- };
- Envelope.prototype.minExtent = function minExtent () {
- if (this.isNull()) { return 0.0 }
- var w = this.getWidth();
- var h = this.getHeight();
- if (w < h) { return w }
- return h
- };
- Envelope.prototype.getWidth = function getWidth () {
- if (this.isNull()) {
- return 0
- }
- return this._maxx - this._minx
- };
- Envelope.prototype.compareTo = function compareTo (o) {
- var env = o;
- if (this.isNull()) {
- if (env.isNull()) { return 0 }
- return -1
- } else {
- if (env.isNull()) { return 1 }
- }
- if (this._minx < env._minx) { return -1 }
- if (this._minx > env._minx) { return 1 }
- if (this._miny < env._miny) { return -1 }
- if (this._miny > env._miny) { return 1 }
- if (this._maxx < env._maxx) { return -1 }
- if (this._maxx > env._maxx) { return 1 }
- if (this._maxy < env._maxy) { return -1 }
- if (this._maxy > env._maxy) { return 1 }
- return 0
- };
- Envelope.prototype.translate = function translate (transX, transY) {
- if (this.isNull()) {
- return null
- }
- this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);
- };
- Envelope.prototype.toString = function toString () {
- return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'
- };
- Envelope.prototype.setToNull = function setToNull () {
- this._minx = 0;
- this._maxx = -1;
- this._miny = 0;
- this._maxy = -1;
- };
- Envelope.prototype.getHeight = function getHeight () {
- if (this.isNull()) {
- return 0
- }
- return this._maxy - this._miny
- };
- Envelope.prototype.maxExtent = function maxExtent () {
- if (this.isNull()) { return 0.0 }
- var w = this.getWidth();
- var h = this.getHeight();
- if (w > h) { return w }
- return h
- };
- Envelope.prototype.expandBy = function expandBy () {
- if (arguments.length === 1) {
- var distance = arguments[0];
- this.expandBy(distance, distance);
- } else if (arguments.length === 2) {
- var deltaX = arguments[0];
- var deltaY = arguments[1];
- if (this.isNull()) { return null }
- this._minx -= deltaX;
- this._maxx += deltaX;
- this._miny -= deltaY;
- this._maxy += deltaY;
- if (this._minx > this._maxx || this._miny > this._maxy) { this.setToNull(); }
- }
- };
- Envelope.prototype.contains = function contains () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof Envelope) {
- var other = arguments[0];
- return this.covers(other)
- } else if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- return this.covers(p)
- }
- } else if (arguments.length === 2) {
- var x = arguments[0];
- var y = arguments[1];
- return this.covers(x, y)
- }
- };
- Envelope.prototype.centre = function centre () {
- if (this.isNull()) { return null }
- return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)
- };
- Envelope.prototype.init = function init () {
- if (arguments.length === 0) {
- this.setToNull();
- } else if (arguments.length === 1) {
- if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- this.init(p.x, p.x, p.y, p.y);
- } else if (arguments[0] instanceof Envelope) {
- var env = arguments[0];
- this._minx = env._minx;
- this._maxx = env._maxx;
- this._miny = env._miny;
- this._maxy = env._maxy;
- }
- } else if (arguments.length === 2) {
- var p1 = arguments[0];
- var p2 = arguments[1];
- this.init(p1.x, p2.x, p1.y, p2.y);
- } else if (arguments.length === 4) {
- var x1 = arguments[0];
- var x2 = arguments[1];
- var y1 = arguments[2];
- var y2 = arguments[3];
- if (x1 < x2) {
- this._minx = x1;
- this._maxx = x2;
- } else {
- this._minx = x2;
- this._maxx = x1;
- }
- if (y1 < y2) {
- this._miny = y1;
- this._maxy = y2;
- } else {
- this._miny = y2;
- this._maxy = y1;
- }
- }
- };
- Envelope.prototype.getMaxY = function getMaxY () {
- return this._maxy
- };
- Envelope.prototype.distance = function distance (env) {
- if (this.intersects(env)) { return 0 }
- var dx = 0.0;
- if (this._maxx < env._minx) { dx = env._minx - this._maxx; } else if (this._minx > env._maxx) { dx = this._minx - env._maxx; }
- var dy = 0.0;
- if (this._maxy < env._miny) { dy = env._miny - this._maxy; } else if (this._miny > env._maxy) { dy = this._miny - env._maxy; }
- if (dx === 0.0) { return dy }
- if (dy === 0.0) { return dx }
- return Math.sqrt(dx * dx + dy * dy)
- };
- Envelope.prototype.hashCode = function hashCode () {
- var result = 17;
- result = 37 * result + Coordinate.hashCode(this._minx);
- result = 37 * result + Coordinate.hashCode(this._maxx);
- result = 37 * result + Coordinate.hashCode(this._miny);
- result = 37 * result + Coordinate.hashCode(this._maxy);
- return result
- };
- Envelope.prototype.interfaces_ = function interfaces_ () {
- return [Comparable, Serializable]
- };
- Envelope.prototype.getClass = function getClass () {
- return Envelope
- };
- Envelope.intersects = function intersects () {
- if (arguments.length === 3) {
- var p1 = arguments[0];
- var p2 = arguments[1];
- var q = arguments[2];
- if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) {
- return true
- }
- return false
- } else if (arguments.length === 4) {
- var p1$1 = arguments[0];
- var p2$1 = arguments[1];
- var q1 = arguments[2];
- var q2 = arguments[3];
- var minq = Math.min(q1.x, q2.x);
- var maxq = Math.max(q1.x, q2.x);
- var minp = Math.min(p1$1.x, p2$1.x);
- var maxp = Math.max(p1$1.x, p2$1.x);
- if (minp > maxq) { return false }
- if (maxp < minq) { return false }
- minq = Math.min(q1.y, q2.y);
- maxq = Math.max(q1.y, q2.y);
- minp = Math.min(p1$1.y, p2$1.y);
- maxp = Math.max(p1$1.y, p2$1.y);
- if (minp > maxq) { return false }
- if (maxp < minq) { return false }
- return true
- }
- };
- staticAccessors$9.serialVersionUID.get = function () { return 5873921885273102420 };
- Object.defineProperties( Envelope, staticAccessors$9 );
- var regExes = {
- 'typeStr': /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
- 'emptyTypeStr': /^\s*(\w+)\s*EMPTY\s*$/,
- 'spaces': /\s+/,
- 'parenComma': /\)\s*,\s*\(/,
- 'doubleParenComma': /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
- 'trimParens': /^\s*\(?(.*?)\)?\s*$/
- };
- /**
- * Class for reading and writing Well-Known Text.
- *
- * NOTE: Adapted from OpenLayers 2.11 implementation.
- */
- /** Create a new parser for WKT
- *
- * @param {GeometryFactory} geometryFactory
- * @return An instance of WKTParser.
- * @constructor
- * @private
- */
- var WKTParser = function WKTParser (geometryFactory) {
- this.geometryFactory = geometryFactory || new GeometryFactory();
- };
- /**
- * Deserialize a WKT string and return a geometry. Supports WKT for POINT,
- * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,
- * and GEOMETRYCOLLECTION.
- *
- * @param {String} wkt A WKT string.
- * @return {Geometry} A geometry instance.
- * @private
- */
- WKTParser.prototype.read = function read (wkt) {
- var geometry, type, str;
- wkt = wkt.replace(/[\n\r]/g, ' ');
- var matches = regExes.typeStr.exec(wkt);
- if (wkt.search('EMPTY') !== -1) {
- matches = regExes.emptyTypeStr.exec(wkt);
- matches[2] = undefined;
- }
- if (matches) {
- type = matches[1].toLowerCase();
- str = matches[2];
- if (parse$1[type]) {
- geometry = parse$1[type].apply(this, [str]);
- }
- }
- if (geometry === undefined) { throw new Error('Could not parse WKT ' + wkt) }
- return geometry
- };
- /**
- * Serialize a geometry into a WKT string.
- *
- * @param {Geometry} geometry A feature or array of features.
- * @return {String} The WKT string representation of the input geometries.
- * @private
- */
- WKTParser.prototype.write = function write (geometry) {
- return this.extractGeometry(geometry)
- };
- /**
- * Entry point to construct the WKT for a single Geometry object.
- *
- * @param {Geometry} geometry
- * @return {String} A WKT string of representing the geometry.
- * @private
- */
- WKTParser.prototype.extractGeometry = function extractGeometry (geometry) {
- var type = geometry.getGeometryType().toLowerCase();
- if (!extract$1[type]) {
- return null
- }
- var wktType = type.toUpperCase();
- var data;
- if (geometry.isEmpty()) {
- data = wktType + ' EMPTY';
- } else {
- data = wktType + '(' + extract$1[type].apply(this, [geometry]) + ')';
- }
- return data
- };
- /**
- * Object with properties corresponding to the geometry types. Property values
- * are functions that do the actual data extraction.
- * @private
- */
- var extract$1 = {
- coordinate: function coordinate (coordinate$1) {
- return coordinate$1.x + ' ' + coordinate$1.y
- },
- /**
- * Return a space delimited string of point coordinates.
- *
- * @param {Point}
- * point
- * @return {String} A string of coordinates representing the point.
- */
- point: function point (point$1) {
- return extract$1.coordinate.call(this, point$1._coordinates._coordinates[0])
- },
- /**
- * Return a comma delimited string of point coordinates from a multipoint.
- *
- * @param {MultiPoint}
- * multipoint
- * @return {String} A string of point coordinate strings representing the
- * multipoint.
- */
- multipoint: function multipoint (multipoint$1) {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = multipoint$1._geometries.length; i < len; ++i) {
- array.push('(' + extract$1.point.apply(this$1, [multipoint$1._geometries[i]]) + ')');
- }
- return array.join(',')
- },
- /**
- * Return a comma delimited string of point coordinates from a line.
- *
- * @param {LineString} linestring
- * @return {String} A string of point coordinate strings representing the linestring.
- */
- linestring: function linestring (linestring$1) {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = linestring$1._points._coordinates.length; i < len; ++i) {
- array.push(extract$1.coordinate.apply(this$1, [linestring$1._points._coordinates[i]]));
- }
- return array.join(',')
- },
- linearring: function linearring (linearring$1) {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = linearring$1._points._coordinates.length; i < len; ++i) {
- array.push(extract$1.coordinate.apply(this$1, [linearring$1._points._coordinates[i]]));
- }
- return array.join(',')
- },
- /**
- * Return a comma delimited string of linestring strings from a
- * multilinestring.
- *
- * @param {MultiLineString} multilinestring
- * @return {String} A string of of linestring strings representing the multilinestring.
- */
- multilinestring: function multilinestring (multilinestring$1) {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = multilinestring$1._geometries.length; i < len; ++i) {
- array.push('(' +
- extract$1.linestring.apply(this$1, [multilinestring$1._geometries[i]]) +
- ')');
- }
- return array.join(',')
- },
- /**
- * Return a comma delimited string of linear ring arrays from a polygon.
- *
- * @param {Polygon} polygon
- * @return {String} An array of linear ring arrays representing the polygon.
- */
- polygon: function polygon (polygon$1) {
- var this$1 = this;
- var array = [];
- array.push('(' + extract$1.linestring.apply(this, [polygon$1._shell]) + ')');
- for (var i = 0, len = polygon$1._holes.length; i < len; ++i) {
- array.push('(' + extract$1.linestring.apply(this$1, [polygon$1._holes[i]]) + ')');
- }
- return array.join(',')
- },
- /**
- * Return an array of polygon arrays from a multipolygon.
- *
- * @param {MultiPolygon} multipolygon
- * @return {String} An array of polygon arrays representing the multipolygon.
- */
- multipolygon: function multipolygon (multipolygon$1) {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = multipolygon$1._geometries.length; i < len; ++i) {
- array.push('(' + extract$1.polygon.apply(this$1, [multipolygon$1._geometries[i]]) + ')');
- }
- return array.join(',')
- },
- /**
- * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an
- * geometrycollection.
- *
- * @param {GeometryCollection} collection
- * @return {String} internal WKT representation of the collection.
- */
- geometrycollection: function geometrycollection (collection) {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = collection._geometries.length; i < len; ++i) {
- array.push(this$1.extractGeometry(collection._geometries[i]));
- }
- return array.join(',')
- }
- };
- /**
- * Object with properties corresponding to the geometry types. Property values
- * are functions that do the actual parsing.
- * @private
- */
- var parse$1 = {
- /**
- * Return point geometry given a point WKT fragment.
- *
- * @param {String} str A WKT fragment representing the point.
- * @return {Point} A point geometry.
- * @private
- */
- point: function point (str) {
- if (str === undefined) {
- return this.geometryFactory.createPoint()
- }
- var coords = str.trim().split(regExes.spaces);
- return this.geometryFactory.createPoint(new Coordinate(Number.parseFloat(coords[0]),
- Number.parseFloat(coords[1])))
- },
- /**
- * Return a multipoint geometry given a multipoint WKT fragment.
- *
- * @param {String} str A WKT fragment representing the multipoint.
- * @return {Point} A multipoint feature.
- * @private
- */
- multipoint: function multipoint (str) {
- var this$1 = this;
- if (str === undefined) {
- return this.geometryFactory.createMultiPoint()
- }
- var point;
- var points = str.trim().split(',');
- var components = [];
- for (var i = 0, len = points.length; i < len; ++i) {
- point = points[i].replace(regExes.trimParens, '$1');
- components.push(parse$1.point.apply(this$1, [point]));
- }
- return this.geometryFactory.createMultiPoint(components)
- },
- /**
- * Return a linestring geometry given a linestring WKT fragment.
- *
- * @param {String} str A WKT fragment representing the linestring.
- * @return {LineString} A linestring geometry.
- * @private
- */
- linestring: function linestring (str) {
- if (str === undefined) {
- return this.geometryFactory.createLineString()
- }
- var points = str.trim().split(',');
- var components = [];
- var coords;
- for (var i = 0, len = points.length; i < len; ++i) {
- coords = points[i].trim().split(regExes.spaces);
- components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
- }
- return this.geometryFactory.createLineString(components)
- },
- /**
- * Return a linearring geometry given a linearring WKT fragment.
- *
- * @param {String} str A WKT fragment representing the linearring.
- * @return {LinearRing} A linearring geometry.
- * @private
- */
- linearring: function linearring (str) {
- if (str === undefined) {
- return this.geometryFactory.createLinearRing()
- }
- var points = str.trim().split(',');
- var components = [];
- var coords;
- for (var i = 0, len = points.length; i < len; ++i) {
- coords = points[i].trim().split(regExes.spaces);
- components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
- }
- return this.geometryFactory.createLinearRing(components)
- },
- /**
- * Return a multilinestring geometry given a multilinestring WKT fragment.
- *
- * @param {String} str A WKT fragment representing the multilinestring.
- * @return {MultiLineString} A multilinestring geometry.
- * @private
- */
- multilinestring: function multilinestring (str) {
- var this$1 = this;
- if (str === undefined) {
- return this.geometryFactory.createMultiLineString()
- }
- var line;
- var lines = str.trim().split(regExes.parenComma);
- var components = [];
- for (var i = 0, len = lines.length; i < len; ++i) {
- line = lines[i].replace(regExes.trimParens, '$1');
- components.push(parse$1.linestring.apply(this$1, [line]));
- }
- return this.geometryFactory.createMultiLineString(components)
- },
- /**
- * Return a polygon geometry given a polygon WKT fragment.
- *
- * @param {String} str A WKT fragment representing the polygon.
- * @return {Polygon} A polygon geometry.
- * @private
- */
- polygon: function polygon (str) {
- var this$1 = this;
- if (str === undefined) {
- return this.geometryFactory.createPolygon()
- }
- var ring, linestring, linearring;
- var rings = str.trim().split(regExes.parenComma);
- var shell;
- var holes = [];
- for (var i = 0, len = rings.length; i < len; ++i) {
- ring = rings[i].replace(regExes.trimParens, '$1');
- linestring = parse$1.linestring.apply(this$1, [ring]);
- linearring = this$1.geometryFactory.createLinearRing(linestring._points);
- if (i === 0) {
- shell = linearring;
- } else {
- holes.push(linearring);
- }
- }
- return this.geometryFactory.createPolygon(shell, holes)
- },
- /**
- * Return a multipolygon geometry given a multipolygon WKT fragment.
- *
- * @param {String} str A WKT fragment representing the multipolygon.
- * @return {MultiPolygon} A multipolygon geometry.
- * @private
- */
- multipolygon: function multipolygon (str) {
- var this$1 = this;
- if (str === undefined) {
- return this.geometryFactory.createMultiPolygon()
- }
- var polygon;
- var polygons = str.trim().split(regExes.doubleParenComma);
- var components = [];
- for (var i = 0, len = polygons.length; i < len; ++i) {
- polygon = polygons[i].replace(regExes.trimParens, '$1');
- components.push(parse$1.polygon.apply(this$1, [polygon]));
- }
- return this.geometryFactory.createMultiPolygon(components)
- },
- /**
- * Return a geometrycollection given a geometrycollection WKT fragment.
- *
- * @param {String} str A WKT fragment representing the geometrycollection.
- * @return {GeometryCollection}
- * @private
- */
- geometrycollection: function geometrycollection (str) {
- var this$1 = this;
- if (str === undefined) {
- return this.geometryFactory.createGeometryCollection()
- }
- // separate components of the collection with |
- str = str.replace(/,\s*([A-Za-z])/g, '|$1');
- var wktArray = str.trim().split('|');
- var components = [];
- for (var i = 0, len = wktArray.length; i < len; ++i) {
- components.push(this$1.read(wktArray[i]));
- }
- return this.geometryFactory.createGeometryCollection(components)
- }
- };
- /**
- * Writes the Well-Known Text representation of a {@link Geometry}. The
- * Well-Known Text format is defined in the <A
- * HREF="http://www.opengis.org/techno/specs.htm"> OGC Simple Features
- * Specification for SQL</A>.
- * <p>
- * The <code>WKTWriter</code> outputs coordinates rounded to the precision
- * model. Only the maximum number of decimal places necessary to represent the
- * ordinates to the required precision will be output.
- * <p>
- * The SFS WKT spec does not define a special tag for {@link LinearRing}s.
- * Under the spec, rings are output as <code>LINESTRING</code>s.
- */
- /**
- * @param {GeometryFactory} geometryFactory
- * @constructor
- */
- var WKTWriter = function WKTWriter (geometryFactory) {
- this.parser = new WKTParser(geometryFactory);
- };
- /**
- * Converts a <code>Geometry</code> to its Well-known Text representation.
- *
- * @param {Geometry} geometry a <code>Geometry</code> to process.
- * @return {string} a <Geometry Tagged Text> string (see the OpenGIS Simple
- * Features Specification).
- * @memberof WKTWriter
- */
- WKTWriter.prototype.write = function write (geometry) {
- return this.parser.write(geometry)
- };
- /**
- * Generates the WKT for a <tt>LINESTRING</tt> specified by two
- * {@link Coordinate}s.
- *
- * @param p0 the first coordinate.
- * @param p1 the second coordinate.
- *
- * @return the WKT.
- * @private
- */
- WKTWriter.toLineString = function toLineString (p0, p1) {
- if (arguments.length !== 2) {
- throw new Error('Not implemented')
- }
- return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'
- };
- var RuntimeException = (function (Error) {
- function RuntimeException (message) {
- Error.call(this, message);
- this.name = 'RuntimeException';
- this.message = message;
- this.stack = (new Error()).stack;
- }
- if ( Error ) RuntimeException.__proto__ = Error;
- RuntimeException.prototype = Object.create( Error && Error.prototype );
- RuntimeException.prototype.constructor = RuntimeException;
- return RuntimeException;
- }(Error));
- var AssertionFailedException = (function (RuntimeException$$1) {
- function AssertionFailedException () {
- RuntimeException$$1.call(this);
- if (arguments.length === 0) {
- RuntimeException$$1.call(this);
- } else if (arguments.length === 1) {
- var message = arguments[0];
- RuntimeException$$1.call(this, message);
- }
- }
- if ( RuntimeException$$1 ) AssertionFailedException.__proto__ = RuntimeException$$1;
- AssertionFailedException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
- AssertionFailedException.prototype.constructor = AssertionFailedException;
- AssertionFailedException.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- AssertionFailedException.prototype.getClass = function getClass () {
- return AssertionFailedException
- };
- return AssertionFailedException;
- }(RuntimeException));
- var Assert = function Assert () {};
- Assert.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Assert.prototype.getClass = function getClass () {
- return Assert
- };
- Assert.shouldNeverReachHere = function shouldNeverReachHere () {
- if (arguments.length === 0) {
- Assert.shouldNeverReachHere(null);
- } else if (arguments.length === 1) {
- var message = arguments[0];
- throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))
- }
- };
- Assert.isTrue = function isTrue () {
- var assertion;
- var message;
- if (arguments.length === 1) {
- assertion = arguments[0];
- Assert.isTrue(assertion, null);
- } else if (arguments.length === 2) {
- assertion = arguments[0];
- message = arguments[1];
- if (!assertion) {
- if (message === null) {
- throw new AssertionFailedException()
- } else {
- throw new AssertionFailedException(message)
- }
- }
- }
- };
- Assert.equals = function equals () {
- var expectedValue;
- var actualValue;
- var message;
- if (arguments.length === 2) {
- expectedValue = arguments[0];
- actualValue = arguments[1];
- Assert.equals(expectedValue, actualValue, null);
- } else if (arguments.length === 3) {
- expectedValue = arguments[0];
- actualValue = arguments[1];
- message = arguments[2];
- if (!actualValue.equals(expectedValue)) {
- throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))
- }
- }
- };
- var LineIntersector = function LineIntersector () {
- this._result = null;
- this._inputLines = Array(2).fill().map(function () { return Array(2); });
- this._intPt = new Array(2).fill(null);
- this._intLineIndex = null;
- this._isProper = null;
- this._pa = null;
- this._pb = null;
- this._precisionModel = null;
- this._intPt[0] = new Coordinate();
- this._intPt[1] = new Coordinate();
- this._pa = this._intPt[0];
- this._pb = this._intPt[1];
- this._result = 0;
- };
- var staticAccessors$10 = { DONT_INTERSECT: { configurable: true },DO_INTERSECT: { configurable: true },COLLINEAR: { configurable: true },NO_INTERSECTION: { configurable: true },POINT_INTERSECTION: { configurable: true },COLLINEAR_INTERSECTION: { configurable: true } };
- LineIntersector.prototype.getIndexAlongSegment = function getIndexAlongSegment (segmentIndex, intIndex) {
- this.computeIntLineIndex();
- return this._intLineIndex[segmentIndex][intIndex]
- };
- LineIntersector.prototype.getTopologySummary = function getTopologySummary () {
- var catBuf = new StringBuffer();
- if (this.isEndPoint()) { catBuf.append(' endpoint'); }
- if (this._isProper) { catBuf.append(' proper'); }
- if (this.isCollinear()) { catBuf.append(' collinear'); }
- return catBuf.toString()
- };
- LineIntersector.prototype.computeIntersection = function computeIntersection (p1, p2, p3, p4) {
- this._inputLines[0][0] = p1;
- this._inputLines[0][1] = p2;
- this._inputLines[1][0] = p3;
- this._inputLines[1][1] = p4;
- this._result = this.computeIntersect(p1, p2, p3, p4);
- };
- LineIntersector.prototype.getIntersectionNum = function getIntersectionNum () {
- return this._result
- };
- LineIntersector.prototype.computeIntLineIndex = function computeIntLineIndex () {
- if (arguments.length === 0) {
- if (this._intLineIndex === null) {
- this._intLineIndex = Array(2).fill().map(function () { return Array(2); });
- this.computeIntLineIndex(0);
- this.computeIntLineIndex(1);
- }
- } else if (arguments.length === 1) {
- var segmentIndex = arguments[0];
- var dist0 = this.getEdgeDistance(segmentIndex, 0);
- var dist1 = this.getEdgeDistance(segmentIndex, 1);
- if (dist0 > dist1) {
- this._intLineIndex[segmentIndex][0] = 0;
- this._intLineIndex[segmentIndex][1] = 1;
- } else {
- this._intLineIndex[segmentIndex][0] = 1;
- this._intLineIndex[segmentIndex][1] = 0;
- }
- }
- };
- LineIntersector.prototype.isProper = function isProper () {
- return this.hasIntersection() && this._isProper
- };
- LineIntersector.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
- this._precisionModel = precisionModel;
- };
- LineIntersector.prototype.isInteriorIntersection = function isInteriorIntersection () {
- var this$1 = this;
- if (arguments.length === 0) {
- if (this.isInteriorIntersection(0)) { return true }
- if (this.isInteriorIntersection(1)) { return true }
- return false
- } else if (arguments.length === 1) {
- var inputLineIndex = arguments[0];
- for (var i = 0; i < this._result; i++) {
- if (!(this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][0]) || this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][1]))) {
- return true
- }
- }
- return false
- }
- };
- LineIntersector.prototype.getIntersection = function getIntersection (intIndex) {
- return this._intPt[intIndex]
- };
- LineIntersector.prototype.isEndPoint = function isEndPoint () {
- return this.hasIntersection() && !this._isProper
- };
- LineIntersector.prototype.hasIntersection = function hasIntersection () {
- return this._result !== LineIntersector.NO_INTERSECTION
- };
- LineIntersector.prototype.getEdgeDistance = function getEdgeDistance (segmentIndex, intIndex) {
- var dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1]);
- return dist
- };
- LineIntersector.prototype.isCollinear = function isCollinear () {
- return this._result === LineIntersector.COLLINEAR_INTERSECTION
- };
- LineIntersector.prototype.toString = function toString () {
- return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()
- };
- LineIntersector.prototype.getEndpoint = function getEndpoint (segmentIndex, ptIndex) {
- return this._inputLines[segmentIndex][ptIndex]
- };
- LineIntersector.prototype.isIntersection = function isIntersection (pt) {
- var this$1 = this;
- for (var i = 0; i < this._result; i++) {
- if (this$1._intPt[i].equals2D(pt)) {
- return true
- }
- }
- return false
- };
- LineIntersector.prototype.getIntersectionAlongSegment = function getIntersectionAlongSegment (segmentIndex, intIndex) {
- this.computeIntLineIndex();
- return this._intPt[this._intLineIndex[segmentIndex][intIndex]]
- };
- LineIntersector.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- LineIntersector.prototype.getClass = function getClass () {
- return LineIntersector
- };
- LineIntersector.computeEdgeDistance = function computeEdgeDistance (p, p0, p1) {
- var dx = Math.abs(p1.x - p0.x);
- var dy = Math.abs(p1.y - p0.y);
- var dist = -1.0;
- if (p.equals(p0)) {
- dist = 0.0;
- } else if (p.equals(p1)) {
- if (dx > dy) { dist = dx; } else { dist = dy; }
- } else {
- var pdx = Math.abs(p.x - p0.x);
- var pdy = Math.abs(p.y - p0.y);
- if (dx > dy) { dist = pdx; } else { dist = pdy; }
- if (dist === 0.0 && !p.equals(p0)) {
- dist = Math.max(pdx, pdy);
- }
- }
- Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation');
- return dist
- };
- LineIntersector.nonRobustComputeEdgeDistance = function nonRobustComputeEdgeDistance (p, p1, p2) {
- var dx = p.x - p1.x;
- var dy = p.y - p1.y;
- var dist = Math.sqrt(dx * dx + dy * dy);
- Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation');
- return dist
- };
- staticAccessors$10.DONT_INTERSECT.get = function () { return 0 };
- staticAccessors$10.DO_INTERSECT.get = function () { return 1 };
- staticAccessors$10.COLLINEAR.get = function () { return 2 };
- staticAccessors$10.NO_INTERSECTION.get = function () { return 0 };
- staticAccessors$10.POINT_INTERSECTION.get = function () { return 1 };
- staticAccessors$10.COLLINEAR_INTERSECTION.get = function () { return 2 };
- Object.defineProperties( LineIntersector, staticAccessors$10 );
- var RobustLineIntersector = (function (LineIntersector$$1) {
- function RobustLineIntersector () {
- LineIntersector$$1.apply(this, arguments);
- }
- if ( LineIntersector$$1 ) RobustLineIntersector.__proto__ = LineIntersector$$1;
- RobustLineIntersector.prototype = Object.create( LineIntersector$$1 && LineIntersector$$1.prototype );
- RobustLineIntersector.prototype.constructor = RobustLineIntersector;
- RobustLineIntersector.prototype.isInSegmentEnvelopes = function isInSegmentEnvelopes (intPt) {
- var env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1]);
- var env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1]);
- return env0.contains(intPt) && env1.contains(intPt)
- };
- RobustLineIntersector.prototype.computeIntersection = function computeIntersection () {
- if (arguments.length === 3) {
- var p = arguments[0];
- var p1 = arguments[1];
- var p2 = arguments[2];
- this._isProper = false;
- if (Envelope.intersects(p1, p2, p)) {
- if (CGAlgorithms.orientationIndex(p1, p2, p) === 0 && CGAlgorithms.orientationIndex(p2, p1, p) === 0) {
- this._isProper = true;
- if (p.equals(p1) || p.equals(p2)) {
- this._isProper = false;
- }
- this._result = LineIntersector$$1.POINT_INTERSECTION;
- return null
- }
- }
- this._result = LineIntersector$$1.NO_INTERSECTION;
- } else { return LineIntersector$$1.prototype.computeIntersection.apply(this, arguments) }
- };
- RobustLineIntersector.prototype.normalizeToMinimum = function normalizeToMinimum (n1, n2, n3, n4, normPt) {
- normPt.x = this.smallestInAbsValue(n1.x, n2.x, n3.x, n4.x);
- normPt.y = this.smallestInAbsValue(n1.y, n2.y, n3.y, n4.y);
- n1.x -= normPt.x;
- n1.y -= normPt.y;
- n2.x -= normPt.x;
- n2.y -= normPt.y;
- n3.x -= normPt.x;
- n3.y -= normPt.y;
- n4.x -= normPt.x;
- n4.y -= normPt.y;
- };
- RobustLineIntersector.prototype.safeHCoordinateIntersection = function safeHCoordinateIntersection (p1, p2, q1, q2) {
- var intPt = null;
- try {
- intPt = HCoordinate.intersection(p1, p2, q1, q2);
- } catch (e) {
- if (e instanceof NotRepresentableException) {
- intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2);
- } else { throw e }
- } finally {}
- return intPt
- };
- RobustLineIntersector.prototype.intersection = function intersection (p1, p2, q1, q2) {
- var intPt = this.intersectionWithNormalization(p1, p2, q1, q2);
- if (!this.isInSegmentEnvelopes(intPt)) {
- intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2));
- }
- if (this._precisionModel !== null) {
- this._precisionModel.makePrecise(intPt);
- }
- return intPt
- };
- RobustLineIntersector.prototype.smallestInAbsValue = function smallestInAbsValue (x1, x2, x3, x4) {
- var x = x1;
- var xabs = Math.abs(x);
- if (Math.abs(x2) < xabs) {
- x = x2;
- xabs = Math.abs(x2);
- }
- if (Math.abs(x3) < xabs) {
- x = x3;
- xabs = Math.abs(x3);
- }
- if (Math.abs(x4) < xabs) {
- x = x4;
- }
- return x
- };
- RobustLineIntersector.prototype.checkDD = function checkDD (p1, p2, q1, q2, intPt) {
- var intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2);
- var isIn = this.isInSegmentEnvelopes(intPtDD);
- System.out.println('DD in env = ' + isIn + ' --------------------- ' + intPtDD);
- if (intPt.distance(intPtDD) > 0.0001) {
- System.out.println('Distance = ' + intPt.distance(intPtDD));
- }
- };
- RobustLineIntersector.prototype.intersectionWithNormalization = function intersectionWithNormalization (p1, p2, q1, q2) {
- var n1 = new Coordinate(p1);
- var n2 = new Coordinate(p2);
- var n3 = new Coordinate(q1);
- var n4 = new Coordinate(q2);
- var normPt = new Coordinate();
- this.normalizeToEnvCentre(n1, n2, n3, n4, normPt);
- var intPt = this.safeHCoordinateIntersection(n1, n2, n3, n4);
- intPt.x += normPt.x;
- intPt.y += normPt.y;
- return intPt
- };
- RobustLineIntersector.prototype.computeCollinearIntersection = function computeCollinearIntersection (p1, p2, q1, q2) {
- var p1q1p2 = Envelope.intersects(p1, p2, q1);
- var p1q2p2 = Envelope.intersects(p1, p2, q2);
- var q1p1q2 = Envelope.intersects(q1, q2, p1);
- var q1p2q2 = Envelope.intersects(q1, q2, p2);
- if (p1q1p2 && p1q2p2) {
- this._intPt[0] = q1;
- this._intPt[1] = q2;
- return LineIntersector$$1.COLLINEAR_INTERSECTION
- }
- if (q1p1q2 && q1p2q2) {
- this._intPt[0] = p1;
- this._intPt[1] = p2;
- return LineIntersector$$1.COLLINEAR_INTERSECTION
- }
- if (p1q1p2 && q1p1q2) {
- this._intPt[0] = q1;
- this._intPt[1] = p1;
- return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
- }
- if (p1q1p2 && q1p2q2) {
- this._intPt[0] = q1;
- this._intPt[1] = p2;
- return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
- }
- if (p1q2p2 && q1p1q2) {
- this._intPt[0] = q2;
- this._intPt[1] = p1;
- return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
- }
- if (p1q2p2 && q1p2q2) {
- this._intPt[0] = q2;
- this._intPt[1] = p2;
- return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
- }
- return LineIntersector$$1.NO_INTERSECTION
- };
- RobustLineIntersector.prototype.normalizeToEnvCentre = function normalizeToEnvCentre (n00, n01, n10, n11, normPt) {
- var minX0 = n00.x < n01.x ? n00.x : n01.x;
- var minY0 = n00.y < n01.y ? n00.y : n01.y;
- var maxX0 = n00.x > n01.x ? n00.x : n01.x;
- var maxY0 = n00.y > n01.y ? n00.y : n01.y;
- var minX1 = n10.x < n11.x ? n10.x : n11.x;
- var minY1 = n10.y < n11.y ? n10.y : n11.y;
- var maxX1 = n10.x > n11.x ? n10.x : n11.x;
- var maxY1 = n10.y > n11.y ? n10.y : n11.y;
- var intMinX = minX0 > minX1 ? minX0 : minX1;
- var intMaxX = maxX0 < maxX1 ? maxX0 : maxX1;
- var intMinY = minY0 > minY1 ? minY0 : minY1;
- var intMaxY = maxY0 < maxY1 ? maxY0 : maxY1;
- var intMidX = (intMinX + intMaxX) / 2.0;
- var intMidY = (intMinY + intMaxY) / 2.0;
- normPt.x = intMidX;
- normPt.y = intMidY;
- n00.x -= normPt.x;
- n00.y -= normPt.y;
- n01.x -= normPt.x;
- n01.y -= normPt.y;
- n10.x -= normPt.x;
- n10.y -= normPt.y;
- n11.x -= normPt.x;
- n11.y -= normPt.y;
- };
- RobustLineIntersector.prototype.computeIntersect = function computeIntersect (p1, p2, q1, q2) {
- this._isProper = false;
- if (!Envelope.intersects(p1, p2, q1, q2)) { return LineIntersector$$1.NO_INTERSECTION }
- var Pq1 = CGAlgorithms.orientationIndex(p1, p2, q1);
- var Pq2 = CGAlgorithms.orientationIndex(p1, p2, q2);
- if ((Pq1 > 0 && Pq2 > 0) || (Pq1 < 0 && Pq2 < 0)) {
- return LineIntersector$$1.NO_INTERSECTION
- }
- var Qp1 = CGAlgorithms.orientationIndex(q1, q2, p1);
- var Qp2 = CGAlgorithms.orientationIndex(q1, q2, p2);
- if ((Qp1 > 0 && Qp2 > 0) || (Qp1 < 0 && Qp2 < 0)) {
- return LineIntersector$$1.NO_INTERSECTION
- }
- var collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0;
- if (collinear) {
- return this.computeCollinearIntersection(p1, p2, q1, q2)
- }
- if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {
- this._isProper = false;
- if (p1.equals2D(q1) || p1.equals2D(q2)) {
- this._intPt[0] = p1;
- } else if (p2.equals2D(q1) || p2.equals2D(q2)) {
- this._intPt[0] = p2;
- } else if (Pq1 === 0) {
- this._intPt[0] = new Coordinate(q1);
- } else if (Pq2 === 0) {
- this._intPt[0] = new Coordinate(q2);
- } else if (Qp1 === 0) {
- this._intPt[0] = new Coordinate(p1);
- } else if (Qp2 === 0) {
- this._intPt[0] = new Coordinate(p2);
- }
- } else {
- this._isProper = true;
- this._intPt[0] = this.intersection(p1, p2, q1, q2);
- }
- return LineIntersector$$1.POINT_INTERSECTION
- };
- RobustLineIntersector.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- RobustLineIntersector.prototype.getClass = function getClass () {
- return RobustLineIntersector
- };
- RobustLineIntersector.nearestEndpoint = function nearestEndpoint (p1, p2, q1, q2) {
- var nearestPt = p1;
- var minDist = CGAlgorithms.distancePointLine(p1, q1, q2);
- var dist = CGAlgorithms.distancePointLine(p2, q1, q2);
- if (dist < minDist) {
- minDist = dist;
- nearestPt = p2;
- }
- dist = CGAlgorithms.distancePointLine(q1, p1, p2);
- if (dist < minDist) {
- minDist = dist;
- nearestPt = q1;
- }
- dist = CGAlgorithms.distancePointLine(q2, p1, p2);
- if (dist < minDist) {
- minDist = dist;
- nearestPt = q2;
- }
- return nearestPt
- };
- return RobustLineIntersector;
- }(LineIntersector));
- var RobustDeterminant = function RobustDeterminant () {};
- RobustDeterminant.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- RobustDeterminant.prototype.getClass = function getClass () {
- return RobustDeterminant
- };
- RobustDeterminant.orientationIndex = function orientationIndex (p1, p2, q) {
- var dx1 = p2.x - p1.x;
- var dy1 = p2.y - p1.y;
- var dx2 = q.x - p2.x;
- var dy2 = q.y - p2.y;
- return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)
- };
- RobustDeterminant.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
- var sign = null;
- var swap = null;
- var k = null;
- sign = 1;
- if (x1 === 0.0 || y2 === 0.0) {
- if (y1 === 0.0 || x2 === 0.0) {
- return 0
- } else if (y1 > 0) {
- if (x2 > 0) {
- return -sign
- } else {
- return sign
- }
- } else {
- if (x2 > 0) {
- return sign
- } else {
- return -sign
- }
- }
- }
- if (y1 === 0.0 || x2 === 0.0) {
- if (y2 > 0) {
- if (x1 > 0) {
- return sign
- } else {
- return -sign
- }
- } else {
- if (x1 > 0) {
- return -sign
- } else {
- return sign
- }
- }
- }
- if (y1 > 0.0) {
- if (y2 > 0.0) {
- if (y1 <= y2) {
-
- } else {
- sign = -sign;
- swap = x1;
- x1 = x2;
- x2 = swap;
- swap = y1;
- y1 = y2;
- y2 = swap;
- }
- } else {
- if (y1 <= -y2) {
- sign = -sign;
- x2 = -x2;
- y2 = -y2;
- } else {
- swap = x1;
- x1 = -x2;
- x2 = swap;
- swap = y1;
- y1 = -y2;
- y2 = swap;
- }
- }
- } else {
- if (y2 > 0.0) {
- if (-y1 <= y2) {
- sign = -sign;
- x1 = -x1;
- y1 = -y1;
- } else {
- swap = -x1;
- x1 = x2;
- x2 = swap;
- swap = -y1;
- y1 = y2;
- y2 = swap;
- }
- } else {
- if (y1 >= y2) {
- x1 = -x1;
- y1 = -y1;
- x2 = -x2;
- y2 = -y2;
- } else {
- sign = -sign;
- swap = -x1;
- x1 = -x2;
- x2 = swap;
- swap = -y1;
- y1 = -y2;
- y2 = swap;
- }
- }
- }
- if (x1 > 0.0) {
- if (x2 > 0.0) {
- if (x1 <= x2) {
-
- } else {
- return sign
- }
- } else {
- return sign
- }
- } else {
- if (x2 > 0.0) {
- return -sign
- } else {
- if (x1 >= x2) {
- sign = -sign;
- x1 = -x1;
- x2 = -x2;
- } else {
- return -sign
- }
- }
- }
- while (true) {
- k = Math.floor(x2 / x1);
- x2 = x2 - k * x1;
- y2 = y2 - k * y1;
- if (y2 < 0.0) {
- return -sign
- }
- if (y2 > y1) {
- return sign
- }
- if (x1 > x2 + x2) {
- if (y1 < y2 + y2) {
- return sign
- }
- } else {
- if (y1 > y2 + y2) {
- return -sign
- } else {
- x2 = x1 - x2;
- y2 = y1 - y2;
- sign = -sign;
- }
- }
- if (y2 === 0.0) {
- if (x2 === 0.0) {
- return 0
- } else {
- return -sign
- }
- }
- if (x2 === 0.0) {
- return sign
- }
- k = Math.floor(x1 / x2);
- x1 = x1 - k * x2;
- y1 = y1 - k * y2;
- if (y1 < 0.0) {
- return sign
- }
- if (y1 > y2) {
- return -sign
- }
- if (x2 > x1 + x1) {
- if (y2 < y1 + y1) {
- return -sign
- }
- } else {
- if (y2 > y1 + y1) {
- return sign
- } else {
- x1 = x2 - x1;
- y1 = y2 - y1;
- sign = -sign;
- }
- }
- if (y1 === 0.0) {
- if (x1 === 0.0) {
- return 0
- } else {
- return sign
- }
- }
- if (x1 === 0.0) {
- return -sign
- }
- }
- };
- var RayCrossingCounter = function RayCrossingCounter () {
- this._p = null;
- this._crossingCount = 0;
- this._isPointOnSegment = false;
- var p = arguments[0];
- this._p = p;
- };
- RayCrossingCounter.prototype.countSegment = function countSegment (p1, p2) {
- if (p1.x < this._p.x && p2.x < this._p.x) { return null }
- if (this._p.x === p2.x && this._p.y === p2.y) {
- this._isPointOnSegment = true;
- return null
- }
- if (p1.y === this._p.y && p2.y === this._p.y) {
- var minx = p1.x;
- var maxx = p2.x;
- if (minx > maxx) {
- minx = p2.x;
- maxx = p1.x;
- }
- if (this._p.x >= minx && this._p.x <= maxx) {
- this._isPointOnSegment = true;
- }
- return null
- }
- if ((p1.y > this._p.y && p2.y <= this._p.y) || (p2.y > this._p.y && p1.y <= this._p.y)) {
- var x1 = p1.x - this._p.x;
- var y1 = p1.y - this._p.y;
- var x2 = p2.x - this._p.x;
- var y2 = p2.y - this._p.y;
- var xIntSign = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2);
- if (xIntSign === 0.0) {
- this._isPointOnSegment = true;
- return null
- }
- if (y2 < y1) { xIntSign = -xIntSign; }
- if (xIntSign > 0.0) {
- this._crossingCount++;
- }
- }
- };
- RayCrossingCounter.prototype.isPointInPolygon = function isPointInPolygon () {
- return this.getLocation() !== Location.EXTERIOR
- };
- RayCrossingCounter.prototype.getLocation = function getLocation () {
- if (this._isPointOnSegment) { return Location.BOUNDARY }
- if (this._crossingCount % 2 === 1) {
- return Location.INTERIOR
- }
- return Location.EXTERIOR
- };
- RayCrossingCounter.prototype.isOnSegment = function isOnSegment () {
- return this._isPointOnSegment
- };
- RayCrossingCounter.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- RayCrossingCounter.prototype.getClass = function getClass () {
- return RayCrossingCounter
- };
- RayCrossingCounter.locatePointInRing = function locatePointInRing () {
- if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {
- var p = arguments[0];
- var ring = arguments[1];
- var counter = new RayCrossingCounter(p);
- var p1 = new Coordinate();
- var p2 = new Coordinate();
- for (var i = 1; i < ring.size(); i++) {
- ring.getCoordinate(i, p1);
- ring.getCoordinate(i - 1, p2);
- counter.countSegment(p1, p2);
- if (counter.isOnSegment()) { return counter.getLocation() }
- }
- return counter.getLocation()
- } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {
- var p$1 = arguments[0];
- var ring$1 = arguments[1];
- var counter$1 = new RayCrossingCounter(p$1);
- for (var i$1 = 1; i$1 < ring$1.length; i$1++) {
- var p1$1 = ring$1[i$1];
- var p2$1 = ring$1[i$1 - 1];
- counter$1.countSegment(p1$1, p2$1);
- if (counter$1.isOnSegment()) { return counter$1.getLocation() }
- }
- return counter$1.getLocation()
- }
- };
- var CGAlgorithms = function CGAlgorithms () {};
- var staticAccessors$3 = { CLOCKWISE: { configurable: true },RIGHT: { configurable: true },COUNTERCLOCKWISE: { configurable: true },LEFT: { configurable: true },COLLINEAR: { configurable: true },STRAIGHT: { configurable: true } };
- CGAlgorithms.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CGAlgorithms.prototype.getClass = function getClass () {
- return CGAlgorithms
- };
- CGAlgorithms.orientationIndex = function orientationIndex (p1, p2, q) {
- return CGAlgorithmsDD.orientationIndex(p1, p2, q)
- };
- CGAlgorithms.signedArea = function signedArea () {
- if (arguments[0] instanceof Array) {
- var ring = arguments[0];
- if (ring.length < 3) { return 0.0 }
- var sum = 0.0;
- var x0 = ring[0].x;
- for (var i = 1; i < ring.length - 1; i++) {
- var x = ring[i].x - x0;
- var y1 = ring[i + 1].y;
- var y2 = ring[i - 1].y;
- sum += x * (y2 - y1);
- }
- return sum / 2.0
- } else if (hasInterface(arguments[0], CoordinateSequence)) {
- var ring$1 = arguments[0];
- var n = ring$1.size();
- if (n < 3) { return 0.0 }
- var p0 = new Coordinate();
- var p1 = new Coordinate();
- var p2 = new Coordinate();
- ring$1.getCoordinate(0, p1);
- ring$1.getCoordinate(1, p2);
- var x0$1 = p1.x;
- p2.x -= x0$1;
- var sum$1 = 0.0;
- for (var i$1 = 1; i$1 < n - 1; i$1++) {
- p0.y = p1.y;
- p1.x = p2.x;
- p1.y = p2.y;
- ring$1.getCoordinate(i$1 + 1, p2);
- p2.x -= x0$1;
- sum$1 += p1.x * (p0.y - p2.y);
- }
- return sum$1 / 2.0
- }
- };
- CGAlgorithms.distanceLineLine = function distanceLineLine (A, B, C, D) {
- if (A.equals(B)) { return CGAlgorithms.distancePointLine(A, C, D) }
- if (C.equals(D)) { return CGAlgorithms.distancePointLine(D, A, B) }
- var noIntersection = false;
- if (!Envelope.intersects(A, B, C, D)) {
- noIntersection = true;
- } else {
- var denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);
- if (denom === 0) {
- noIntersection = true;
- } else {
- var rNumb = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);
- var sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);
- var s = sNum / denom;
- var r = rNumb / denom;
- if (r < 0 || r > 1 || s < 0 || s > 1) {
- noIntersection = true;
- }
- }
- }
- if (noIntersection) {
- return MathUtil.min(CGAlgorithms.distancePointLine(A, C, D), CGAlgorithms.distancePointLine(B, C, D), CGAlgorithms.distancePointLine(C, A, B), CGAlgorithms.distancePointLine(D, A, B))
- }
- return 0.0
- };
- CGAlgorithms.isPointInRing = function isPointInRing (p, ring) {
- return CGAlgorithms.locatePointInRing(p, ring) !== Location.EXTERIOR
- };
- CGAlgorithms.computeLength = function computeLength (pts) {
- var n = pts.size();
- if (n <= 1) { return 0.0 }
- var len = 0.0;
- var p = new Coordinate();
- pts.getCoordinate(0, p);
- var x0 = p.x;
- var y0 = p.y;
- for (var i = 1; i < n; i++) {
- pts.getCoordinate(i, p);
- var x1 = p.x;
- var y1 = p.y;
- var dx = x1 - x0;
- var dy = y1 - y0;
- len += Math.sqrt(dx * dx + dy * dy);
- x0 = x1;
- y0 = y1;
- }
- return len
- };
- CGAlgorithms.isCCW = function isCCW (ring) {
- var nPts = ring.length - 1;
- if (nPts < 3) { throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined') }
- var hiPt = ring[0];
- var hiIndex = 0;
- for (var i = 1; i <= nPts; i++) {
- var p = ring[i];
- if (p.y > hiPt.y) {
- hiPt = p;
- hiIndex = i;
- }
- }
- var iPrev = hiIndex;
- do {
- iPrev = iPrev - 1;
- if (iPrev < 0) { iPrev = nPts; }
- } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)
- var iNext = hiIndex;
- do {
- iNext = (iNext + 1) % nPts;
- } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)
- var prev = ring[iPrev];
- var next = ring[iNext];
- if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) { return false }
- var disc = CGAlgorithms.computeOrientation(prev, hiPt, next);
- var isCCW = false;
- if (disc === 0) {
- isCCW = prev.x > next.x;
- } else {
- isCCW = disc > 0;
- }
- return isCCW
- };
- CGAlgorithms.locatePointInRing = function locatePointInRing (p, ring) {
- return RayCrossingCounter.locatePointInRing(p, ring)
- };
- CGAlgorithms.distancePointLinePerpendicular = function distancePointLinePerpendicular (p, A, B) {
- var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
- var s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;
- return Math.abs(s) * Math.sqrt(len2)
- };
- CGAlgorithms.computeOrientation = function computeOrientation (p1, p2, q) {
- return CGAlgorithms.orientationIndex(p1, p2, q)
- };
- CGAlgorithms.distancePointLine = function distancePointLine () {
- if (arguments.length === 2) {
- var p = arguments[0];
- var line = arguments[1];
- if (line.length === 0) { throw new IllegalArgumentException('Line array must contain at least one vertex') }
- var minDistance = p.distance(line[0]);
- for (var i = 0; i < line.length - 1; i++) {
- var dist = CGAlgorithms.distancePointLine(p, line[i], line[i + 1]);
- if (dist < minDistance) {
- minDistance = dist;
- }
- }
- return minDistance
- } else if (arguments.length === 3) {
- var p$1 = arguments[0];
- var A = arguments[1];
- var B = arguments[2];
- if (A.x === B.x && A.y === B.y) { return p$1.distance(A) }
- var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
- var r = ((p$1.x - A.x) * (B.x - A.x) + (p$1.y - A.y) * (B.y - A.y)) / len2;
- if (r <= 0.0) { return p$1.distance(A) }
- if (r >= 1.0) { return p$1.distance(B) }
- var s = ((A.y - p$1.y) * (B.x - A.x) - (A.x - p$1.x) * (B.y - A.y)) / len2;
- return Math.abs(s) * Math.sqrt(len2)
- }
- };
- CGAlgorithms.isOnLine = function isOnLine (p, pt) {
- var lineIntersector = new RobustLineIntersector();
- for (var i = 1; i < pt.length; i++) {
- var p0 = pt[i - 1];
- var p1 = pt[i];
- lineIntersector.computeIntersection(p, p0, p1);
- if (lineIntersector.hasIntersection()) {
- return true
- }
- }
- return false
- };
- staticAccessors$3.CLOCKWISE.get = function () { return -1 };
- staticAccessors$3.RIGHT.get = function () { return CGAlgorithms.CLOCKWISE };
- staticAccessors$3.COUNTERCLOCKWISE.get = function () { return 1 };
- staticAccessors$3.LEFT.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
- staticAccessors$3.COLLINEAR.get = function () { return 0 };
- staticAccessors$3.STRAIGHT.get = function () { return CGAlgorithms.COLLINEAR };
- Object.defineProperties( CGAlgorithms, staticAccessors$3 );
- var GeometryComponentFilter = function GeometryComponentFilter () {};
- GeometryComponentFilter.prototype.filter = function filter (geom) {};
- GeometryComponentFilter.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryComponentFilter.prototype.getClass = function getClass () {
- return GeometryComponentFilter
- };
- var Geometry = function Geometry () {
- var factory = arguments[0];
- this._envelope = null;
- this._factory = null;
- this._SRID = null;
- this._userData = null;
- this._factory = factory;
- this._SRID = factory.getSRID();
- };
- var staticAccessors$11 = { serialVersionUID: { configurable: true },SORTINDEX_POINT: { configurable: true },SORTINDEX_MULTIPOINT: { configurable: true },SORTINDEX_LINESTRING: { configurable: true },SORTINDEX_LINEARRING: { configurable: true },SORTINDEX_MULTILINESTRING: { configurable: true },SORTINDEX_POLYGON: { configurable: true },SORTINDEX_MULTIPOLYGON: { configurable: true },SORTINDEX_GEOMETRYCOLLECTION: { configurable: true },geometryChangedFilter: { configurable: true } };
- Geometry.prototype.isGeometryCollection = function isGeometryCollection () {
- return this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION
- };
- Geometry.prototype.getFactory = function getFactory () {
- return this._factory
- };
- Geometry.prototype.getGeometryN = function getGeometryN (n) {
- return this
- };
- Geometry.prototype.getArea = function getArea () {
- return 0.0
- };
- Geometry.prototype.isRectangle = function isRectangle () {
- return false
- };
- Geometry.prototype.equals = function equals () {
- if (arguments[0] instanceof Geometry) {
- var g$1 = arguments[0];
- if (g$1 === null) { return false }
- return this.equalsTopo(g$1)
- } else if (arguments[0] instanceof Object) {
- var o = arguments[0];
- if (!(o instanceof Geometry)) { return false }
- var g = o;
- return this.equalsExact(g)
- }
- };
- Geometry.prototype.equalsExact = function equalsExact (other) {
- return this === other || this.equalsExact(other, 0)
- };
- Geometry.prototype.geometryChanged = function geometryChanged () {
- this.apply(Geometry.geometryChangedFilter);
- };
- Geometry.prototype.geometryChangedAction = function geometryChangedAction () {
- this._envelope = null;
- };
- Geometry.prototype.equalsNorm = function equalsNorm (g) {
- if (g === null) { return false }
- return this.norm().equalsExact(g.norm())
- };
- Geometry.prototype.getLength = function getLength () {
- return 0.0
- };
- Geometry.prototype.getNumGeometries = function getNumGeometries () {
- return 1
- };
- Geometry.prototype.compareTo = function compareTo () {
- if (arguments.length === 1) {
- var o = arguments[0];
- var other = o;
- if (this.getSortIndex() !== other.getSortIndex()) {
- return this.getSortIndex() - other.getSortIndex()
- }
- if (this.isEmpty() && other.isEmpty()) {
- return 0
- }
- if (this.isEmpty()) {
- return -1
- }
- if (other.isEmpty()) {
- return 1
- }
- return this.compareToSameClass(o)
- } else if (arguments.length === 2) {
- var other$1 = arguments[0];
- var comp = arguments[1];
- if (this.getSortIndex() !== other$1.getSortIndex()) {
- return this.getSortIndex() - other$1.getSortIndex()
- }
- if (this.isEmpty() && other$1.isEmpty()) {
- return 0
- }
- if (this.isEmpty()) {
- return -1
- }
- if (other$1.isEmpty()) {
- return 1
- }
- return this.compareToSameClass(other$1, comp)
- }
- };
- Geometry.prototype.getUserData = function getUserData () {
- return this._userData
- };
- Geometry.prototype.getSRID = function getSRID () {
- return this._SRID
- };
- Geometry.prototype.getEnvelope = function getEnvelope () {
- return this.getFactory().toGeometry(this.getEnvelopeInternal())
- };
- Geometry.prototype.checkNotGeometryCollection = function checkNotGeometryCollection (g) {
- if (g.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION) {
- throw new IllegalArgumentException('This method does not support GeometryCollection arguments')
- }
- };
- Geometry.prototype.equal = function equal (a, b, tolerance) {
- if (tolerance === 0) {
- return a.equals(b)
- }
- return a.distance(b) <= tolerance
- };
- Geometry.prototype.norm = function norm () {
- var copy = this.copy();
- copy.normalize();
- return copy
- };
- Geometry.prototype.getPrecisionModel = function getPrecisionModel () {
- return this._factory.getPrecisionModel()
- };
- Geometry.prototype.getEnvelopeInternal = function getEnvelopeInternal () {
- if (this._envelope === null) {
- this._envelope = this.computeEnvelopeInternal();
- }
- return new Envelope(this._envelope)
- };
- Geometry.prototype.setSRID = function setSRID (SRID) {
- this._SRID = SRID;
- };
- Geometry.prototype.setUserData = function setUserData (userData) {
- this._userData = userData;
- };
- Geometry.prototype.compare = function compare (a, b) {
- var i = a.iterator();
- var j = b.iterator();
- while (i.hasNext() && j.hasNext()) {
- var aElement = i.next();
- var bElement = j.next();
- var comparison = aElement.compareTo(bElement);
- if (comparison !== 0) {
- return comparison
- }
- }
- if (i.hasNext()) {
- return 1
- }
- if (j.hasNext()) {
- return -1
- }
- return 0
- };
- Geometry.prototype.hashCode = function hashCode () {
- return this.getEnvelopeInternal().hashCode()
- };
- Geometry.prototype.isGeometryCollectionOrDerived = function isGeometryCollectionOrDerived () {
- if (this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOINT || this.getSortIndex() === Geometry.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOLYGON) {
- return true
- }
- return false
- };
- Geometry.prototype.interfaces_ = function interfaces_ () {
- return [Clonable, Comparable, Serializable]
- };
- Geometry.prototype.getClass = function getClass () {
- return Geometry
- };
- Geometry.hasNonEmptyElements = function hasNonEmptyElements (geometries) {
- for (var i = 0; i < geometries.length; i++) {
- if (!geometries[i].isEmpty()) {
- return true
- }
- }
- return false
- };
- Geometry.hasNullElements = function hasNullElements (array) {
- for (var i = 0; i < array.length; i++) {
- if (array[i] === null) {
- return true
- }
- }
- return false
- };
- staticAccessors$11.serialVersionUID.get = function () { return 8763622679187376702 };
- staticAccessors$11.SORTINDEX_POINT.get = function () { return 0 };
- staticAccessors$11.SORTINDEX_MULTIPOINT.get = function () { return 1 };
- staticAccessors$11.SORTINDEX_LINESTRING.get = function () { return 2 };
- staticAccessors$11.SORTINDEX_LINEARRING.get = function () { return 3 };
- staticAccessors$11.SORTINDEX_MULTILINESTRING.get = function () { return 4 };
- staticAccessors$11.SORTINDEX_POLYGON.get = function () { return 5 };
- staticAccessors$11.SORTINDEX_MULTIPOLYGON.get = function () { return 6 };
- staticAccessors$11.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 };
- staticAccessors$11.geometryChangedFilter.get = function () { return geometryChangedFilter };
- Object.defineProperties( Geometry, staticAccessors$11 );
- var geometryChangedFilter = function geometryChangedFilter () {};
- geometryChangedFilter.interfaces_ = function interfaces_ () {
- return [GeometryComponentFilter]
- };
- geometryChangedFilter.filter = function filter (geom) {
- geom.geometryChangedAction();
- };
- var CoordinateFilter = function CoordinateFilter () {};
- CoordinateFilter.prototype.filter = function filter (coord) {};
- CoordinateFilter.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CoordinateFilter.prototype.getClass = function getClass () {
- return CoordinateFilter
- };
- var BoundaryNodeRule = function BoundaryNodeRule () {};
- var staticAccessors$12 = { Mod2BoundaryNodeRule: { configurable: true },EndPointBoundaryNodeRule: { configurable: true },MultiValentEndPointBoundaryNodeRule: { configurable: true },MonoValentEndPointBoundaryNodeRule: { configurable: true },MOD2_BOUNDARY_RULE: { configurable: true },ENDPOINT_BOUNDARY_RULE: { configurable: true },MULTIVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },MONOVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },OGC_SFS_BOUNDARY_RULE: { configurable: true } };
- BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {};
- BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BoundaryNodeRule.prototype.getClass = function getClass () {
- return BoundaryNodeRule
- };
- staticAccessors$12.Mod2BoundaryNodeRule.get = function () { return Mod2BoundaryNodeRule };
- staticAccessors$12.EndPointBoundaryNodeRule.get = function () { return EndPointBoundaryNodeRule };
- staticAccessors$12.MultiValentEndPointBoundaryNodeRule.get = function () { return MultiValentEndPointBoundaryNodeRule };
- staticAccessors$12.MonoValentEndPointBoundaryNodeRule.get = function () { return MonoValentEndPointBoundaryNodeRule };
- staticAccessors$12.MOD2_BOUNDARY_RULE.get = function () { return new Mod2BoundaryNodeRule() };
- staticAccessors$12.ENDPOINT_BOUNDARY_RULE.get = function () { return new EndPointBoundaryNodeRule() };
- staticAccessors$12.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MultiValentEndPointBoundaryNodeRule() };
- staticAccessors$12.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MonoValentEndPointBoundaryNodeRule() };
- staticAccessors$12.OGC_SFS_BOUNDARY_RULE.get = function () { return BoundaryNodeRule.MOD2_BOUNDARY_RULE };
- Object.defineProperties( BoundaryNodeRule, staticAccessors$12 );
- var Mod2BoundaryNodeRule = function Mod2BoundaryNodeRule () {};
- Mod2BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
- return boundaryCount % 2 === 1
- };
- Mod2BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
- return [BoundaryNodeRule]
- };
- Mod2BoundaryNodeRule.prototype.getClass = function getClass () {
- return Mod2BoundaryNodeRule
- };
- var EndPointBoundaryNodeRule = function EndPointBoundaryNodeRule () {};
- EndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
- return boundaryCount > 0
- };
- EndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
- return [BoundaryNodeRule]
- };
- EndPointBoundaryNodeRule.prototype.getClass = function getClass () {
- return EndPointBoundaryNodeRule
- };
- var MultiValentEndPointBoundaryNodeRule = function MultiValentEndPointBoundaryNodeRule () {};
- MultiValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
- return boundaryCount > 1
- };
- MultiValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
- return [BoundaryNodeRule]
- };
- MultiValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
- return MultiValentEndPointBoundaryNodeRule
- };
- var MonoValentEndPointBoundaryNodeRule = function MonoValentEndPointBoundaryNodeRule () {};
- MonoValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
- return boundaryCount === 1
- };
- MonoValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
- return [BoundaryNodeRule]
- };
- MonoValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
- return MonoValentEndPointBoundaryNodeRule
- };
- // import Iterator from './Iterator'
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html
- *
- * @constructor
- * @private
- */
- var Collection = function Collection () {};
- Collection.prototype.add = function add () {};
- /**
- * Appends all of the elements in the specified collection to the end of this
- * list, in the order that they are returned by the specified collection's
- * iterator (optional operation).
- * @param {javascript.util.Collection} c
- * @return {boolean}
- */
- Collection.prototype.addAll = function addAll () {};
- /**
- * Returns true if this collection contains no elements.
- * @return {boolean}
- */
- Collection.prototype.isEmpty = function isEmpty () {};
- /**
- * Returns an iterator over the elements in this collection.
- * @return {javascript.util.Iterator}
- */
- Collection.prototype.iterator = function iterator () {};
- /**
- * Returns an iterator over the elements in this collection.
- * @return {number}
- */
- Collection.prototype.size = function size () {};
- /**
- * Returns an array containing all of the elements in this collection.
- * @return {Array}
- */
- Collection.prototype.toArray = function toArray () {};
- /**
- * Removes a single instance of the specified element from this collection if it
- * is present. (optional)
- * @param {Object} e
- * @return {boolean}
- */
- Collection.prototype.remove = function remove () {};
- /**
- * @param {string=} message Optional message
- * @extends {Error}
- * @constructor
- * @private
- */
- function IndexOutOfBoundsException (message) {
- this.message = message || '';
- }
- IndexOutOfBoundsException.prototype = new Error();
- /**
- * @type {string}
- */
- IndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html
- * @constructor
- * @private
- */
- var Iterator = function Iterator () {};
- Iterator.prototype.hasNext = function hasNext () {};
- /**
- * Returns the next element in the iteration.
- * @return {Object}
- */
- Iterator.prototype.next = function next () {};
- /**
- * Removes from the underlying collection the last element returned by the
- * iterator (optional operation).
- */
- Iterator.prototype.remove = function remove () {};
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html
- *
- * @extends {javascript.util.Collection}
- * @constructor
- * @private
- */
- var List = (function (Collection$$1) {
- function List () {
- Collection$$1.apply(this, arguments);
- }
- if ( Collection$$1 ) List.__proto__ = Collection$$1;
- List.prototype = Object.create( Collection$$1 && Collection$$1.prototype );
- List.prototype.constructor = List;
- List.prototype.get = function get () { };
- /**
- * Replaces the element at the specified position in this list with the
- * specified element (optional operation).
- * @param {number} index
- * @param {Object} e
- * @return {Object}
- */
- List.prototype.set = function set () { };
- /**
- * Returns true if this collection contains no elements.
- * @return {boolean}
- */
- List.prototype.isEmpty = function isEmpty () { };
- return List;
- }(Collection));
- /**
- * @param {string=} message Optional message
- * @extends {Error}
- * @constructor
- * @private
- */
- function NoSuchElementException (message) {
- this.message = message || '';
- }
- NoSuchElementException.prototype = new Error();
- /**
- * @type {string}
- */
- NoSuchElementException.prototype.name = 'NoSuchElementException';
- // import OperationNotSupported from './OperationNotSupported'
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html
- *
- * @extends List
- * @private
- */
- var ArrayList = (function (List$$1) {
- function ArrayList () {
- List$$1.call(this);
- this.array_ = [];
- if (arguments[0] instanceof Collection) {
- this.addAll(arguments[0]);
- }
- }
- if ( List$$1 ) ArrayList.__proto__ = List$$1;
- ArrayList.prototype = Object.create( List$$1 && List$$1.prototype );
- ArrayList.prototype.constructor = ArrayList;
- ArrayList.prototype.ensureCapacity = function ensureCapacity () {};
- ArrayList.prototype.interfaces_ = function interfaces_ () { return [List$$1, Collection] };
- /**
- * @override
- */
- ArrayList.prototype.add = function add (e) {
- if (arguments.length === 1) {
- this.array_.push(e);
- } else {
- this.array_.splice(arguments[0], arguments[1]);
- }
- return true
- };
- ArrayList.prototype.clear = function clear () {
- this.array_ = [];
- };
- /**
- * @override
- */
- ArrayList.prototype.addAll = function addAll (c) {
- var this$1 = this;
- for (var i = c.iterator(); i.hasNext();) {
- this$1.add(i.next());
- }
- return true
- };
- /**
- * @override
- */
- ArrayList.prototype.set = function set (index, element) {
- var oldElement = this.array_[index];
- this.array_[index] = element;
- return oldElement
- };
- /**
- * @override
- */
- ArrayList.prototype.iterator = function iterator () {
- return new Iterator_(this)
- };
- /**
- * @override
- */
- ArrayList.prototype.get = function get (index) {
- if (index < 0 || index >= this.size()) {
- throw new IndexOutOfBoundsException()
- }
- return this.array_[index]
- };
- /**
- * @override
- */
- ArrayList.prototype.isEmpty = function isEmpty () {
- return this.array_.length === 0
- };
- /**
- * @override
- */
- ArrayList.prototype.size = function size () {
- return this.array_.length
- };
- /**
- * @override
- */
- ArrayList.prototype.toArray = function toArray () {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = this.array_.length; i < len; i++) {
- array.push(this$1.array_[i]);
- }
- return array
- };
- /**
- * @override
- */
- ArrayList.prototype.remove = function remove (o) {
- var this$1 = this;
- var found = false;
- for (var i = 0, len = this.array_.length; i < len; i++) {
- if (this$1.array_[i] === o) {
- this$1.array_.splice(i, 1);
- found = true;
- break
- }
- }
- return found
- };
- return ArrayList;
- }(List));
- /**
- * @extends {Iterator}
- * @param {ArrayList} arrayList
- * @constructor
- * @private
- */
- var Iterator_ = (function (Iterator$$1) {
- function Iterator_ (arrayList) {
- Iterator$$1.call(this);
- /**
- * @type {ArrayList}
- * @private
- */
- this.arrayList_ = arrayList;
- /**
- * @type {number}
- * @private
- */
- this.position_ = 0;
- }
- if ( Iterator$$1 ) Iterator_.__proto__ = Iterator$$1;
- Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
- Iterator_.prototype.constructor = Iterator_;
- /**
- * @override
- */
- Iterator_.prototype.next = function next () {
- if (this.position_ === this.arrayList_.size()) {
- throw new NoSuchElementException()
- }
- return this.arrayList_.get(this.position_++)
- };
- /**
- * @override
- */
- Iterator_.prototype.hasNext = function hasNext () {
- if (this.position_ < this.arrayList_.size()) {
- return true
- } else {
- return false
- }
- };
- /**
- * TODO: should be in ListIterator
- * @override
- */
- Iterator_.prototype.set = function set (element) {
- return this.arrayList_.set(this.position_ - 1, element)
- };
- /**
- * @override
- */
- Iterator_.prototype.remove = function remove () {
- this.arrayList_.remove(this.arrayList_.get(this.position_));
- };
- return Iterator_;
- }(Iterator));
- var CoordinateList = (function (ArrayList$$1) {
- function CoordinateList () {
- ArrayList$$1.call(this);
- if (arguments.length === 0) {
- } else if (arguments.length === 1) {
- var coord = arguments[0];
- this.ensureCapacity(coord.length);
- this.add(coord, true);
- } else if (arguments.length === 2) {
- var coord$1 = arguments[0];
- var allowRepeated = arguments[1];
- this.ensureCapacity(coord$1.length);
- this.add(coord$1, allowRepeated);
- }
- }
- if ( ArrayList$$1 ) CoordinateList.__proto__ = ArrayList$$1;
- CoordinateList.prototype = Object.create( ArrayList$$1 && ArrayList$$1.prototype );
- CoordinateList.prototype.constructor = CoordinateList;
- var staticAccessors = { coordArrayType: { configurable: true } };
- staticAccessors.coordArrayType.get = function () { return new Array(0).fill(null) };
- CoordinateList.prototype.getCoordinate = function getCoordinate (i) {
- return this.get(i)
- };
- CoordinateList.prototype.addAll = function addAll () {
- var this$1 = this;
- if (arguments.length === 2) {
- var coll = arguments[0];
- var allowRepeated = arguments[1];
- var isChanged = false;
- for (var i = coll.iterator(); i.hasNext();) {
- this$1.add(i.next(), allowRepeated);
- isChanged = true;
- }
- return isChanged
- } else { return ArrayList$$1.prototype.addAll.apply(this, arguments) }
- };
- CoordinateList.prototype.clone = function clone () {
- var this$1 = this;
- var clone = ArrayList$$1.prototype.clone.call(this);
- for (var i = 0; i < this.size(); i++) {
- clone.add(i, this$1.get(i).copy());
- }
- return clone
- };
- CoordinateList.prototype.toCoordinateArray = function toCoordinateArray () {
- return this.toArray(CoordinateList.coordArrayType)
- };
- CoordinateList.prototype.add = function add () {
- var this$1 = this;
- if (arguments.length === 1) {
- var coord = arguments[0];
- ArrayList$$1.prototype.add.call(this, coord);
- } else if (arguments.length === 2) {
- if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {
- var coord$1 = arguments[0];
- var allowRepeated = arguments[1];
- this.add(coord$1, allowRepeated, true);
- return true
- } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {
- var coord$2 = arguments[0];
- var allowRepeated$1 = arguments[1];
- if (!allowRepeated$1) {
- if (this.size() >= 1) {
- var last = this.get(this.size() - 1);
- if (last.equals2D(coord$2)) { return null }
- }
- }
- ArrayList$$1.prototype.add.call(this, coord$2);
- } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {
- var obj = arguments[0];
- var allowRepeated$2 = arguments[1];
- this.add(obj, allowRepeated$2);
- return true
- }
- } else if (arguments.length === 3) {
- if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {
- var coord$3 = arguments[0];
- var allowRepeated$3 = arguments[1];
- var direction = arguments[2];
- if (direction) {
- for (var i$1 = 0; i$1 < coord$3.length; i$1++) {
- this$1.add(coord$3[i$1], allowRepeated$3);
- }
- } else {
- for (var i$2 = coord$3.length - 1; i$2 >= 0; i$2--) {
- this$1.add(coord$3[i$2], allowRepeated$3);
- }
- }
- return true
- } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {
- var i$3 = arguments[0];
- var coord$4 = arguments[1];
- var allowRepeated$4 = arguments[2];
- if (!allowRepeated$4) {
- var size = this.size();
- if (size > 0) {
- if (i$3 > 0) {
- var prev = this.get(i$3 - 1);
- if (prev.equals2D(coord$4)) { return null }
- }
- if (i$3 < size) {
- var next = this.get(i$3);
- if (next.equals2D(coord$4)) { return null }
- }
- }
- }
- ArrayList$$1.prototype.add.call(this, i$3, coord$4);
- }
- } else if (arguments.length === 4) {
- var coord$5 = arguments[0];
- var allowRepeated$5 = arguments[1];
- var start = arguments[2];
- var end = arguments[3];
- var inc = 1;
- if (start > end) { inc = -1; }
- for (var i = start; i !== end; i += inc) {
- this$1.add(coord$5[i], allowRepeated$5);
- }
- return true
- }
- };
- CoordinateList.prototype.closeRing = function closeRing () {
- if (this.size() > 0) { this.add(new Coordinate(this.get(0)), false); }
- };
- CoordinateList.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CoordinateList.prototype.getClass = function getClass () {
- return CoordinateList
- };
- Object.defineProperties( CoordinateList, staticAccessors );
- return CoordinateList;
- }(ArrayList));
- var CoordinateArrays = function CoordinateArrays () {};
- var staticAccessors$13 = { ForwardComparator: { configurable: true },BidirectionalComparator: { configurable: true },coordArrayType: { configurable: true } };
- staticAccessors$13.ForwardComparator.get = function () { return ForwardComparator };
- staticAccessors$13.BidirectionalComparator.get = function () { return BidirectionalComparator };
- staticAccessors$13.coordArrayType.get = function () { return new Array(0).fill(null) };
- CoordinateArrays.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CoordinateArrays.prototype.getClass = function getClass () {
- return CoordinateArrays
- };
- CoordinateArrays.isRing = function isRing (pts) {
- if (pts.length < 4) { return false }
- if (!pts[0].equals2D(pts[pts.length - 1])) { return false }
- return true
- };
- CoordinateArrays.ptNotInList = function ptNotInList (testPts, pts) {
- for (var i = 0; i < testPts.length; i++) {
- var testPt = testPts[i];
- if (CoordinateArrays.indexOf(testPt, pts) < 0) { return testPt }
- }
- return null
- };
- CoordinateArrays.scroll = function scroll (coordinates, firstCoordinate) {
- var i = CoordinateArrays.indexOf(firstCoordinate, coordinates);
- if (i < 0) { return null }
- var newCoordinates = new Array(coordinates.length).fill(null);
- System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);
- System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);
- System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);
- };
- CoordinateArrays.equals = function equals () {
- if (arguments.length === 2) {
- var coord1 = arguments[0];
- var coord2 = arguments[1];
- if (coord1 === coord2) { return true }
- if (coord1 === null || coord2 === null) { return false }
- if (coord1.length !== coord2.length) { return false }
- for (var i = 0; i < coord1.length; i++) {
- if (!coord1[i].equals(coord2[i])) { return false }
- }
- return true
- } else if (arguments.length === 3) {
- var coord1$1 = arguments[0];
- var coord2$1 = arguments[1];
- var coordinateComparator = arguments[2];
- if (coord1$1 === coord2$1) { return true }
- if (coord1$1 === null || coord2$1 === null) { return false }
- if (coord1$1.length !== coord2$1.length) { return false }
- for (var i$1 = 0; i$1 < coord1$1.length; i$1++) {
- if (coordinateComparator.compare(coord1$1[i$1], coord2$1[i$1]) !== 0) { return false }
- }
- return true
- }
- };
- CoordinateArrays.intersection = function intersection (coordinates, env) {
- var coordList = new CoordinateList();
- for (var i = 0; i < coordinates.length; i++) {
- if (env.intersects(coordinates[i])) { coordList.add(coordinates[i], true); }
- }
- return coordList.toCoordinateArray()
- };
- CoordinateArrays.hasRepeatedPoints = function hasRepeatedPoints (coord) {
- for (var i = 1; i < coord.length; i++) {
- if (coord[i - 1].equals(coord[i])) {
- return true
- }
- }
- return false
- };
- CoordinateArrays.removeRepeatedPoints = function removeRepeatedPoints (coord) {
- if (!CoordinateArrays.hasRepeatedPoints(coord)) { return coord }
- var coordList = new CoordinateList(coord, false);
- return coordList.toCoordinateArray()
- };
- CoordinateArrays.reverse = function reverse (coord) {
- var last = coord.length - 1;
- var mid = Math.trunc(last / 2);
- for (var i = 0; i <= mid; i++) {
- var tmp = coord[i];
- coord[i] = coord[last - i];
- coord[last - i] = tmp;
- }
- };
- CoordinateArrays.removeNull = function removeNull (coord) {
- var nonNull = 0;
- for (var i = 0; i < coord.length; i++) {
- if (coord[i] !== null) { nonNull++; }
- }
- var newCoord = new Array(nonNull).fill(null);
- if (nonNull === 0) { return newCoord }
- var j = 0;
- for (var i$1 = 0; i$1 < coord.length; i$1++) {
- if (coord[i$1] !== null) { newCoord[j++] = coord[i$1]; }
- }
- return newCoord
- };
- CoordinateArrays.copyDeep = function copyDeep () {
- if (arguments.length === 1) {
- var coordinates = arguments[0];
- var copy = new Array(coordinates.length).fill(null);
- for (var i = 0; i < coordinates.length; i++) {
- copy[i] = new Coordinate(coordinates[i]);
- }
- return copy
- } else if (arguments.length === 5) {
- var src = arguments[0];
- var srcStart = arguments[1];
- var dest = arguments[2];
- var destStart = arguments[3];
- var length = arguments[4];
- for (var i$1 = 0; i$1 < length; i$1++) {
- dest[destStart + i$1] = new Coordinate(src[srcStart + i$1]);
- }
- }
- };
- CoordinateArrays.isEqualReversed = function isEqualReversed (pts1, pts2) {
- for (var i = 0; i < pts1.length; i++) {
- var p1 = pts1[i];
- var p2 = pts2[pts1.length - i - 1];
- if (p1.compareTo(p2) !== 0) { return false }
- }
- return true
- };
- CoordinateArrays.envelope = function envelope (coordinates) {
- var env = new Envelope();
- for (var i = 0; i < coordinates.length; i++) {
- env.expandToInclude(coordinates[i]);
- }
- return env
- };
- CoordinateArrays.toCoordinateArray = function toCoordinateArray (coordList) {
- return coordList.toArray(CoordinateArrays.coordArrayType)
- };
- CoordinateArrays.atLeastNCoordinatesOrNothing = function atLeastNCoordinatesOrNothing (n, c) {
- return c.length >= n ? c : []
- };
- CoordinateArrays.indexOf = function indexOf (coordinate, coordinates) {
- for (var i = 0; i < coordinates.length; i++) {
- if (coordinate.equals(coordinates[i])) {
- return i
- }
- }
- return -1
- };
- CoordinateArrays.increasingDirection = function increasingDirection (pts) {
- for (var i = 0; i < Math.trunc(pts.length / 2); i++) {
- var j = pts.length - 1 - i;
- var comp = pts[i].compareTo(pts[j]);
- if (comp !== 0) { return comp }
- }
- return 1
- };
- CoordinateArrays.compare = function compare (pts1, pts2) {
- var i = 0;
- while (i < pts1.length && i < pts2.length) {
- var compare = pts1[i].compareTo(pts2[i]);
- if (compare !== 0) { return compare }
- i++;
- }
- if (i < pts2.length) { return -1 }
- if (i < pts1.length) { return 1 }
- return 0
- };
- CoordinateArrays.minCoordinate = function minCoordinate (coordinates) {
- var minCoord = null;
- for (var i = 0; i < coordinates.length; i++) {
- if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {
- minCoord = coordinates[i];
- }
- }
- return minCoord
- };
- CoordinateArrays.extract = function extract (pts, start, end) {
- start = MathUtil.clamp(start, 0, pts.length);
- end = MathUtil.clamp(end, -1, pts.length);
- var npts = end - start + 1;
- if (end < 0) { npts = 0; }
- if (start >= pts.length) { npts = 0; }
- if (end < start) { npts = 0; }
- var extractPts = new Array(npts).fill(null);
- if (npts === 0) { return extractPts }
- var iPts = 0;
- for (var i = start; i <= end; i++) {
- extractPts[iPts++] = pts[i];
- }
- return extractPts
- };
- Object.defineProperties( CoordinateArrays, staticAccessors$13 );
- var ForwardComparator = function ForwardComparator () {};
- ForwardComparator.prototype.compare = function compare (o1, o2) {
- var pts1 = o1;
- var pts2 = o2;
- return CoordinateArrays.compare(pts1, pts2)
- };
- ForwardComparator.prototype.interfaces_ = function interfaces_ () {
- return [Comparator]
- };
- ForwardComparator.prototype.getClass = function getClass () {
- return ForwardComparator
- };
- var BidirectionalComparator = function BidirectionalComparator () {};
- BidirectionalComparator.prototype.compare = function compare (o1, o2) {
- var pts1 = o1;
- var pts2 = o2;
- if (pts1.length < pts2.length) { return -1 }
- if (pts1.length > pts2.length) { return 1 }
- if (pts1.length === 0) { return 0 }
- var forwardComp = CoordinateArrays.compare(pts1, pts2);
- var isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);
- if (isEqualRev) { return 0 }
- return forwardComp
- };
- BidirectionalComparator.prototype.OLDcompare = function OLDcompare (o1, o2) {
- var pts1 = o1;
- var pts2 = o2;
- if (pts1.length < pts2.length) { return -1 }
- if (pts1.length > pts2.length) { return 1 }
- if (pts1.length === 0) { return 0 }
- var dir1 = CoordinateArrays.increasingDirection(pts1);
- var dir2 = CoordinateArrays.increasingDirection(pts2);
- var i1 = dir1 > 0 ? 0 : pts1.length - 1;
- var i2 = dir2 > 0 ? 0 : pts1.length - 1;
- for (var i = 0; i < pts1.length; i++) {
- var comparePt = pts1[i1].compareTo(pts2[i2]);
- if (comparePt !== 0) { return comparePt }
- i1 += dir1;
- i2 += dir2;
- }
- return 0
- };
- BidirectionalComparator.prototype.interfaces_ = function interfaces_ () {
- return [Comparator]
- };
- BidirectionalComparator.prototype.getClass = function getClass () {
- return BidirectionalComparator
- };
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html
- *
- * @constructor
- * @private
- */
- var Map$1 = function Map () {};
- Map$1.prototype.get = function get () {};
- /**
- * Associates the specified value with the specified key in this map (optional
- * operation).
- * @param {Object} key
- * @param {Object} value
- * @return {Object}
- */
- Map$1.prototype.put = function put () {};
- /**
- * Returns the number of key-value mappings in this map.
- * @return {number}
- */
- Map$1.prototype.size = function size () {};
- /**
- * Returns a Collection view of the values contained in this map.
- * @return {javascript.util.Collection}
- */
- Map$1.prototype.values = function values () {};
- /**
- * Returns a {@link Set} view of the mappings contained in this map.
- * The set is backed by the map, so changes to the map are
- * reflected in the set, and vice-versa.If the map is modified
- * while an iteration over the set is in progress (except through
- * the iterator's own <tt>remove</tt> operation, or through the
- * <tt>setValue</tt> operation on a map entry returned by the
- * iterator) the results of the iteration are undefined.The set
- * supports element removal, which removes the corresponding
- * mapping from the map, via the <tt>Iterator.remove</tt>,
- * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
- * <tt>clear</tt> operations.It does not support the
- * <tt>add</tt> or <tt>addAll</tt> operations.
- *
- * @return {Set} a set view of the mappings contained in this map
- */
- Map$1.prototype.entrySet = function entrySet () {};
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html
- *
- * @extends {Map}
- * @constructor
- * @private
- */
- var SortedMap = (function (Map) {
- function SortedMap () {
- Map.apply(this, arguments);
- }if ( Map ) SortedMap.__proto__ = Map;
- SortedMap.prototype = Object.create( Map && Map.prototype );
- SortedMap.prototype.constructor = SortedMap;
-
- return SortedMap;
- }(Map$1));
- /**
- * @param {string=} message Optional message
- * @extends {Error}
- * @constructor
- * @private
- */
- function OperationNotSupported (message) {
- this.message = message || '';
- }
- OperationNotSupported.prototype = new Error();
- /**
- * @type {string}
- */
- OperationNotSupported.prototype.name = 'OperationNotSupported';
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html
- *
- * @extends {Collection}
- * @constructor
- * @private
- */
- function Set() {}
- Set.prototype = new Collection();
- /**
- * Returns true if this set contains the specified element. More formally,
- * returns true if and only if this set contains an element e such that (o==null ?
- * e==null : o.equals(e)).
- * @param {Object} e
- * @return {boolean}
- */
- Set.prototype.contains = function() {};
- /**
- * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html
- *
- * @extends {javascript.util.Set}
- * @constructor
- * @private
- */
- var HashSet = (function (Set$$1) {
- function HashSet () {
- Set$$1.call(this);
- this.array_ = [];
- if (arguments[0] instanceof Collection) {
- this.addAll(arguments[0]);
- }
- }
- if ( Set$$1 ) HashSet.__proto__ = Set$$1;
- HashSet.prototype = Object.create( Set$$1 && Set$$1.prototype );
- HashSet.prototype.constructor = HashSet;
- /**
- * @override
- */
- HashSet.prototype.contains = function contains (o) {
- var this$1 = this;
- for (var i = 0, len = this.array_.length; i < len; i++) {
- var e = this$1.array_[i];
- if (e === o) {
- return true
- }
- }
- return false
- };
- /**
- * @override
- */
- HashSet.prototype.add = function add (o) {
- if (this.contains(o)) {
- return false
- }
- this.array_.push(o);
- return true
- };
- /**
- * @override
- */
- HashSet.prototype.addAll = function addAll (c) {
- var this$1 = this;
- for (var i = c.iterator(); i.hasNext();) {
- this$1.add(i.next());
- }
- return true
- };
- /**
- * @override
- */
- HashSet.prototype.remove = function remove (o) {
- // throw new javascript.util.OperationNotSupported()
- throw new Error()
- };
- /**
- * @override
- */
- HashSet.prototype.size = function size () {
- return this.array_.length
- };
- /**
- * @override
- */
- HashSet.prototype.isEmpty = function isEmpty () {
- return this.array_.length === 0
- };
- /**
- * @override
- */
- HashSet.prototype.toArray = function toArray () {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = this.array_.length; i < len; i++) {
- array.push(this$1.array_[i]);
- }
- return array
- };
- /**
- * @override
- */
- HashSet.prototype.iterator = function iterator () {
- return new Iterator_$1(this)
- };
- return HashSet;
- }(Set));
- /**
- * @extends {Iterator}
- * @param {HashSet} hashSet
- * @constructor
- * @private
- */
- var Iterator_$1 = (function (Iterator$$1) {
- function Iterator_ (hashSet) {
- Iterator$$1.call(this);
- /**
- * @type {HashSet}
- * @private
- */
- this.hashSet_ = hashSet;
- /**
- * @type {number}
- * @private
- */
- this.position_ = 0;
- }
- if ( Iterator$$1 ) Iterator_.__proto__ = Iterator$$1;
- Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
- Iterator_.prototype.constructor = Iterator_;
- /**
- * @override
- */
- Iterator_.prototype.next = function next () {
- if (this.position_ === this.hashSet_.size()) {
- throw new NoSuchElementException()
- }
- return this.hashSet_.array_[this.position_++]
- };
- /**
- * @override
- */
- Iterator_.prototype.hasNext = function hasNext () {
- if (this.position_ < this.hashSet_.size()) {
- return true
- } else {
- return false
- }
- };
- /**
- * @override
- */
- Iterator_.prototype.remove = function remove () {
- throw new OperationNotSupported()
- };
- return Iterator_;
- }(Iterator));
- var BLACK = 0;
- var RED = 1;
- function colorOf (p) { return (p === null ? BLACK : p.color) }
- function parentOf (p) { return (p === null ? null : p.parent) }
- function setColor (p, c) { if (p !== null) { p.color = c; } }
- function leftOf (p) { return (p === null ? null : p.left) }
- function rightOf (p) { return (p === null ? null : p.right) }
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html
- *
- * @extends {SortedMap}
- * @constructor
- * @private
- */
- function TreeMap () {
- /**
- * @type {Object}
- * @private
- */
- this.root_ = null;
- /**
- * @type {number}
- * @private
- */
- this.size_ = 0;
- }
- TreeMap.prototype = new SortedMap();
- /**
- * @override
- */
- TreeMap.prototype.get = function (key) {
- var p = this.root_;
- while (p !== null) {
- var cmp = key['compareTo'](p.key);
- if (cmp < 0) { p = p.left; }
- else if (cmp > 0) { p = p.right; }
- else { return p.value }
- }
- return null
- };
- /**
- * @override
- */
- TreeMap.prototype.put = function (key, value) {
- if (this.root_ === null) {
- this.root_ = {
- key: key,
- value: value,
- left: null,
- right: null,
- parent: null,
- color: BLACK,
- getValue: function getValue () { return this.value },
- getKey: function getKey () { return this.key }
- };
- this.size_ = 1;
- return null
- }
- var t = this.root_;
- var parent;
- var cmp;
- do {
- parent = t;
- cmp = key['compareTo'](t.key);
- if (cmp < 0) {
- t = t.left;
- } else if (cmp > 0) {
- t = t.right;
- } else {
- var oldValue = t.value;
- t.value = value;
- return oldValue
- }
- } while (t !== null)
- var e = {
- key: key,
- left: null,
- right: null,
- value: value,
- parent: parent,
- color: BLACK,
- getValue: function getValue () { return this.value },
- getKey: function getKey () { return this.key }
- };
- if (cmp < 0) {
- parent.left = e;
- } else {
- parent.right = e;
- }
- this.fixAfterInsertion(e);
- this.size_++;
- return null
- };
- /**
- * @param {Object} x
- */
- TreeMap.prototype.fixAfterInsertion = function (x) {
- var this$1 = this;
- x.color = RED;
- while (x != null && x !== this.root_ && x.parent.color === RED) {
- if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {
- var y = rightOf(parentOf(parentOf(x)));
- if (colorOf(y) === RED) {
- setColor(parentOf(x), BLACK);
- setColor(y, BLACK);
- setColor(parentOf(parentOf(x)), RED);
- x = parentOf(parentOf(x));
- } else {
- if (x === rightOf(parentOf(x))) {
- x = parentOf(x);
- this$1.rotateLeft(x);
- }
- setColor(parentOf(x), BLACK);
- setColor(parentOf(parentOf(x)), RED);
- this$1.rotateRight(parentOf(parentOf(x)));
- }
- } else {
- var y$1 = leftOf(parentOf(parentOf(x)));
- if (colorOf(y$1) === RED) {
- setColor(parentOf(x), BLACK);
- setColor(y$1, BLACK);
- setColor(parentOf(parentOf(x)), RED);
- x = parentOf(parentOf(x));
- } else {
- if (x === leftOf(parentOf(x))) {
- x = parentOf(x);
- this$1.rotateRight(x);
- }
- setColor(parentOf(x), BLACK);
- setColor(parentOf(parentOf(x)), RED);
- this$1.rotateLeft(parentOf(parentOf(x)));
- }
- }
- }
- this.root_.color = BLACK;
- };
- /**
- * @override
- */
- TreeMap.prototype.values = function () {
- var arrayList = new ArrayList();
- var p = this.getFirstEntry();
- if (p !== null) {
- arrayList.add(p.value);
- while ((p = TreeMap.successor(p)) !== null) {
- arrayList.add(p.value);
- }
- }
- return arrayList
- };
- /**
- * @override
- */
- TreeMap.prototype.entrySet = function () {
- var hashSet = new HashSet();
- var p = this.getFirstEntry();
- if (p !== null) {
- hashSet.add(p);
- while ((p = TreeMap.successor(p)) !== null) {
- hashSet.add(p);
- }
- }
- return hashSet
- };
- /**
- * @param {Object} p
- */
- TreeMap.prototype.rotateLeft = function (p) {
- if (p != null) {
- var r = p.right;
- p.right = r.left;
- if (r.left != null) { r.left.parent = p; }
- r.parent = p.parent;
- if (p.parent === null) { this.root_ = r; } else if (p.parent.left === p) { p.parent.left = r; } else { p.parent.right = r; }
- r.left = p;
- p.parent = r;
- }
- };
- /**
- * @param {Object} p
- */
- TreeMap.prototype.rotateRight = function (p) {
- if (p != null) {
- var l = p.left;
- p.left = l.right;
- if (l.right != null) { l.right.parent = p; }
- l.parent = p.parent;
- if (p.parent === null) { this.root_ = l; } else if (p.parent.right === p) { p.parent.right = l; } else { p.parent.left = l; }
- l.right = p;
- p.parent = l;
- }
- };
- /**
- * @return {Object}
- */
- TreeMap.prototype.getFirstEntry = function () {
- var p = this.root_;
- if (p != null) {
- while (p.left != null) {
- p = p.left;
- }
- }
- return p
- };
- /**
- * @param {Object} t
- * @return {Object}
- * @private
- */
- TreeMap.successor = function (t) {
- if (t === null) { return null } else if (t.right !== null) {
- var p = t.right;
- while (p.left !== null) {
- p = p.left;
- }
- return p
- } else {
- var p$1 = t.parent;
- var ch = t;
- while (p$1 !== null && ch === p$1.right) {
- ch = p$1;
- p$1 = p$1.parent;
- }
- return p$1
- }
- };
- /**
- * @override
- */
- TreeMap.prototype.size = function () {
- return this.size_
- };
- var Lineal = function Lineal () {};
- Lineal.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Lineal.prototype.getClass = function getClass () {
- return Lineal
- };
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html
- *
- * @extends {Set}
- * @constructor
- * @private
- */
- function SortedSet () {}
- SortedSet.prototype = new Set();
- // import Iterator from './Iterator'
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
- *
- * @extends {SortedSet}
- * @constructor
- * @private
- */
- function TreeSet () {
- /**
- * @type {Array}
- * @private
- */
- this.array_ = [];
- if (arguments[0] instanceof Collection) {
- this.addAll(arguments[0]);
- }
- }
- TreeSet.prototype = new SortedSet();
- /**
- * @override
- */
- TreeSet.prototype.contains = function (o) {
- var this$1 = this;
- for (var i = 0, len = this.array_.length; i < len; i++) {
- var e = this$1.array_[i];
- if (e['compareTo'](o) === 0) {
- return true
- }
- }
- return false
- };
- /**
- * @override
- */
- TreeSet.prototype.add = function (o) {
- var this$1 = this;
- if (this.contains(o)) {
- return false
- }
- for (var i = 0, len = this.array_.length; i < len; i++) {
- var e = this$1.array_[i];
- if (e['compareTo'](o) === 1) {
- this$1.array_.splice(i, 0, o);
- return true
- }
- }
- this.array_.push(o);
- return true
- };
- /**
- * @override
- */
- TreeSet.prototype.addAll = function (c) {
- var this$1 = this;
- for (var i = c.iterator(); i.hasNext();) {
- this$1.add(i.next());
- }
- return true
- };
- /**
- * @override
- */
- TreeSet.prototype.remove = function (e) {
- throw new OperationNotSupported()
- };
- /**
- * @override
- */
- TreeSet.prototype.size = function () {
- return this.array_.length
- };
- /**
- * @override
- */
- TreeSet.prototype.isEmpty = function () {
- return this.array_.length === 0
- };
- /**
- * @override
- */
- TreeSet.prototype.toArray = function () {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = this.array_.length; i < len; i++) {
- array.push(this$1.array_[i]);
- }
- return array
- };
- /**
- * @override
- */
- TreeSet.prototype.iterator = function () {
- return new Iterator_$2(this)
- };
- /**
- * @extends {javascript.util.Iterator}
- * @param {javascript.util.TreeSet} treeSet
- * @constructor
- * @private
- */
- var Iterator_$2 = function (treeSet) {
- /**
- * @type {javascript.util.TreeSet}
- * @private
- */
- this.treeSet_ = treeSet;
- /**
- * @type {number}
- * @private
- */
- this.position_ = 0;
- };
- /**
- * @override
- */
- Iterator_$2.prototype.next = function () {
- if (this.position_ === this.treeSet_.size()) {
- throw new NoSuchElementException()
- }
- return this.treeSet_.array_[this.position_++]
- };
- /**
- * @override
- */
- Iterator_$2.prototype.hasNext = function () {
- if (this.position_ < this.treeSet_.size()) {
- return true
- } else {
- return false
- }
- };
- /**
- * @override
- */
- Iterator_$2.prototype.remove = function () {
- throw new OperationNotSupported()
- };
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html
- *
- * @constructor
- * @private
- */
- var Arrays = function Arrays () {};
- Arrays.sort = function sort () {
- var a = arguments[0];
- var i;
- var t;
- var comparator;
- var compare;
- if (arguments.length === 1) {
- compare = function (a, b) {
- return a.compareTo(b)
- };
- a.sort(compare);
- } else if (arguments.length === 2) {
- comparator = arguments[1];
- compare = function (a, b) {
- return comparator['compare'](a, b)
- };
- a.sort(compare);
- } else if (arguments.length === 3) {
- t = a.slice(arguments[1], arguments[2]);
- t.sort();
- var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
- a.splice(0, a.length);
- for (i = 0; i < r.length; i++) {
- a.push(r[i]);
- }
- } else if (arguments.length === 4) {
- t = a.slice(arguments[1], arguments[2]);
- comparator = arguments[3];
- compare = function (a, b) {
- return comparator['compare'](a, b)
- };
- t.sort(compare);
- r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
- a.splice(0, a.length);
- for (i = 0; i < r.length; i++) {
- a.push(r[i]);
- }
- }
- };
- /**
- * @param {Array} array
- * @return {ArrayList}
- */
- Arrays.asList = function asList (array) {
- var arrayList = new ArrayList();
- for (var i = 0, len = array.length; i < len; i++) {
- arrayList.add(array[i]);
- }
- return arrayList
- };
- var Dimension = function Dimension () {};
- var staticAccessors$14 = { P: { configurable: true },L: { configurable: true },A: { configurable: true },FALSE: { configurable: true },TRUE: { configurable: true },DONTCARE: { configurable: true },SYM_FALSE: { configurable: true },SYM_TRUE: { configurable: true },SYM_DONTCARE: { configurable: true },SYM_P: { configurable: true },SYM_L: { configurable: true },SYM_A: { configurable: true } };
- staticAccessors$14.P.get = function () { return 0 };
- staticAccessors$14.L.get = function () { return 1 };
- staticAccessors$14.A.get = function () { return 2 };
- staticAccessors$14.FALSE.get = function () { return -1 };
- staticAccessors$14.TRUE.get = function () { return -2 };
- staticAccessors$14.DONTCARE.get = function () { return -3 };
- staticAccessors$14.SYM_FALSE.get = function () { return 'F' };
- staticAccessors$14.SYM_TRUE.get = function () { return 'T' };
- staticAccessors$14.SYM_DONTCARE.get = function () { return '*' };
- staticAccessors$14.SYM_P.get = function () { return '0' };
- staticAccessors$14.SYM_L.get = function () { return '1' };
- staticAccessors$14.SYM_A.get = function () { return '2' };
- Dimension.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Dimension.prototype.getClass = function getClass () {
- return Dimension
- };
- Dimension.toDimensionSymbol = function toDimensionSymbol (dimensionValue) {
- switch (dimensionValue) {
- case Dimension.FALSE:
- return Dimension.SYM_FALSE
- case Dimension.TRUE:
- return Dimension.SYM_TRUE
- case Dimension.DONTCARE:
- return Dimension.SYM_DONTCARE
- case Dimension.P:
- return Dimension.SYM_P
- case Dimension.L:
- return Dimension.SYM_L
- case Dimension.A:
- return Dimension.SYM_A
- default:
- }
- throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)
- };
- Dimension.toDimensionValue = function toDimensionValue (dimensionSymbol) {
- switch (Character.toUpperCase(dimensionSymbol)) {
- case Dimension.SYM_FALSE:
- return Dimension.FALSE
- case Dimension.SYM_TRUE:
- return Dimension.TRUE
- case Dimension.SYM_DONTCARE:
- return Dimension.DONTCARE
- case Dimension.SYM_P:
- return Dimension.P
- case Dimension.SYM_L:
- return Dimension.L
- case Dimension.SYM_A:
- return Dimension.A
- default:
- }
- throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)
- };
- Object.defineProperties( Dimension, staticAccessors$14 );
- var GeometryFilter = function GeometryFilter () {};
- GeometryFilter.prototype.filter = function filter (geom) {};
- GeometryFilter.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryFilter.prototype.getClass = function getClass () {
- return GeometryFilter
- };
- var CoordinateSequenceFilter = function CoordinateSequenceFilter () {};
- CoordinateSequenceFilter.prototype.filter = function filter (seq, i) {};
- CoordinateSequenceFilter.prototype.isDone = function isDone () {};
- CoordinateSequenceFilter.prototype.isGeometryChanged = function isGeometryChanged () {};
- CoordinateSequenceFilter.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CoordinateSequenceFilter.prototype.getClass = function getClass () {
- return CoordinateSequenceFilter
- };
- var GeometryCollection = (function (Geometry$$1) {
- function GeometryCollection (geometries, factory) {
- Geometry$$1.call(this, factory);
- this._geometries = geometries || [];
- if (Geometry$$1.hasNullElements(this._geometries)) {
- throw new IllegalArgumentException('geometries must not contain null elements')
- }
- }
- if ( Geometry$$1 ) GeometryCollection.__proto__ = Geometry$$1;
- GeometryCollection.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
- GeometryCollection.prototype.constructor = GeometryCollection;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- GeometryCollection.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
- var this$1 = this;
- var envelope = new Envelope();
- for (var i = 0; i < this._geometries.length; i++) {
- envelope.expandToInclude(this$1._geometries[i].getEnvelopeInternal());
- }
- return envelope
- };
- GeometryCollection.prototype.getGeometryN = function getGeometryN (n) {
- return this._geometries[n]
- };
- GeometryCollection.prototype.getSortIndex = function getSortIndex () {
- return Geometry$$1.SORTINDEX_GEOMETRYCOLLECTION
- };
- GeometryCollection.prototype.getCoordinates = function getCoordinates () {
- var this$1 = this;
- var coordinates = new Array(this.getNumPoints()).fill(null);
- var k = -1;
- for (var i = 0; i < this._geometries.length; i++) {
- var childCoordinates = this$1._geometries[i].getCoordinates();
- for (var j = 0; j < childCoordinates.length; j++) {
- k++;
- coordinates[k] = childCoordinates[j];
- }
- }
- return coordinates
- };
- GeometryCollection.prototype.getArea = function getArea () {
- var this$1 = this;
- var area = 0.0;
- for (var i = 0; i < this._geometries.length; i++) {
- area += this$1._geometries[i].getArea();
- }
- return area
- };
- GeometryCollection.prototype.equalsExact = function equalsExact () {
- var this$1 = this;
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- var otherCollection = other;
- if (this._geometries.length !== otherCollection._geometries.length) {
- return false
- }
- for (var i = 0; i < this._geometries.length; i++) {
- if (!this$1._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {
- return false
- }
- }
- return true
- } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
- };
- GeometryCollection.prototype.normalize = function normalize () {
- var this$1 = this;
- for (var i = 0; i < this._geometries.length; i++) {
- this$1._geometries[i].normalize();
- }
- Arrays.sort(this._geometries);
- };
- GeometryCollection.prototype.getCoordinate = function getCoordinate () {
- if (this.isEmpty()) { return null }
- return this._geometries[0].getCoordinate()
- };
- GeometryCollection.prototype.getBoundaryDimension = function getBoundaryDimension () {
- var this$1 = this;
- var dimension = Dimension.FALSE;
- for (var i = 0; i < this._geometries.length; i++) {
- dimension = Math.max(dimension, this$1._geometries[i].getBoundaryDimension());
- }
- return dimension
- };
- GeometryCollection.prototype.getDimension = function getDimension () {
- var this$1 = this;
- var dimension = Dimension.FALSE;
- for (var i = 0; i < this._geometries.length; i++) {
- dimension = Math.max(dimension, this$1._geometries[i].getDimension());
- }
- return dimension
- };
- GeometryCollection.prototype.getLength = function getLength () {
- var this$1 = this;
- var sum = 0.0;
- for (var i = 0; i < this._geometries.length; i++) {
- sum += this$1._geometries[i].getLength();
- }
- return sum
- };
- GeometryCollection.prototype.getNumPoints = function getNumPoints () {
- var this$1 = this;
- var numPoints = 0;
- for (var i = 0; i < this._geometries.length; i++) {
- numPoints += this$1._geometries[i].getNumPoints();
- }
- return numPoints
- };
- GeometryCollection.prototype.getNumGeometries = function getNumGeometries () {
- return this._geometries.length
- };
- GeometryCollection.prototype.reverse = function reverse () {
- var this$1 = this;
- var n = this._geometries.length;
- var revGeoms = new Array(n).fill(null);
- for (var i = 0; i < this._geometries.length; i++) {
- revGeoms[i] = this$1._geometries[i].reverse();
- }
- return this.getFactory().createGeometryCollection(revGeoms)
- };
- GeometryCollection.prototype.compareToSameClass = function compareToSameClass () {
- var this$1 = this;
- if (arguments.length === 1) {
- var o = arguments[0];
- var theseElements = new TreeSet(Arrays.asList(this._geometries));
- var otherElements = new TreeSet(Arrays.asList(o._geometries));
- return this.compare(theseElements, otherElements)
- } else if (arguments.length === 2) {
- var o$1 = arguments[0];
- var comp = arguments[1];
- var gc = o$1;
- var n1 = this.getNumGeometries();
- var n2 = gc.getNumGeometries();
- var i = 0;
- while (i < n1 && i < n2) {
- var thisGeom = this$1.getGeometryN(i);
- var otherGeom = gc.getGeometryN(i);
- var holeComp = thisGeom.compareToSameClass(otherGeom, comp);
- if (holeComp !== 0) { return holeComp }
- i++;
- }
- if (i < n1) { return 1 }
- if (i < n2) { return -1 }
- return 0
- }
- };
- GeometryCollection.prototype.apply = function apply () {
- var this$1 = this;
- if (hasInterface(arguments[0], CoordinateFilter)) {
- var filter = arguments[0];
- for (var i = 0; i < this._geometries.length; i++) {
- this$1._geometries[i].apply(filter);
- }
- } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
- var filter$1 = arguments[0];
- if (this._geometries.length === 0) { return null }
- for (var i$1 = 0; i$1 < this._geometries.length; i$1++) {
- this$1._geometries[i$1].apply(filter$1);
- if (filter$1.isDone()) {
- break
- }
- }
- if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
- } else if (hasInterface(arguments[0], GeometryFilter)) {
- var filter$2 = arguments[0];
- filter$2.filter(this);
- for (var i$2 = 0; i$2 < this._geometries.length; i$2++) {
- this$1._geometries[i$2].apply(filter$2);
- }
- } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
- var filter$3 = arguments[0];
- filter$3.filter(this);
- for (var i$3 = 0; i$3 < this._geometries.length; i$3++) {
- this$1._geometries[i$3].apply(filter$3);
- }
- }
- };
- GeometryCollection.prototype.getBoundary = function getBoundary () {
- this.checkNotGeometryCollection(this);
- Assert.shouldNeverReachHere();
- return null
- };
- GeometryCollection.prototype.clone = function clone () {
- var this$1 = this;
- var gc = Geometry$$1.prototype.clone.call(this);
- gc._geometries = new Array(this._geometries.length).fill(null);
- for (var i = 0; i < this._geometries.length; i++) {
- gc._geometries[i] = this$1._geometries[i].clone();
- }
- return gc
- };
- GeometryCollection.prototype.getGeometryType = function getGeometryType () {
- return 'GeometryCollection'
- };
- GeometryCollection.prototype.copy = function copy () {
- var this$1 = this;
- var geometries = new Array(this._geometries.length).fill(null);
- for (var i = 0; i < geometries.length; i++) {
- geometries[i] = this$1._geometries[i].copy();
- }
- return new GeometryCollection(geometries, this._factory)
- };
- GeometryCollection.prototype.isEmpty = function isEmpty () {
- var this$1 = this;
- for (var i = 0; i < this._geometries.length; i++) {
- if (!this$1._geometries[i].isEmpty()) {
- return false
- }
- }
- return true
- };
- GeometryCollection.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryCollection.prototype.getClass = function getClass () {
- return GeometryCollection
- };
- staticAccessors.serialVersionUID.get = function () { return -5694727726395021467 };
- Object.defineProperties( GeometryCollection, staticAccessors );
- return GeometryCollection;
- }(Geometry));
- var MultiLineString = (function (GeometryCollection$$1) {
- function MultiLineString () {
- GeometryCollection$$1.apply(this, arguments);
- }
- if ( GeometryCollection$$1 ) MultiLineString.__proto__ = GeometryCollection$$1;
- MultiLineString.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
- MultiLineString.prototype.constructor = MultiLineString;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- MultiLineString.prototype.getSortIndex = function getSortIndex () {
- return Geometry.SORTINDEX_MULTILINESTRING
- };
- MultiLineString.prototype.equalsExact = function equalsExact () {
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
- } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
- };
- MultiLineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
- if (this.isClosed()) {
- return Dimension.FALSE
- }
- return 0
- };
- MultiLineString.prototype.isClosed = function isClosed () {
- var this$1 = this;
- if (this.isEmpty()) {
- return false
- }
- for (var i = 0; i < this._geometries.length; i++) {
- if (!this$1._geometries[i].isClosed()) {
- return false
- }
- }
- return true
- };
- MultiLineString.prototype.getDimension = function getDimension () {
- return 1
- };
- MultiLineString.prototype.reverse = function reverse () {
- var this$1 = this;
- var nLines = this._geometries.length;
- var revLines = new Array(nLines).fill(null);
- for (var i = 0; i < this._geometries.length; i++) {
- revLines[nLines - 1 - i] = this$1._geometries[i].reverse();
- }
- return this.getFactory().createMultiLineString(revLines)
- };
- MultiLineString.prototype.getBoundary = function getBoundary () {
- return new BoundaryOp(this).getBoundary()
- };
- MultiLineString.prototype.getGeometryType = function getGeometryType () {
- return 'MultiLineString'
- };
- MultiLineString.prototype.copy = function copy () {
- var this$1 = this;
- var lineStrings = new Array(this._geometries.length).fill(null);
- for (var i = 0; i < lineStrings.length; i++) {
- lineStrings[i] = this$1._geometries[i].copy();
- }
- return new MultiLineString(lineStrings, this._factory)
- };
- MultiLineString.prototype.interfaces_ = function interfaces_ () {
- return [Lineal]
- };
- MultiLineString.prototype.getClass = function getClass () {
- return MultiLineString
- };
- staticAccessors.serialVersionUID.get = function () { return 8166665132445433741 };
- Object.defineProperties( MultiLineString, staticAccessors );
- return MultiLineString;
- }(GeometryCollection));
- var BoundaryOp = function BoundaryOp () {
- this._geom = null;
- this._geomFact = null;
- this._bnRule = null;
- this._endpointMap = null;
- if (arguments.length === 1) {
- var geom = arguments[0];
- var bnRule = BoundaryNodeRule.MOD2_BOUNDARY_RULE;
- this._geom = geom;
- this._geomFact = geom.getFactory();
- this._bnRule = bnRule;
- } else if (arguments.length === 2) {
- var geom$1 = arguments[0];
- var bnRule$1 = arguments[1];
- this._geom = geom$1;
- this._geomFact = geom$1.getFactory();
- this._bnRule = bnRule$1;
- }
- };
- BoundaryOp.prototype.boundaryMultiLineString = function boundaryMultiLineString (mLine) {
- if (this._geom.isEmpty()) {
- return this.getEmptyMultiPoint()
- }
- var bdyPts = this.computeBoundaryCoordinates(mLine);
- if (bdyPts.length === 1) {
- return this._geomFact.createPoint(bdyPts[0])
- }
- return this._geomFact.createMultiPointFromCoords(bdyPts)
- };
- BoundaryOp.prototype.getBoundary = function getBoundary () {
- if (this._geom instanceof LineString) { return this.boundaryLineString(this._geom) }
- if (this._geom instanceof MultiLineString) { return this.boundaryMultiLineString(this._geom) }
- return this._geom.getBoundary()
- };
- BoundaryOp.prototype.boundaryLineString = function boundaryLineString (line) {
- if (this._geom.isEmpty()) {
- return this.getEmptyMultiPoint()
- }
- if (line.isClosed()) {
- var closedEndpointOnBoundary = this._bnRule.isInBoundary(2);
- if (closedEndpointOnBoundary) {
- return line.getStartPoint()
- } else {
- return this._geomFact.createMultiPoint()
- }
- }
- return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])
- };
- BoundaryOp.prototype.getEmptyMultiPoint = function getEmptyMultiPoint () {
- return this._geomFact.createMultiPoint()
- };
- BoundaryOp.prototype.computeBoundaryCoordinates = function computeBoundaryCoordinates (mLine) {
- var this$1 = this;
- var bdyPts = new ArrayList();
- this._endpointMap = new TreeMap();
- for (var i = 0; i < mLine.getNumGeometries(); i++) {
- var line = mLine.getGeometryN(i);
- if (line.getNumPoints() === 0) { continue }
- this$1.addEndpoint(line.getCoordinateN(0));
- this$1.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));
- }
- for (var it = this._endpointMap.entrySet().iterator(); it.hasNext();) {
- var entry = it.next();
- var counter = entry.getValue();
- var valence = counter.count;
- if (this$1._bnRule.isInBoundary(valence)) {
- bdyPts.add(entry.getKey());
- }
- }
- return CoordinateArrays.toCoordinateArray(bdyPts)
- };
- BoundaryOp.prototype.addEndpoint = function addEndpoint (pt) {
- var counter = this._endpointMap.get(pt);
- if (counter === null) {
- counter = new Counter();
- this._endpointMap.put(pt, counter);
- }
- counter.count++;
- };
- BoundaryOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BoundaryOp.prototype.getClass = function getClass () {
- return BoundaryOp
- };
- BoundaryOp.getBoundary = function getBoundary () {
- if (arguments.length === 1) {
- var g = arguments[0];
- var bop = new BoundaryOp(g);
- return bop.getBoundary()
- } else if (arguments.length === 2) {
- var g$1 = arguments[0];
- var bnRule = arguments[1];
- var bop$1 = new BoundaryOp(g$1, bnRule);
- return bop$1.getBoundary()
- }
- };
- var Counter = function Counter () {
- this.count = null;
- };
- Counter.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Counter.prototype.getClass = function getClass () {
- return Counter
- };
- // boundary
- function PrintStream () {}
- function StringReader () {}
- var DecimalFormat = function DecimalFormat () {};
- function ByteArrayOutputStream () {}
- function IOException () {}
- function LineNumberReader () {}
- var StringUtil = function StringUtil () {};
- var staticAccessors$15 = { NEWLINE: { configurable: true },SIMPLE_ORDINATE_FORMAT: { configurable: true } };
- StringUtil.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- StringUtil.prototype.getClass = function getClass () {
- return StringUtil
- };
- StringUtil.chars = function chars (c, n) {
- var ch = new Array(n).fill(null);
- for (var i = 0; i < n; i++) {
- ch[i] = c;
- }
- return String(ch)
- };
- StringUtil.getStackTrace = function getStackTrace () {
- if (arguments.length === 1) {
- var t = arguments[0];
- var os = new ByteArrayOutputStream();
- var ps = new PrintStream(os);
- t.printStackTrace(ps);
- return os.toString()
- } else if (arguments.length === 2) {
- var t$1 = arguments[0];
- var depth = arguments[1];
- var stackTrace = '';
- var stringReader = new StringReader(StringUtil.getStackTrace(t$1));
- var lineNumberReader = new LineNumberReader(stringReader);
- for (var i = 0; i < depth; i++) {
- try {
- stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;
- } catch (e) {
- if (e instanceof IOException) {
- Assert.shouldNeverReachHere();
- } else { throw e }
- } finally {}
- }
- return stackTrace
- }
- };
- StringUtil.split = function split (s, separator) {
- var separatorlen = separator.length;
- var tokenList = new ArrayList();
- var tmpString = '' + s;
- var pos = tmpString.indexOf(separator);
- while (pos >= 0) {
- var token = tmpString.substring(0, pos);
- tokenList.add(token);
- tmpString = tmpString.substring(pos + separatorlen);
- pos = tmpString.indexOf(separator);
- }
- if (tmpString.length > 0) { tokenList.add(tmpString); }
- var res = new Array(tokenList.size()).fill(null);
- for (var i = 0; i < res.length; i++) {
- res[i] = tokenList.get(i);
- }
- return res
- };
- StringUtil.toString = function toString () {
- if (arguments.length === 1) {
- var d = arguments[0];
- return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)
- }
- };
- StringUtil.spaces = function spaces (n) {
- return StringUtil.chars(' ', n)
- };
- staticAccessors$15.NEWLINE.get = function () { return System.getProperty('line.separator') };
- staticAccessors$15.SIMPLE_ORDINATE_FORMAT.get = function () { return new DecimalFormat('0.#') };
- Object.defineProperties( StringUtil, staticAccessors$15 );
- var CoordinateSequences = function CoordinateSequences () {};
- CoordinateSequences.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CoordinateSequences.prototype.getClass = function getClass () {
- return CoordinateSequences
- };
- CoordinateSequences.copyCoord = function copyCoord (src, srcPos, dest, destPos) {
- var minDim = Math.min(src.getDimension(), dest.getDimension());
- for (var dim = 0; dim < minDim; dim++) {
- dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));
- }
- };
- CoordinateSequences.isRing = function isRing (seq) {
- var n = seq.size();
- if (n === 0) { return true }
- if (n <= 3) { return false }
- return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)
- };
- CoordinateSequences.isEqual = function isEqual (cs1, cs2) {
- var cs1Size = cs1.size();
- var cs2Size = cs2.size();
- if (cs1Size !== cs2Size) { return false }
- var dim = Math.min(cs1.getDimension(), cs2.getDimension());
- for (var i = 0; i < cs1Size; i++) {
- for (var d = 0; d < dim; d++) {
- var v1 = cs1.getOrdinate(i, d);
- var v2 = cs2.getOrdinate(i, d);
- if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) { continue }
- if (Double.isNaN(v1) && Double.isNaN(v2)) { continue }
- return false
- }
- }
- return true
- };
- CoordinateSequences.extend = function extend (fact, seq, size) {
- var newseq = fact.create(size, seq.getDimension());
- var n = seq.size();
- CoordinateSequences.copy(seq, 0, newseq, 0, n);
- if (n > 0) {
- for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, n - 1, newseq, i, 1); }
- }
- return newseq
- };
- CoordinateSequences.reverse = function reverse (seq) {
- var last = seq.size() - 1;
- var mid = Math.trunc(last / 2);
- for (var i = 0; i <= mid; i++) {
- CoordinateSequences.swap(seq, i, last - i);
- }
- };
- CoordinateSequences.swap = function swap (seq, i, j) {
- if (i === j) { return null }
- for (var dim = 0; dim < seq.getDimension(); dim++) {
- var tmp = seq.getOrdinate(i, dim);
- seq.setOrdinate(i, dim, seq.getOrdinate(j, dim));
- seq.setOrdinate(j, dim, tmp);
- }
- };
- CoordinateSequences.copy = function copy (src, srcPos, dest, destPos, length) {
- for (var i = 0; i < length; i++) {
- CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);
- }
- };
- CoordinateSequences.toString = function toString () {
- if (arguments.length === 1) {
- var cs = arguments[0];
- var size = cs.size();
- if (size === 0) { return '()' }
- var dim = cs.getDimension();
- var buf = new StringBuffer();
- buf.append('(');
- for (var i = 0; i < size; i++) {
- if (i > 0) { buf.append(' '); }
- for (var d = 0; d < dim; d++) {
- if (d > 0) { buf.append(','); }
- buf.append(StringUtil.toString(cs.getOrdinate(i, d)));
- }
- }
- buf.append(')');
- return buf.toString()
- }
- };
- CoordinateSequences.ensureValidRing = function ensureValidRing (fact, seq) {
- var n = seq.size();
- if (n === 0) { return seq }
- if (n <= 3) { return CoordinateSequences.createClosedRing(fact, seq, 4) }
- var isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);
- if (isClosed) { return seq }
- return CoordinateSequences.createClosedRing(fact, seq, n + 1)
- };
- CoordinateSequences.createClosedRing = function createClosedRing (fact, seq, size) {
- var newseq = fact.create(size, seq.getDimension());
- var n = seq.size();
- CoordinateSequences.copy(seq, 0, newseq, 0, n);
- for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, 0, newseq, i, 1); }
- return newseq
- };
- var LineString = (function (Geometry$$1) {
- function LineString (points, factory) {
- Geometry$$1.call(this, factory);
- this._points = null;
- this.init(points);
- }
- if ( Geometry$$1 ) LineString.__proto__ = Geometry$$1;
- LineString.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
- LineString.prototype.constructor = LineString;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- LineString.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
- if (this.isEmpty()) {
- return new Envelope()
- }
- return this._points.expandEnvelope(new Envelope())
- };
- LineString.prototype.isRing = function isRing () {
- return this.isClosed() && this.isSimple()
- };
- LineString.prototype.getSortIndex = function getSortIndex () {
- return Geometry$$1.SORTINDEX_LINESTRING
- };
- LineString.prototype.getCoordinates = function getCoordinates () {
- return this._points.toCoordinateArray()
- };
- LineString.prototype.equalsExact = function equalsExact () {
- var this$1 = this;
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- var otherLineString = other;
- if (this._points.size() !== otherLineString._points.size()) {
- return false
- }
- for (var i = 0; i < this._points.size(); i++) {
- if (!this$1.equal(this$1._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {
- return false
- }
- }
- return true
- } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
- };
- LineString.prototype.normalize = function normalize () {
- var this$1 = this;
- for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {
- var j = this$1._points.size() - 1 - i;
- if (!this$1._points.getCoordinate(i).equals(this$1._points.getCoordinate(j))) {
- if (this$1._points.getCoordinate(i).compareTo(this$1._points.getCoordinate(j)) > 0) {
- CoordinateSequences.reverse(this$1._points);
- }
- return null
- }
- }
- };
- LineString.prototype.getCoordinate = function getCoordinate () {
- if (this.isEmpty()) { return null }
- return this._points.getCoordinate(0)
- };
- LineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
- if (this.isClosed()) {
- return Dimension.FALSE
- }
- return 0
- };
- LineString.prototype.isClosed = function isClosed () {
- if (this.isEmpty()) {
- return false
- }
- return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))
- };
- LineString.prototype.getEndPoint = function getEndPoint () {
- if (this.isEmpty()) {
- return null
- }
- return this.getPointN(this.getNumPoints() - 1)
- };
- LineString.prototype.getDimension = function getDimension () {
- return 1
- };
- LineString.prototype.getLength = function getLength () {
- return CGAlgorithms.computeLength(this._points)
- };
- LineString.prototype.getNumPoints = function getNumPoints () {
- return this._points.size()
- };
- LineString.prototype.reverse = function reverse () {
- var seq = this._points.copy();
- CoordinateSequences.reverse(seq);
- var revLine = this.getFactory().createLineString(seq);
- return revLine
- };
- LineString.prototype.compareToSameClass = function compareToSameClass () {
- var this$1 = this;
- if (arguments.length === 1) {
- var o = arguments[0];
- var line = o;
- var i = 0;
- var j = 0;
- while (i < this._points.size() && j < line._points.size()) {
- var comparison = this$1._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));
- if (comparison !== 0) {
- return comparison
- }
- i++;
- j++;
- }
- if (i < this._points.size()) {
- return 1
- }
- if (j < line._points.size()) {
- return -1
- }
- return 0
- } else if (arguments.length === 2) {
- var o$1 = arguments[0];
- var comp = arguments[1];
- var line$1 = o$1;
- return comp.compare(this._points, line$1._points)
- }
- };
- LineString.prototype.apply = function apply () {
- var this$1 = this;
- if (hasInterface(arguments[0], CoordinateFilter)) {
- var filter = arguments[0];
- for (var i = 0; i < this._points.size(); i++) {
- filter.filter(this$1._points.getCoordinate(i));
- }
- } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
- var filter$1 = arguments[0];
- if (this._points.size() === 0) { return null }
- for (var i$1 = 0; i$1 < this._points.size(); i$1++) {
- filter$1.filter(this$1._points, i$1);
- if (filter$1.isDone()) { break }
- }
- if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
- } else if (hasInterface(arguments[0], GeometryFilter)) {
- var filter$2 = arguments[0];
- filter$2.filter(this);
- } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
- var filter$3 = arguments[0];
- filter$3.filter(this);
- }
- };
- LineString.prototype.getBoundary = function getBoundary () {
- return new BoundaryOp(this).getBoundary()
- };
- LineString.prototype.isEquivalentClass = function isEquivalentClass (other) {
- return other instanceof LineString
- };
- LineString.prototype.clone = function clone () {
- var ls = Geometry$$1.prototype.clone.call(this);
- ls._points = this._points.clone();
- return ls
- };
- LineString.prototype.getCoordinateN = function getCoordinateN (n) {
- return this._points.getCoordinate(n)
- };
- LineString.prototype.getGeometryType = function getGeometryType () {
- return 'LineString'
- };
- LineString.prototype.copy = function copy () {
- return new LineString(this._points.copy(), this._factory)
- };
- LineString.prototype.getCoordinateSequence = function getCoordinateSequence () {
- return this._points
- };
- LineString.prototype.isEmpty = function isEmpty () {
- return this._points.size() === 0
- };
- LineString.prototype.init = function init (points) {
- if (points === null) {
- points = this.getFactory().getCoordinateSequenceFactory().create([]);
- }
- if (points.size() === 1) {
- throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')
- }
- this._points = points;
- };
- LineString.prototype.isCoordinate = function isCoordinate (pt) {
- var this$1 = this;
- for (var i = 0; i < this._points.size(); i++) {
- if (this$1._points.getCoordinate(i).equals(pt)) {
- return true
- }
- }
- return false
- };
- LineString.prototype.getStartPoint = function getStartPoint () {
- if (this.isEmpty()) {
- return null
- }
- return this.getPointN(0)
- };
- LineString.prototype.getPointN = function getPointN (n) {
- return this.getFactory().createPoint(this._points.getCoordinate(n))
- };
- LineString.prototype.interfaces_ = function interfaces_ () {
- return [Lineal]
- };
- LineString.prototype.getClass = function getClass () {
- return LineString
- };
- staticAccessors.serialVersionUID.get = function () { return 3110669828065365560 };
- Object.defineProperties( LineString, staticAccessors );
- return LineString;
- }(Geometry));
- var Puntal = function Puntal () {};
- Puntal.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Puntal.prototype.getClass = function getClass () {
- return Puntal
- };
- var Point = (function (Geometry$$1) {
- function Point (coordinates, factory) {
- Geometry$$1.call(this, factory);
- this._coordinates = coordinates || null;
- this.init(this._coordinates);
- }
- if ( Geometry$$1 ) Point.__proto__ = Geometry$$1;
- Point.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
- Point.prototype.constructor = Point;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- Point.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
- if (this.isEmpty()) {
- return new Envelope()
- }
- var env = new Envelope();
- env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));
- return env
- };
- Point.prototype.getSortIndex = function getSortIndex () {
- return Geometry$$1.SORTINDEX_POINT
- };
- Point.prototype.getCoordinates = function getCoordinates () {
- return this.isEmpty() ? [] : [this.getCoordinate()]
- };
- Point.prototype.equalsExact = function equalsExact () {
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- if (this.isEmpty() && other.isEmpty()) {
- return true
- }
- if (this.isEmpty() !== other.isEmpty()) {
- return false
- }
- return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)
- } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
- };
- Point.prototype.normalize = function normalize () {};
- Point.prototype.getCoordinate = function getCoordinate () {
- return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null
- };
- Point.prototype.getBoundaryDimension = function getBoundaryDimension () {
- return Dimension.FALSE
- };
- Point.prototype.getDimension = function getDimension () {
- return 0
- };
- Point.prototype.getNumPoints = function getNumPoints () {
- return this.isEmpty() ? 0 : 1
- };
- Point.prototype.reverse = function reverse () {
- return this.copy()
- };
- Point.prototype.getX = function getX () {
- if (this.getCoordinate() === null) {
- throw new Error('getX called on empty Point')
- }
- return this.getCoordinate().x
- };
- Point.prototype.compareToSameClass = function compareToSameClass () {
- if (arguments.length === 1) {
- var other = arguments[0];
- var point$1 = other;
- return this.getCoordinate().compareTo(point$1.getCoordinate())
- } else if (arguments.length === 2) {
- var other$1 = arguments[0];
- var comp = arguments[1];
- var point = other$1;
- return comp.compare(this._coordinates, point._coordinates)
- }
- };
- Point.prototype.apply = function apply () {
- if (hasInterface(arguments[0], CoordinateFilter)) {
- var filter = arguments[0];
- if (this.isEmpty()) {
- return null
- }
- filter.filter(this.getCoordinate());
- } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
- var filter$1 = arguments[0];
- if (this.isEmpty()) { return null }
- filter$1.filter(this._coordinates, 0);
- if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
- } else if (hasInterface(arguments[0], GeometryFilter)) {
- var filter$2 = arguments[0];
- filter$2.filter(this);
- } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
- var filter$3 = arguments[0];
- filter$3.filter(this);
- }
- };
- Point.prototype.getBoundary = function getBoundary () {
- return this.getFactory().createGeometryCollection(null)
- };
- Point.prototype.clone = function clone () {
- var p = Geometry$$1.prototype.clone.call(this);
- p._coordinates = this._coordinates.clone();
- return p
- };
- Point.prototype.getGeometryType = function getGeometryType () {
- return 'Point'
- };
- Point.prototype.copy = function copy () {
- return new Point(this._coordinates.copy(), this._factory)
- };
- Point.prototype.getCoordinateSequence = function getCoordinateSequence () {
- return this._coordinates
- };
- Point.prototype.getY = function getY () {
- if (this.getCoordinate() === null) {
- throw new Error('getY called on empty Point')
- }
- return this.getCoordinate().y
- };
- Point.prototype.isEmpty = function isEmpty () {
- return this._coordinates.size() === 0
- };
- Point.prototype.init = function init (coordinates) {
- if (coordinates === null) {
- coordinates = this.getFactory().getCoordinateSequenceFactory().create([]);
- }
- Assert.isTrue(coordinates.size() <= 1);
- this._coordinates = coordinates;
- };
- Point.prototype.isSimple = function isSimple () {
- return true
- };
- Point.prototype.interfaces_ = function interfaces_ () {
- return [Puntal]
- };
- Point.prototype.getClass = function getClass () {
- return Point
- };
- staticAccessors.serialVersionUID.get = function () { return 4902022702746614570 };
- Object.defineProperties( Point, staticAccessors );
- return Point;
- }(Geometry));
- var Polygonal = function Polygonal () {};
- Polygonal.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Polygonal.prototype.getClass = function getClass () {
- return Polygonal
- };
- var Polygon = (function (Geometry$$1) {
- function Polygon (shell, holes, factory) {
- Geometry$$1.call(this, factory);
- this._shell = null;
- this._holes = null;
- if (shell === null) {
- shell = this.getFactory().createLinearRing();
- }
- if (holes === null) {
- holes = [];
- }
- if (Geometry$$1.hasNullElements(holes)) {
- throw new IllegalArgumentException('holes must not contain null elements')
- }
- if (shell.isEmpty() && Geometry$$1.hasNonEmptyElements(holes)) {
- throw new IllegalArgumentException('shell is empty but holes are not')
- }
- this._shell = shell;
- this._holes = holes;
- }
- if ( Geometry$$1 ) Polygon.__proto__ = Geometry$$1;
- Polygon.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
- Polygon.prototype.constructor = Polygon;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- Polygon.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
- return this._shell.getEnvelopeInternal()
- };
- Polygon.prototype.getSortIndex = function getSortIndex () {
- return Geometry$$1.SORTINDEX_POLYGON
- };
- Polygon.prototype.getCoordinates = function getCoordinates () {
- var this$1 = this;
- if (this.isEmpty()) {
- return []
- }
- var coordinates = new Array(this.getNumPoints()).fill(null);
- var k = -1;
- var shellCoordinates = this._shell.getCoordinates();
- for (var x = 0; x < shellCoordinates.length; x++) {
- k++;
- coordinates[k] = shellCoordinates[x];
- }
- for (var i = 0; i < this._holes.length; i++) {
- var childCoordinates = this$1._holes[i].getCoordinates();
- for (var j = 0; j < childCoordinates.length; j++) {
- k++;
- coordinates[k] = childCoordinates[j];
- }
- }
- return coordinates
- };
- Polygon.prototype.getArea = function getArea () {
- var this$1 = this;
- var area = 0.0;
- area += Math.abs(CGAlgorithms.signedArea(this._shell.getCoordinateSequence()));
- for (var i = 0; i < this._holes.length; i++) {
- area -= Math.abs(CGAlgorithms.signedArea(this$1._holes[i].getCoordinateSequence()));
- }
- return area
- };
- Polygon.prototype.isRectangle = function isRectangle () {
- if (this.getNumInteriorRing() !== 0) { return false }
- if (this._shell === null) { return false }
- if (this._shell.getNumPoints() !== 5) { return false }
- var seq = this._shell.getCoordinateSequence();
- var env = this.getEnvelopeInternal();
- for (var i = 0; i < 5; i++) {
- var x = seq.getX(i);
- if (!(x === env.getMinX() || x === env.getMaxX())) { return false }
- var y = seq.getY(i);
- if (!(y === env.getMinY() || y === env.getMaxY())) { return false }
- }
- var prevX = seq.getX(0);
- var prevY = seq.getY(0);
- for (var i$1 = 1; i$1 <= 4; i$1++) {
- var x$1 = seq.getX(i$1);
- var y$1 = seq.getY(i$1);
- var xChanged = x$1 !== prevX;
- var yChanged = y$1 !== prevY;
- if (xChanged === yChanged) { return false }
- prevX = x$1;
- prevY = y$1;
- }
- return true
- };
- Polygon.prototype.equalsExact = function equalsExact () {
- var this$1 = this;
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- var otherPolygon = other;
- var thisShell = this._shell;
- var otherPolygonShell = otherPolygon._shell;
- if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {
- return false
- }
- if (this._holes.length !== otherPolygon._holes.length) {
- return false
- }
- for (var i = 0; i < this._holes.length; i++) {
- if (!this$1._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {
- return false
- }
- }
- return true
- } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
- };
- Polygon.prototype.normalize = function normalize () {
- var this$1 = this;
- if (arguments.length === 0) {
- this.normalize(this._shell, true);
- for (var i = 0; i < this._holes.length; i++) {
- this$1.normalize(this$1._holes[i], false);
- }
- Arrays.sort(this._holes);
- } else if (arguments.length === 2) {
- var ring = arguments[0];
- var clockwise = arguments[1];
- if (ring.isEmpty()) {
- return null
- }
- var uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);
- System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);
- var minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());
- CoordinateArrays.scroll(uniqueCoordinates, minCoordinate);
- System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);
- ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];
- if (CGAlgorithms.isCCW(ring.getCoordinates()) === clockwise) {
- CoordinateArrays.reverse(ring.getCoordinates());
- }
- }
- };
- Polygon.prototype.getCoordinate = function getCoordinate () {
- return this._shell.getCoordinate()
- };
- Polygon.prototype.getNumInteriorRing = function getNumInteriorRing () {
- return this._holes.length
- };
- Polygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
- return 1
- };
- Polygon.prototype.getDimension = function getDimension () {
- return 2
- };
- Polygon.prototype.getLength = function getLength () {
- var this$1 = this;
- var len = 0.0;
- len += this._shell.getLength();
- for (var i = 0; i < this._holes.length; i++) {
- len += this$1._holes[i].getLength();
- }
- return len
- };
- Polygon.prototype.getNumPoints = function getNumPoints () {
- var this$1 = this;
- var numPoints = this._shell.getNumPoints();
- for (var i = 0; i < this._holes.length; i++) {
- numPoints += this$1._holes[i].getNumPoints();
- }
- return numPoints
- };
- Polygon.prototype.reverse = function reverse () {
- var this$1 = this;
- var poly = this.copy();
- poly._shell = this._shell.copy().reverse();
- poly._holes = new Array(this._holes.length).fill(null);
- for (var i = 0; i < this._holes.length; i++) {
- poly._holes[i] = this$1._holes[i].copy().reverse();
- }
- return poly
- };
- Polygon.prototype.convexHull = function convexHull () {
- return this.getExteriorRing().convexHull()
- };
- Polygon.prototype.compareToSameClass = function compareToSameClass () {
- var this$1 = this;
- if (arguments.length === 1) {
- var o = arguments[0];
- var thisShell = this._shell;
- var otherShell = o._shell;
- return thisShell.compareToSameClass(otherShell)
- } else if (arguments.length === 2) {
- var o$1 = arguments[0];
- var comp = arguments[1];
- var poly = o$1;
- var thisShell$1 = this._shell;
- var otherShell$1 = poly._shell;
- var shellComp = thisShell$1.compareToSameClass(otherShell$1, comp);
- if (shellComp !== 0) { return shellComp }
- var nHole1 = this.getNumInteriorRing();
- var nHole2 = poly.getNumInteriorRing();
- var i = 0;
- while (i < nHole1 && i < nHole2) {
- var thisHole = this$1.getInteriorRingN(i);
- var otherHole = poly.getInteriorRingN(i);
- var holeComp = thisHole.compareToSameClass(otherHole, comp);
- if (holeComp !== 0) { return holeComp }
- i++;
- }
- if (i < nHole1) { return 1 }
- if (i < nHole2) { return -1 }
- return 0
- }
- };
- Polygon.prototype.apply = function apply (filter) {
- var this$1 = this;
- if (hasInterface(filter, CoordinateFilter)) {
- this._shell.apply(filter);
- for (var i$1 = 0; i$1 < this._holes.length; i$1++) {
- this$1._holes[i$1].apply(filter);
- }
- } else if (hasInterface(filter, CoordinateSequenceFilter)) {
- this._shell.apply(filter);
- if (!filter.isDone()) {
- for (var i$2 = 0; i$2 < this._holes.length; i$2++) {
- this$1._holes[i$2].apply(filter);
- if (filter.isDone()) { break }
- }
- }
- if (filter.isGeometryChanged()) { this.geometryChanged(); }
- } else if (hasInterface(filter, GeometryFilter)) {
- filter.filter(this);
- } else if (hasInterface(filter, GeometryComponentFilter)) {
- filter.filter(this);
- this._shell.apply(filter);
- for (var i = 0; i < this._holes.length; i++) {
- this$1._holes[i].apply(filter);
- }
- }
- };
- Polygon.prototype.getBoundary = function getBoundary () {
- var this$1 = this;
- if (this.isEmpty()) {
- return this.getFactory().createMultiLineString()
- }
- var rings = new Array(this._holes.length + 1).fill(null);
- rings[0] = this._shell;
- for (var i = 0; i < this._holes.length; i++) {
- rings[i + 1] = this$1._holes[i];
- }
- if (rings.length <= 1) { return this.getFactory().createLinearRing(rings[0].getCoordinateSequence()) }
- return this.getFactory().createMultiLineString(rings)
- };
- Polygon.prototype.clone = function clone () {
- var this$1 = this;
- var poly = Geometry$$1.prototype.clone.call(this);
- poly._shell = this._shell.clone();
- poly._holes = new Array(this._holes.length).fill(null);
- for (var i = 0; i < this._holes.length; i++) {
- poly._holes[i] = this$1._holes[i].clone();
- }
- return poly
- };
- Polygon.prototype.getGeometryType = function getGeometryType () {
- return 'Polygon'
- };
- Polygon.prototype.copy = function copy () {
- var this$1 = this;
- var shell = this._shell.copy();
- var holes = new Array(this._holes.length).fill(null);
- for (var i = 0; i < holes.length; i++) {
- holes[i] = this$1._holes[i].copy();
- }
- return new Polygon(shell, holes, this._factory)
- };
- Polygon.prototype.getExteriorRing = function getExteriorRing () {
- return this._shell
- };
- Polygon.prototype.isEmpty = function isEmpty () {
- return this._shell.isEmpty()
- };
- Polygon.prototype.getInteriorRingN = function getInteriorRingN (n) {
- return this._holes[n]
- };
- Polygon.prototype.interfaces_ = function interfaces_ () {
- return [Polygonal]
- };
- Polygon.prototype.getClass = function getClass () {
- return Polygon
- };
- staticAccessors.serialVersionUID.get = function () { return -3494792200821764533 };
- Object.defineProperties( Polygon, staticAccessors );
- return Polygon;
- }(Geometry));
- var MultiPoint = (function (GeometryCollection$$1) {
- function MultiPoint () {
- GeometryCollection$$1.apply(this, arguments);
- }
- if ( GeometryCollection$$1 ) MultiPoint.__proto__ = GeometryCollection$$1;
- MultiPoint.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
- MultiPoint.prototype.constructor = MultiPoint;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- MultiPoint.prototype.getSortIndex = function getSortIndex () {
- return Geometry.SORTINDEX_MULTIPOINT
- };
- MultiPoint.prototype.isValid = function isValid () {
- return true
- };
- MultiPoint.prototype.equalsExact = function equalsExact () {
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
- } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
- };
- MultiPoint.prototype.getCoordinate = function getCoordinate () {
- if (arguments.length === 1) {
- var n = arguments[0];
- return this._geometries[n].getCoordinate()
- } else { return GeometryCollection$$1.prototype.getCoordinate.apply(this, arguments) }
- };
- MultiPoint.prototype.getBoundaryDimension = function getBoundaryDimension () {
- return Dimension.FALSE
- };
- MultiPoint.prototype.getDimension = function getDimension () {
- return 0
- };
- MultiPoint.prototype.getBoundary = function getBoundary () {
- return this.getFactory().createGeometryCollection(null)
- };
- MultiPoint.prototype.getGeometryType = function getGeometryType () {
- return 'MultiPoint'
- };
- MultiPoint.prototype.copy = function copy () {
- var this$1 = this;
- var points = new Array(this._geometries.length).fill(null);
- for (var i = 0; i < points.length; i++) {
- points[i] = this$1._geometries[i].copy();
- }
- return new MultiPoint(points, this._factory)
- };
- MultiPoint.prototype.interfaces_ = function interfaces_ () {
- return [Puntal]
- };
- MultiPoint.prototype.getClass = function getClass () {
- return MultiPoint
- };
- staticAccessors.serialVersionUID.get = function () { return -8048474874175355449 };
- Object.defineProperties( MultiPoint, staticAccessors );
- return MultiPoint;
- }(GeometryCollection));
- var LinearRing = (function (LineString$$1) {
- function LinearRing (points, factory) {
- if (points instanceof Coordinate && factory instanceof GeometryFactory) {
- points = factory.getCoordinateSequenceFactory().create(points);
- }
- LineString$$1.call(this, points, factory);
- this.validateConstruction();
- }
- if ( LineString$$1 ) LinearRing.__proto__ = LineString$$1;
- LinearRing.prototype = Object.create( LineString$$1 && LineString$$1.prototype );
- LinearRing.prototype.constructor = LinearRing;
- var staticAccessors = { MINIMUM_VALID_SIZE: { configurable: true },serialVersionUID: { configurable: true } };
- LinearRing.prototype.getSortIndex = function getSortIndex () {
- return Geometry.SORTINDEX_LINEARRING
- };
- LinearRing.prototype.getBoundaryDimension = function getBoundaryDimension () {
- return Dimension.FALSE
- };
- LinearRing.prototype.isClosed = function isClosed () {
- if (this.isEmpty()) {
- return true
- }
- return LineString$$1.prototype.isClosed.call(this)
- };
- LinearRing.prototype.reverse = function reverse () {
- var seq = this._points.copy();
- CoordinateSequences.reverse(seq);
- var rev = this.getFactory().createLinearRing(seq);
- return rev
- };
- LinearRing.prototype.validateConstruction = function validateConstruction () {
- if (!this.isEmpty() && !LineString$$1.prototype.isClosed.call(this)) {
- throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')
- }
- if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {
- throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')
- }
- };
- LinearRing.prototype.getGeometryType = function getGeometryType () {
- return 'LinearRing'
- };
- LinearRing.prototype.copy = function copy () {
- return new LinearRing(this._points.copy(), this._factory)
- };
- LinearRing.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- LinearRing.prototype.getClass = function getClass () {
- return LinearRing
- };
- staticAccessors.MINIMUM_VALID_SIZE.get = function () { return 4 };
- staticAccessors.serialVersionUID.get = function () { return -4261142084085851829 };
- Object.defineProperties( LinearRing, staticAccessors );
- return LinearRing;
- }(LineString));
- var MultiPolygon = (function (GeometryCollection$$1) {
- function MultiPolygon () {
- GeometryCollection$$1.apply(this, arguments);
- }
- if ( GeometryCollection$$1 ) MultiPolygon.__proto__ = GeometryCollection$$1;
- MultiPolygon.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
- MultiPolygon.prototype.constructor = MultiPolygon;
- var staticAccessors = { serialVersionUID: { configurable: true } };
- MultiPolygon.prototype.getSortIndex = function getSortIndex () {
- return Geometry.SORTINDEX_MULTIPOLYGON
- };
- MultiPolygon.prototype.equalsExact = function equalsExact () {
- if (arguments.length === 2) {
- var other = arguments[0];
- var tolerance = arguments[1];
- if (!this.isEquivalentClass(other)) {
- return false
- }
- return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
- } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
- };
- MultiPolygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
- return 1
- };
- MultiPolygon.prototype.getDimension = function getDimension () {
- return 2
- };
- MultiPolygon.prototype.reverse = function reverse () {
- var this$1 = this;
- var n = this._geometries.length;
- var revGeoms = new Array(n).fill(null);
- for (var i = 0; i < this._geometries.length; i++) {
- revGeoms[i] = this$1._geometries[i].reverse();
- }
- return this.getFactory().createMultiPolygon(revGeoms)
- };
- MultiPolygon.prototype.getBoundary = function getBoundary () {
- var this$1 = this;
- if (this.isEmpty()) {
- return this.getFactory().createMultiLineString()
- }
- var allRings = new ArrayList();
- for (var i = 0; i < this._geometries.length; i++) {
- var polygon = this$1._geometries[i];
- var rings = polygon.getBoundary();
- for (var j = 0; j < rings.getNumGeometries(); j++) {
- allRings.add(rings.getGeometryN(j));
- }
- }
- var allRingsArray = new Array(allRings.size()).fill(null);
- return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))
- };
- MultiPolygon.prototype.getGeometryType = function getGeometryType () {
- return 'MultiPolygon'
- };
- MultiPolygon.prototype.copy = function copy () {
- var this$1 = this;
- var polygons = new Array(this._geometries.length).fill(null);
- for (var i = 0; i < polygons.length; i++) {
- polygons[i] = this$1._geometries[i].copy();
- }
- return new MultiPolygon(polygons, this._factory)
- };
- MultiPolygon.prototype.interfaces_ = function interfaces_ () {
- return [Polygonal]
- };
- MultiPolygon.prototype.getClass = function getClass () {
- return MultiPolygon
- };
- staticAccessors.serialVersionUID.get = function () { return -551033529766975875 };
- Object.defineProperties( MultiPolygon, staticAccessors );
- return MultiPolygon;
- }(GeometryCollection));
- var GeometryEditor = function GeometryEditor (factory) {
- this._factory = factory || null;
- this._isUserDataCopied = false;
- };
- var staticAccessors$16 = { NoOpGeometryOperation: { configurable: true },CoordinateOperation: { configurable: true },CoordinateSequenceOperation: { configurable: true } };
- GeometryEditor.prototype.setCopyUserData = function setCopyUserData (isUserDataCopied) {
- this._isUserDataCopied = isUserDataCopied;
- };
- GeometryEditor.prototype.edit = function edit (geometry, operation) {
- if (geometry === null) { return null }
- var result = this.editInternal(geometry, operation);
- if (this._isUserDataCopied) {
- result.setUserData(geometry.getUserData());
- }
- return result
- };
- GeometryEditor.prototype.editInternal = function editInternal (geometry, operation) {
- if (this._factory === null) { this._factory = geometry.getFactory(); }
- if (geometry instanceof GeometryCollection) {
- return this.editGeometryCollection(geometry, operation)
- }
- if (geometry instanceof Polygon) {
- return this.editPolygon(geometry, operation)
- }
- if (geometry instanceof Point) {
- return operation.edit(geometry, this._factory)
- }
- if (geometry instanceof LineString) {
- return operation.edit(geometry, this._factory)
- }
- Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName());
- return null
- };
- GeometryEditor.prototype.editGeometryCollection = function editGeometryCollection (collection, operation) {
- var this$1 = this;
- var collectionForType = operation.edit(collection, this._factory);
- var geometries = new ArrayList();
- for (var i = 0; i < collectionForType.getNumGeometries(); i++) {
- var geometry = this$1.edit(collectionForType.getGeometryN(i), operation);
- if (geometry === null || geometry.isEmpty()) {
- continue
- }
- geometries.add(geometry);
- }
- if (collectionForType.getClass() === MultiPoint) {
- return this._factory.createMultiPoint(geometries.toArray([]))
- }
- if (collectionForType.getClass() === MultiLineString) {
- return this._factory.createMultiLineString(geometries.toArray([]))
- }
- if (collectionForType.getClass() === MultiPolygon) {
- return this._factory.createMultiPolygon(geometries.toArray([]))
- }
- return this._factory.createGeometryCollection(geometries.toArray([]))
- };
- GeometryEditor.prototype.editPolygon = function editPolygon (polygon, operation) {
- var this$1 = this;
- var newPolygon = operation.edit(polygon, this._factory);
- if (newPolygon === null) { newPolygon = this._factory.createPolygon(null); }
- if (newPolygon.isEmpty()) {
- return newPolygon
- }
- var shell = this.edit(newPolygon.getExteriorRing(), operation);
- if (shell === null || shell.isEmpty()) {
- return this._factory.createPolygon()
- }
- var holes = new ArrayList();
- for (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {
- var hole = this$1.edit(newPolygon.getInteriorRingN(i), operation);
- if (hole === null || hole.isEmpty()) {
- continue
- }
- holes.add(hole);
- }
- return this._factory.createPolygon(shell, holes.toArray([]))
- };
- GeometryEditor.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryEditor.prototype.getClass = function getClass () {
- return GeometryEditor
- };
- GeometryEditor.GeometryEditorOperation = function GeometryEditorOperation () {};
- staticAccessors$16.NoOpGeometryOperation.get = function () { return NoOpGeometryOperation };
- staticAccessors$16.CoordinateOperation.get = function () { return CoordinateOperation };
- staticAccessors$16.CoordinateSequenceOperation.get = function () { return CoordinateSequenceOperation };
- Object.defineProperties( GeometryEditor, staticAccessors$16 );
- var NoOpGeometryOperation = function NoOpGeometryOperation () {};
- NoOpGeometryOperation.prototype.edit = function edit (geometry, factory) {
- return geometry
- };
- NoOpGeometryOperation.prototype.interfaces_ = function interfaces_ () {
- return [GeometryEditor.GeometryEditorOperation]
- };
- NoOpGeometryOperation.prototype.getClass = function getClass () {
- return NoOpGeometryOperation
- };
- var CoordinateOperation = function CoordinateOperation () {};
- CoordinateOperation.prototype.edit = function edit (geometry, factory) {
- var coords = this.editCoordinates(geometry.getCoordinates(), geometry);
- if (coords === null) { return geometry }
- if (geometry instanceof LinearRing) {
- return factory.createLinearRing(coords)
- }
- if (geometry instanceof LineString) {
- return factory.createLineString(coords)
- }
- if (geometry instanceof Point) {
- if (coords.length > 0) {
- return factory.createPoint(coords[0])
- } else {
- return factory.createPoint()
- }
- }
- return geometry
- };
- CoordinateOperation.prototype.interfaces_ = function interfaces_ () {
- return [GeometryEditor.GeometryEditorOperation]
- };
- CoordinateOperation.prototype.getClass = function getClass () {
- return CoordinateOperation
- };
- var CoordinateSequenceOperation = function CoordinateSequenceOperation () {};
- CoordinateSequenceOperation.prototype.edit = function edit (geometry, factory) {
- if (geometry instanceof LinearRing) {
- return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))
- }
- if (geometry instanceof LineString) {
- return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))
- }
- if (geometry instanceof Point) {
- return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))
- }
- return geometry
- };
- CoordinateSequenceOperation.prototype.interfaces_ = function interfaces_ () {
- return [GeometryEditor.GeometryEditorOperation]
- };
- CoordinateSequenceOperation.prototype.getClass = function getClass () {
- return CoordinateSequenceOperation
- };
- var CoordinateArraySequence = function CoordinateArraySequence () {
- var this$1 = this;
- this._dimension = 3;
- this._coordinates = null;
- if (arguments.length === 1) {
- if (arguments[0] instanceof Array) {
- this._coordinates = arguments[0];
- this._dimension = 3;
- } else if (Number.isInteger(arguments[0])) {
- var size = arguments[0];
- this._coordinates = new Array(size).fill(null);
- for (var i = 0; i < size; i++) {
- this$1._coordinates[i] = new Coordinate();
- }
- } else if (hasInterface(arguments[0], CoordinateSequence)) {
- var coordSeq = arguments[0];
- if (coordSeq === null) {
- this._coordinates = new Array(0).fill(null);
- return null
- }
- this._dimension = coordSeq.getDimension();
- this._coordinates = new Array(coordSeq.size()).fill(null);
- for (var i$1 = 0; i$1 < this._coordinates.length; i$1++) {
- this$1._coordinates[i$1] = coordSeq.getCoordinateCopy(i$1);
- }
- }
- } else if (arguments.length === 2) {
- if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {
- var coordinates = arguments[0];
- var dimension = arguments[1];
- this._coordinates = coordinates;
- this._dimension = dimension;
- if (coordinates === null) { this._coordinates = new Array(0).fill(null); }
- } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {
- var size$1 = arguments[0];
- var dimension$1 = arguments[1];
- this._coordinates = new Array(size$1).fill(null);
- this._dimension = dimension$1;
- for (var i$2 = 0; i$2 < size$1; i$2++) {
- this$1._coordinates[i$2] = new Coordinate();
- }
- }
- }
- };
- var staticAccessors$18 = { serialVersionUID: { configurable: true } };
- CoordinateArraySequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {
- switch (ordinateIndex) {
- case CoordinateSequence.X:
- this._coordinates[index].x = value;
- break
- case CoordinateSequence.Y:
- this._coordinates[index].y = value;
- break
- case CoordinateSequence.Z:
- this._coordinates[index].z = value;
- break
- default:
- throw new IllegalArgumentException('invalid ordinateIndex')
- }
- };
- CoordinateArraySequence.prototype.size = function size () {
- return this._coordinates.length
- };
- CoordinateArraySequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {
- switch (ordinateIndex) {
- case CoordinateSequence.X:
- return this._coordinates[index].x
- case CoordinateSequence.Y:
- return this._coordinates[index].y
- case CoordinateSequence.Z:
- return this._coordinates[index].z
- default:
- }
- return Double.NaN
- };
- CoordinateArraySequence.prototype.getCoordinate = function getCoordinate () {
- if (arguments.length === 1) {
- var i = arguments[0];
- return this._coordinates[i]
- } else if (arguments.length === 2) {
- var index = arguments[0];
- var coord = arguments[1];
- coord.x = this._coordinates[index].x;
- coord.y = this._coordinates[index].y;
- coord.z = this._coordinates[index].z;
- }
- };
- CoordinateArraySequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {
- return new Coordinate(this._coordinates[i])
- };
- CoordinateArraySequence.prototype.getDimension = function getDimension () {
- return this._dimension
- };
- CoordinateArraySequence.prototype.getX = function getX (index) {
- return this._coordinates[index].x
- };
- CoordinateArraySequence.prototype.clone = function clone () {
- var this$1 = this;
- var cloneCoordinates = new Array(this.size()).fill(null);
- for (var i = 0; i < this._coordinates.length; i++) {
- cloneCoordinates[i] = this$1._coordinates[i].clone();
- }
- return new CoordinateArraySequence(cloneCoordinates, this._dimension)
- };
- CoordinateArraySequence.prototype.expandEnvelope = function expandEnvelope (env) {
- var this$1 = this;
- for (var i = 0; i < this._coordinates.length; i++) {
- env.expandToInclude(this$1._coordinates[i]);
- }
- return env
- };
- CoordinateArraySequence.prototype.copy = function copy () {
- var this$1 = this;
- var cloneCoordinates = new Array(this.size()).fill(null);
- for (var i = 0; i < this._coordinates.length; i++) {
- cloneCoordinates[i] = this$1._coordinates[i].copy();
- }
- return new CoordinateArraySequence(cloneCoordinates, this._dimension)
- };
- CoordinateArraySequence.prototype.toString = function toString () {
- var this$1 = this;
- if (this._coordinates.length > 0) {
- var strBuf = new StringBuffer(17 * this._coordinates.length);
- strBuf.append('(');
- strBuf.append(this._coordinates[0]);
- for (var i = 1; i < this._coordinates.length; i++) {
- strBuf.append(', ');
- strBuf.append(this$1._coordinates[i]);
- }
- strBuf.append(')');
- return strBuf.toString()
- } else {
- return '()'
- }
- };
- CoordinateArraySequence.prototype.getY = function getY (index) {
- return this._coordinates[index].y
- };
- CoordinateArraySequence.prototype.toCoordinateArray = function toCoordinateArray () {
- return this._coordinates
- };
- CoordinateArraySequence.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateSequence, Serializable]
- };
- CoordinateArraySequence.prototype.getClass = function getClass () {
- return CoordinateArraySequence
- };
- staticAccessors$18.serialVersionUID.get = function () { return -915438501601840650 };
- Object.defineProperties( CoordinateArraySequence, staticAccessors$18 );
- var CoordinateArraySequenceFactory = function CoordinateArraySequenceFactory () {};
- var staticAccessors$17 = { serialVersionUID: { configurable: true },instanceObject: { configurable: true } };
- CoordinateArraySequenceFactory.prototype.readResolve = function readResolve () {
- return CoordinateArraySequenceFactory.instance()
- };
- CoordinateArraySequenceFactory.prototype.create = function create () {
- if (arguments.length === 1) {
- if (arguments[0] instanceof Array) {
- var coordinates = arguments[0];
- return new CoordinateArraySequence(coordinates)
- } else if (hasInterface(arguments[0], CoordinateSequence)) {
- var coordSeq = arguments[0];
- return new CoordinateArraySequence(coordSeq)
- }
- } else if (arguments.length === 2) {
- var size = arguments[0];
- var dimension = arguments[1];
- if (dimension > 3) { dimension = 3; }
- if (dimension < 2) { return new CoordinateArraySequence(size) }
- return new CoordinateArraySequence(size, dimension)
- }
- };
- CoordinateArraySequenceFactory.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateSequenceFactory, Serializable]
- };
- CoordinateArraySequenceFactory.prototype.getClass = function getClass () {
- return CoordinateArraySequenceFactory
- };
- CoordinateArraySequenceFactory.instance = function instance () {
- return CoordinateArraySequenceFactory.instanceObject
- };
- staticAccessors$17.serialVersionUID.get = function () { return -4099577099607551657 };
- staticAccessors$17.instanceObject.get = function () { return new CoordinateArraySequenceFactory() };
- Object.defineProperties( CoordinateArraySequenceFactory, staticAccessors$17 );
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html
- *
- * @extends {javascript.util.Map}
- * @constructor
- * @private
- */
- var HashMap = (function (MapInterface) {
- function HashMap () {
- MapInterface.call(this);
- this.map_ = new Map();
- }
- if ( MapInterface ) HashMap.__proto__ = MapInterface;
- HashMap.prototype = Object.create( MapInterface && MapInterface.prototype );
- HashMap.prototype.constructor = HashMap;
- /**
- * @override
- */
- HashMap.prototype.get = function get (key) {
- return this.map_.get(key) || null
- };
- /**
- * @override
- */
- HashMap.prototype.put = function put (key, value) {
- this.map_.set(key, value);
- return value
- };
- /**
- * @override
- */
- HashMap.prototype.values = function values () {
- var arrayList = new ArrayList();
- var it = this.map_.values();
- var o = it.next();
- while (!o.done) {
- arrayList.add(o.value);
- o = it.next();
- }
- return arrayList
- };
- /**
- * @override
- */
- HashMap.prototype.entrySet = function entrySet () {
- var hashSet = new HashSet();
- this.map_.entries().forEach(function (entry) { return hashSet.add(entry); });
- return hashSet
- };
- /**
- * @override
- */
- HashMap.prototype.size = function size () {
- return this.map_.size()
- };
- return HashMap;
- }(Map$1));
- var PrecisionModel = function PrecisionModel () {
- this._modelType = null;
- this._scale = null;
- if (arguments.length === 0) {
- this._modelType = PrecisionModel.FLOATING;
- } else if (arguments.length === 1) {
- if (arguments[0] instanceof Type) {
- var modelType = arguments[0];
- this._modelType = modelType;
- if (modelType === PrecisionModel.FIXED) {
- this.setScale(1.0);
- }
- } else if (typeof arguments[0] === 'number') {
- var scale = arguments[0];
- this._modelType = PrecisionModel.FIXED;
- this.setScale(scale);
- } else if (arguments[0] instanceof PrecisionModel) {
- var pm = arguments[0];
- this._modelType = pm._modelType;
- this._scale = pm._scale;
- }
- }
- };
- var staticAccessors$19 = { serialVersionUID: { configurable: true },maximumPreciseValue: { configurable: true } };
- PrecisionModel.prototype.equals = function equals (other) {
- if (!(other instanceof PrecisionModel)) {
- return false
- }
- var otherPrecisionModel = other;
- return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale
- };
- PrecisionModel.prototype.compareTo = function compareTo (o) {
- var other = o;
- var sigDigits = this.getMaximumSignificantDigits();
- var otherSigDigits = other.getMaximumSignificantDigits();
- return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))
- };
- PrecisionModel.prototype.getScale = function getScale () {
- return this._scale
- };
- PrecisionModel.prototype.isFloating = function isFloating () {
- return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE
- };
- PrecisionModel.prototype.getType = function getType () {
- return this._modelType
- };
- PrecisionModel.prototype.toString = function toString () {
- var description = 'UNKNOWN';
- if (this._modelType === PrecisionModel.FLOATING) {
- description = 'Floating';
- } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
- description = 'Floating-Single';
- } else if (this._modelType === PrecisionModel.FIXED) {
- description = 'Fixed (Scale=' + this.getScale() + ')';
- }
- return description
- };
- PrecisionModel.prototype.makePrecise = function makePrecise () {
- if (typeof arguments[0] === 'number') {
- var val = arguments[0];
- if (Double.isNaN(val)) { return val }
- if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
- var floatSingleVal = val;
- return floatSingleVal
- }
- if (this._modelType === PrecisionModel.FIXED) {
- return Math.round(val * this._scale) / this._scale
- }
- return val
- } else if (arguments[0] instanceof Coordinate) {
- var coord = arguments[0];
- if (this._modelType === PrecisionModel.FLOATING) { return null }
- coord.x = this.makePrecise(coord.x);
- coord.y = this.makePrecise(coord.y);
- }
- };
- PrecisionModel.prototype.getMaximumSignificantDigits = function getMaximumSignificantDigits () {
- var maxSigDigits = 16;
- if (this._modelType === PrecisionModel.FLOATING) {
- maxSigDigits = 16;
- } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
- maxSigDigits = 6;
- } else if (this._modelType === PrecisionModel.FIXED) {
- maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));
- }
- return maxSigDigits
- };
- PrecisionModel.prototype.setScale = function setScale (scale) {
- this._scale = Math.abs(scale);
- };
- PrecisionModel.prototype.interfaces_ = function interfaces_ () {
- return [Serializable, Comparable]
- };
- PrecisionModel.prototype.getClass = function getClass () {
- return PrecisionModel
- };
- PrecisionModel.mostPrecise = function mostPrecise (pm1, pm2) {
- if (pm1.compareTo(pm2) >= 0) { return pm1 }
- return pm2
- };
- staticAccessors$19.serialVersionUID.get = function () { return 7777263578777803835 };
- staticAccessors$19.maximumPreciseValue.get = function () { return 9007199254740992.0 };
- Object.defineProperties( PrecisionModel, staticAccessors$19 );
- var Type = function Type (name) {
- this._name = name || null;
- Type.nameToTypeMap.put(name, this);
- };
- var staticAccessors$1$1 = { serialVersionUID: { configurable: true },nameToTypeMap: { configurable: true } };
- Type.prototype.readResolve = function readResolve () {
- return Type.nameToTypeMap.get(this._name)
- };
- Type.prototype.toString = function toString () {
- return this._name
- };
- Type.prototype.interfaces_ = function interfaces_ () {
- return [Serializable]
- };
- Type.prototype.getClass = function getClass () {
- return Type
- };
- staticAccessors$1$1.serialVersionUID.get = function () { return -5528602631731589822 };
- staticAccessors$1$1.nameToTypeMap.get = function () { return new HashMap() };
- Object.defineProperties( Type, staticAccessors$1$1 );
- PrecisionModel.Type = Type;
- PrecisionModel.FIXED = new Type('FIXED');
- PrecisionModel.FLOATING = new Type('FLOATING');
- PrecisionModel.FLOATING_SINGLE = new Type('FLOATING SINGLE');
- var GeometryFactory = function GeometryFactory () {
- this._precisionModel = new PrecisionModel();
- this._SRID = 0;
- this._coordinateSequenceFactory = GeometryFactory.getDefaultCoordinateSequenceFactory();
- if (arguments.length === 0) {
- } else if (arguments.length === 1) {
- if (hasInterface(arguments[0], CoordinateSequenceFactory)) {
- this._coordinateSequenceFactory = arguments[0];
- } else if (arguments[0] instanceof PrecisionModel) {
- this._precisionModel = arguments[0];
- }
- } else if (arguments.length === 2) {
- this._precisionModel = arguments[0];
- this._SRID = arguments[1];
- } else if (arguments.length === 3) {
- this._precisionModel = arguments[0];
- this._SRID = arguments[1];
- this._coordinateSequenceFactory = arguments[2];
- }
- };
- var staticAccessors$2 = { serialVersionUID: { configurable: true } };
- GeometryFactory.prototype.toGeometry = function toGeometry (envelope) {
- if (envelope.isNull()) {
- return this.createPoint(null)
- }
- if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {
- return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))
- }
- if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {
- return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])
- }
- return this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null)
- };
- GeometryFactory.prototype.createLineString = function createLineString (coordinates) {
- if (!coordinates) { return new LineString(this.getCoordinateSequenceFactory().create([]), this) }
- else if (coordinates instanceof Array) { return new LineString(this.getCoordinateSequenceFactory().create(coordinates), this) }
- else if (hasInterface(coordinates, CoordinateSequence)) { return new LineString(coordinates, this) }
- };
- GeometryFactory.prototype.createMultiLineString = function createMultiLineString () {
- if (arguments.length === 0) {
- return new MultiLineString(null, this)
- } else if (arguments.length === 1) {
- var lineStrings = arguments[0];
- return new MultiLineString(lineStrings, this)
- }
- };
- GeometryFactory.prototype.buildGeometry = function buildGeometry (geomList) {
- var geomClass = null;
- var isHeterogeneous = false;
- var hasGeometryCollection = false;
- for (var i = geomList.iterator(); i.hasNext();) {
- var geom = i.next();
- var partClass = geom.getClass();
- if (geomClass === null) {
- geomClass = partClass;
- }
- if (partClass !== geomClass) {
- isHeterogeneous = true;
- }
- if (geom.isGeometryCollectionOrDerived()) { hasGeometryCollection = true; }
- }
- if (geomClass === null) {
- return this.createGeometryCollection()
- }
- if (isHeterogeneous || hasGeometryCollection) {
- return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))
- }
- var geom0 = geomList.iterator().next();
- var isCollection = geomList.size() > 1;
- if (isCollection) {
- if (geom0 instanceof Polygon) {
- return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))
- } else if (geom0 instanceof LineString) {
- return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))
- } else if (geom0 instanceof Point) {
- return this.createMultiPoint(GeometryFactory.toPointArray(geomList))
- }
- Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName());
- }
- return geom0
- };
- GeometryFactory.prototype.createMultiPointFromCoords = function createMultiPointFromCoords (coordinates) {
- return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
- };
- GeometryFactory.prototype.createPoint = function createPoint () {
- if (arguments.length === 0) {
- return this.createPoint(this.getCoordinateSequenceFactory().create([]))
- } else if (arguments.length === 1) {
- if (arguments[0] instanceof Coordinate) {
- var coordinate = arguments[0];
- return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)
- } else if (hasInterface(arguments[0], CoordinateSequence)) {
- var coordinates = arguments[0];
- return new Point(coordinates, this)
- }
- }
- };
- GeometryFactory.prototype.getCoordinateSequenceFactory = function getCoordinateSequenceFactory () {
- return this._coordinateSequenceFactory
- };
- GeometryFactory.prototype.createPolygon = function createPolygon () {
- if (arguments.length === 0) {
- return new Polygon(null, null, this)
- } else if (arguments.length === 1) {
- if (hasInterface(arguments[0], CoordinateSequence)) {
- var coordinates = arguments[0];
- return this.createPolygon(this.createLinearRing(coordinates))
- } else if (arguments[0] instanceof Array) {
- var coordinates$1 = arguments[0];
- return this.createPolygon(this.createLinearRing(coordinates$1))
- } else if (arguments[0] instanceof LinearRing) {
- var shell = arguments[0];
- return this.createPolygon(shell, null)
- }
- } else if (arguments.length === 2) {
- var shell$1 = arguments[0];
- var holes = arguments[1];
- return new Polygon(shell$1, holes, this)
- }
- };
- GeometryFactory.prototype.getSRID = function getSRID () {
- return this._SRID
- };
- GeometryFactory.prototype.createGeometryCollection = function createGeometryCollection () {
- if (arguments.length === 0) {
- return new GeometryCollection(null, this)
- } else if (arguments.length === 1) {
- var geometries = arguments[0];
- return new GeometryCollection(geometries, this)
- }
- };
- GeometryFactory.prototype.createGeometry = function createGeometry (g) {
- var editor = new GeometryEditor(this);
- return editor.edit(g, {
- edit: function () {
- if (arguments.length === 2) {
- var coordSeq = arguments[0];
- // const geometry = arguments[1]
- return this._coordinateSequenceFactory.create(coordSeq)
- }
- }
- })
- };
- GeometryFactory.prototype.getPrecisionModel = function getPrecisionModel () {
- return this._precisionModel
- };
- GeometryFactory.prototype.createLinearRing = function createLinearRing () {
- if (arguments.length === 0) {
- return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))
- } else if (arguments.length === 1) {
- if (arguments[0] instanceof Array) {
- var coordinates = arguments[0];
- return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
- } else if (hasInterface(arguments[0], CoordinateSequence)) {
- var coordinates$1 = arguments[0];
- return new LinearRing(coordinates$1, this)
- }
- }
- };
- GeometryFactory.prototype.createMultiPolygon = function createMultiPolygon () {
- if (arguments.length === 0) {
- return new MultiPolygon(null, this)
- } else if (arguments.length === 1) {
- var polygons = arguments[0];
- return new MultiPolygon(polygons, this)
- }
- };
- GeometryFactory.prototype.createMultiPoint = function createMultiPoint () {
- var this$1 = this;
- if (arguments.length === 0) {
- return new MultiPoint(null, this)
- } else if (arguments.length === 1) {
- if (arguments[0] instanceof Array) {
- var point = arguments[0];
- return new MultiPoint(point, this)
- } else if (arguments[0] instanceof Array) {
- var coordinates = arguments[0];
- return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
- } else if (hasInterface(arguments[0], CoordinateSequence)) {
- var coordinates$1 = arguments[0];
- if (coordinates$1 === null) {
- return this.createMultiPoint(new Array(0).fill(null))
- }
- var points = new Array(coordinates$1.size()).fill(null);
- for (var i = 0; i < coordinates$1.size(); i++) {
- var ptSeq = this$1.getCoordinateSequenceFactory().create(1, coordinates$1.getDimension());
- CoordinateSequences.copy(coordinates$1, i, ptSeq, 0, 1);
- points[i] = this$1.createPoint(ptSeq);
- }
- return this.createMultiPoint(points)
- }
- }
- };
- GeometryFactory.prototype.interfaces_ = function interfaces_ () {
- return [Serializable]
- };
- GeometryFactory.prototype.getClass = function getClass () {
- return GeometryFactory
- };
- GeometryFactory.toMultiPolygonArray = function toMultiPolygonArray (multiPolygons) {
- var multiPolygonArray = new Array(multiPolygons.size()).fill(null);
- return multiPolygons.toArray(multiPolygonArray)
- };
- GeometryFactory.toGeometryArray = function toGeometryArray (geometries) {
- if (geometries === null) { return null }
- var geometryArray = new Array(geometries.size()).fill(null);
- return geometries.toArray(geometryArray)
- };
- GeometryFactory.getDefaultCoordinateSequenceFactory = function getDefaultCoordinateSequenceFactory () {
- return CoordinateArraySequenceFactory.instance()
- };
- GeometryFactory.toMultiLineStringArray = function toMultiLineStringArray (multiLineStrings) {
- var multiLineStringArray = new Array(multiLineStrings.size()).fill(null);
- return multiLineStrings.toArray(multiLineStringArray)
- };
- GeometryFactory.toLineStringArray = function toLineStringArray (lineStrings) {
- var lineStringArray = new Array(lineStrings.size()).fill(null);
- return lineStrings.toArray(lineStringArray)
- };
- GeometryFactory.toMultiPointArray = function toMultiPointArray (multiPoints) {
- var multiPointArray = new Array(multiPoints.size()).fill(null);
- return multiPoints.toArray(multiPointArray)
- };
- GeometryFactory.toLinearRingArray = function toLinearRingArray (linearRings) {
- var linearRingArray = new Array(linearRings.size()).fill(null);
- return linearRings.toArray(linearRingArray)
- };
- GeometryFactory.toPointArray = function toPointArray (points) {
- var pointArray = new Array(points.size()).fill(null);
- return points.toArray(pointArray)
- };
- GeometryFactory.toPolygonArray = function toPolygonArray (polygons) {
- var polygonArray = new Array(polygons.size()).fill(null);
- return polygons.toArray(polygonArray)
- };
- GeometryFactory.createPointFromInternalCoord = function createPointFromInternalCoord (coord, exemplar) {
- exemplar.getPrecisionModel().makePrecise(coord);
- return exemplar.getFactory().createPoint(coord)
- };
- staticAccessors$2.serialVersionUID.get = function () { return -6820524753094095635 };
- Object.defineProperties( GeometryFactory, staticAccessors$2 );
- var geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'];
- /**
- * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON
- * NOTE: Adapted from OpenLayers 2.11 implementation.
- */
- /**
- * Create a new parser for GeoJSON
- *
- * @param {GeometryFactory} geometryFactory
- * @return An instance of GeoJsonParser.
- * @constructor
- * @private
- */
- var GeoJSONParser = function GeoJSONParser (geometryFactory) {
- this.geometryFactory = geometryFactory || new GeometryFactory();
- };
- /**
- * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries
- *
- * @param {}
- * A GeoJSON object.
- * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.
- * @private
- */
- GeoJSONParser.prototype.read = function read (json) {
- var obj;
- if (typeof json === 'string') {
- obj = JSON.parse(json);
- } else {
- obj = json;
- }
- var type = obj.type;
- if (!parse[type]) {
- throw new Error('Unknown GeoJSON type: ' + obj.type)
- }
- if (geometryTypes.indexOf(type) !== -1) {
- return parse[type].apply(this, [obj.coordinates])
- } else if (type === 'GeometryCollection') {
- return parse[type].apply(this, [obj.geometries])
- }
- // feature or feature collection
- return parse[type].apply(this, [obj])
- };
- /**
- * Serialize a Geometry object into GeoJSON
- *
- * @param {Geometry}
- * geometry A Geometry or array of Geometries.
- * @return {Object} A GeoJSON object represting the input Geometry/Geometries.
- * @private
- */
- GeoJSONParser.prototype.write = function write (geometry) {
- var type = geometry.getGeometryType();
- if (!extract[type]) {
- throw new Error('Geometry is not supported')
- }
- return extract[type].apply(this, [geometry])
- };
- var parse = {
- /**
- * Parse a GeoJSON Feature object
- *
- * @param {Object}
- * obj Object to parse.
- *
- * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.
- */
- Feature: function (obj) {
- var feature = {};
- // copy features
- for (var key in obj) {
- feature[key] = obj[key];
- }
- // parse geometry
- if (obj.geometry) {
- var type = obj.geometry.type;
- if (!parse[type]) {
- throw new Error('Unknown GeoJSON type: ' + obj.type)
- }
- feature.geometry = this.read(obj.geometry);
- }
- // bbox
- if (obj.bbox) {
- feature.bbox = parse.bbox.apply(this, [obj.bbox]);
- }
- return feature
- },
- /**
- * Parse a GeoJSON FeatureCollection object
- *
- * @param {Object}
- * obj Object to parse.
- *
- * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.
- */
- FeatureCollection: function (obj) {
- var this$1 = this;
- var featureCollection = {};
- if (obj.features) {
- featureCollection.features = [];
- for (var i = 0; i < obj.features.length; ++i) {
- featureCollection.features.push(this$1.read(obj.features[i]));
- }
- }
- if (obj.bbox) {
- featureCollection.bbox = this.parse.bbox.apply(this, [obj.bbox]);
- }
- return featureCollection
- },
- /**
- * Convert the ordinates in an array to an array of Coordinates
- *
- * @param {Array}
- * array Array with {Number}s.
- *
- * @return {Array} Array with Coordinates.
- */
- coordinates: function (array) {
- var coordinates = [];
- for (var i = 0; i < array.length; ++i) {
- var sub = array[i];
- coordinates.push(new Coordinate(sub[0], sub[1]));
- }
- return coordinates
- },
- /**
- * Convert the bbox to a LinearRing
- *
- * @param {Array}
- * array Array with [xMin, yMin, xMax, yMax].
- *
- * @return {Array} Array with Coordinates.
- */
- bbox: function (array) {
- return this.geometryFactory.createLinearRing([
- new Coordinate(array[0], array[1]),
- new Coordinate(array[2], array[1]),
- new Coordinate(array[2], array[3]),
- new Coordinate(array[0], array[3]),
- new Coordinate(array[0], array[1])
- ])
- },
- /**
- * Convert an Array with ordinates to a Point
- *
- * @param {Array}
- * array Array with ordinates.
- *
- * @return {Point} Point.
- */
- Point: function (array) {
- var coordinate = new Coordinate(array[0], array[1]);
- return this.geometryFactory.createPoint(coordinate)
- },
- /**
- * Convert an Array with coordinates to a MultiPoint
- *
- * @param {Array}
- * array Array with coordinates.
- *
- * @return {MultiPoint} MultiPoint.
- */
- MultiPoint: function (array) {
- var this$1 = this;
- var points = [];
- for (var i = 0; i < array.length; ++i) {
- points.push(parse.Point.apply(this$1, [array[i]]));
- }
- return this.geometryFactory.createMultiPoint(points)
- },
- /**
- * Convert an Array with coordinates to a LineString
- *
- * @param {Array}
- * array Array with coordinates.
- *
- * @return {LineString} LineString.
- */
- LineString: function (array) {
- var coordinates = parse.coordinates.apply(this, [array]);
- return this.geometryFactory.createLineString(coordinates)
- },
- /**
- * Convert an Array with coordinates to a MultiLineString
- *
- * @param {Array}
- * array Array with coordinates.
- *
- * @return {MultiLineString} MultiLineString.
- */
- MultiLineString: function (array) {
- var this$1 = this;
- var lineStrings = [];
- for (var i = 0; i < array.length; ++i) {
- lineStrings.push(parse.LineString.apply(this$1, [array[i]]));
- }
- return this.geometryFactory.createMultiLineString(lineStrings)
- },
- /**
- * Convert an Array to a Polygon
- *
- * @param {Array}
- * array Array with shell and holes.
- *
- * @return {Polygon} Polygon.
- */
- Polygon: function (array) {
- var this$1 = this;
- var shellCoordinates = parse.coordinates.apply(this, [array[0]]);
- var shell = this.geometryFactory.createLinearRing(shellCoordinates);
- var holes = [];
- for (var i = 1; i < array.length; ++i) {
- var hole = array[i];
- var coordinates = parse.coordinates.apply(this$1, [hole]);
- var linearRing = this$1.geometryFactory.createLinearRing(coordinates);
- holes.push(linearRing);
- }
- return this.geometryFactory.createPolygon(shell, holes)
- },
- /**
- * Convert an Array to a MultiPolygon
- *
- * @param {Array}
- * array Array of arrays with shell and rings.
- *
- * @return {MultiPolygon} MultiPolygon.
- */
- MultiPolygon: function (array) {
- var this$1 = this;
- var polygons = [];
- for (var i = 0; i < array.length; ++i) {
- var polygon = array[i];
- polygons.push(parse.Polygon.apply(this$1, [polygon]));
- }
- return this.geometryFactory.createMultiPolygon(polygons)
- },
- /**
- * Convert an Array to a GeometryCollection
- *
- * @param {Array}
- * array Array of GeoJSON geometries.
- *
- * @return {GeometryCollection} GeometryCollection.
- */
- GeometryCollection: function (array) {
- var this$1 = this;
- var geometries = [];
- for (var i = 0; i < array.length; ++i) {
- var geometry = array[i];
- geometries.push(this$1.read(geometry));
- }
- return this.geometryFactory.createGeometryCollection(geometries)
- }
- };
- var extract = {
- /**
- * Convert a Coordinate to an Array
- *
- * @param {Coordinate}
- * coordinate Coordinate to convert.
- *
- * @return {Array} Array of ordinates.
- */
- coordinate: function (coordinate) {
- return [coordinate.x, coordinate.y]
- },
- /**
- * Convert a Point to a GeoJSON object
- *
- * @param {Point}
- * point Point to convert.
- *
- * @return {Array} Array of 2 ordinates (paired to a coordinate).
- */
- Point: function (point) {
- var array = extract.coordinate.apply(this, [point.getCoordinate()]);
- return {
- type: 'Point',
- coordinates: array
- }
- },
- /**
- * Convert a MultiPoint to a GeoJSON object
- *
- * @param {MultiPoint}
- * multipoint MultiPoint to convert.
- *
- * @return {Array} Array of coordinates.
- */
- MultiPoint: function (multipoint) {
- var this$1 = this;
- var array = [];
- for (var i = 0; i < multipoint._geometries.length; ++i) {
- var point = multipoint._geometries[i];
- var geoJson = extract.Point.apply(this$1, [point]);
- array.push(geoJson.coordinates);
- }
- return {
- type: 'MultiPoint',
- coordinates: array
- }
- },
- /**
- * Convert a LineString to a GeoJSON object
- *
- * @param {LineString}
- * linestring LineString to convert.
- *
- * @return {Array} Array of coordinates.
- */
- LineString: function (linestring) {
- var this$1 = this;
- var array = [];
- var coordinates = linestring.getCoordinates();
- for (var i = 0; i < coordinates.length; ++i) {
- var coordinate = coordinates[i];
- array.push(extract.coordinate.apply(this$1, [coordinate]));
- }
- return {
- type: 'LineString',
- coordinates: array
- }
- },
- /**
- * Convert a MultiLineString to a GeoJSON object
- *
- * @param {MultiLineString}
- * multilinestring MultiLineString to convert.
- *
- * @return {Array} Array of Array of coordinates.
- */
- MultiLineString: function (multilinestring) {
- var this$1 = this;
- var array = [];
- for (var i = 0; i < multilinestring._geometries.length; ++i) {
- var linestring = multilinestring._geometries[i];
- var geoJson = extract.LineString.apply(this$1, [linestring]);
- array.push(geoJson.coordinates);
- }
- return {
- type: 'MultiLineString',
- coordinates: array
- }
- },
- /**
- * Convert a Polygon to a GeoJSON object
- *
- * @param {Polygon}
- * polygon Polygon to convert.
- *
- * @return {Array} Array with shell, holes.
- */
- Polygon: function (polygon) {
- var this$1 = this;
- var array = [];
- var shellGeoJson = extract.LineString.apply(this, [polygon._shell]);
- array.push(shellGeoJson.coordinates);
- for (var i = 0; i < polygon._holes.length; ++i) {
- var hole = polygon._holes[i];
- var holeGeoJson = extract.LineString.apply(this$1, [hole]);
- array.push(holeGeoJson.coordinates);
- }
- return {
- type: 'Polygon',
- coordinates: array
- }
- },
- /**
- * Convert a MultiPolygon to a GeoJSON object
- *
- * @param {MultiPolygon}
- * multipolygon MultiPolygon to convert.
- *
- * @return {Array} Array of polygons.
- */
- MultiPolygon: function (multipolygon) {
- var this$1 = this;
- var array = [];
- for (var i = 0; i < multipolygon._geometries.length; ++i) {
- var polygon = multipolygon._geometries[i];
- var geoJson = extract.Polygon.apply(this$1, [polygon]);
- array.push(geoJson.coordinates);
- }
- return {
- type: 'MultiPolygon',
- coordinates: array
- }
- },
- /**
- * Convert a GeometryCollection to a GeoJSON object
- *
- * @param {GeometryCollection}
- * collection GeometryCollection to convert.
- *
- * @return {Array} Array of geometries.
- */
- GeometryCollection: function (collection) {
- var this$1 = this;
- var array = [];
- for (var i = 0; i < collection._geometries.length; ++i) {
- var geometry = collection._geometries[i];
- var type = geometry.getGeometryType();
- array.push(extract[type].apply(this$1, [geometry]));
- }
- return {
- type: 'GeometryCollection',
- geometries: array
- }
- }
- };
- /**
- * Converts a geometry in GeoJSON to a {@link Geometry}.
- */
- /**
- * A <code>GeoJSONReader</code> is parameterized by a <code>GeometryFactory</code>,
- * to allow it to create <code>Geometry</code> objects of the appropriate
- * implementation. In particular, the <code>GeometryFactory</code> determines
- * the <code>PrecisionModel</code> and <code>SRID</code> that is used.
- *
- * @param {GeometryFactory} geometryFactory
- * @constructor
- */
- var GeoJSONReader = function GeoJSONReader (geometryFactory) {
- this.geometryFactory = geometryFactory || new GeometryFactory();
- this.precisionModel = this.geometryFactory.getPrecisionModel();
- this.parser = new GeoJSONParser(this.geometryFactory);
- };
- /**
- * Reads a GeoJSON representation of a {@link Geometry}
- *
- * Will also parse GeoJSON Features/FeatureCollections as custom objects.
- *
- * @param {Object|String} geoJson a GeoJSON Object or String.
- * @return {Geometry|Object} a <code>Geometry or Feature/FeatureCollection representation.</code>
- * @memberof GeoJSONReader
- */
- GeoJSONReader.prototype.read = function read (geoJson) {
- var geometry = this.parser.read(geoJson);
- if (this.precisionModel.getType() === PrecisionModel.FIXED) {
- this.reducePrecision(geometry);
- }
- return geometry
- };
- // NOTE: this is a hack
- GeoJSONReader.prototype.reducePrecision = function reducePrecision (geometry) {
- var this$1 = this;
- var i, len;
- if (geometry.coordinate) {
- this.precisionModel.makePrecise(geometry.coordinate);
- } else if (geometry.points) {
- for (i = 0, len = geometry.points.length; i < len; i++) {
- this$1.precisionModel.makePrecise(geometry.points[i]);
- }
- } else if (geometry.geometries) {
- for (i = 0, len = geometry.geometries.length; i < len; i++) {
- this$1.reducePrecision(geometry.geometries[i]);
- }
- }
- };
- /**
- * @module GeoJSONWriter
- */
- /**
- * Writes the GeoJSON representation of a {@link Geometry}. The
- * The GeoJSON format is defined <A
- * HREF="http://geojson.org/geojson-spec.html">here</A>.
- */
- /**
- * The <code>GeoJSONWriter</code> outputs coordinates rounded to the precision
- * model. Only the maximum number of decimal places necessary to represent the
- * ordinates to the required precision will be output.
- *
- * @param {GeometryFactory} geometryFactory
- * @constructor
- */
- var GeoJSONWriter = function GeoJSONWriter () {
- this.parser = new GeoJSONParser(this.geometryFactory);
- };
- /**
- * Converts a <code>Geometry</code> to its GeoJSON representation.
- *
- * @param {Geometry}
- * geometry a <code>Geometry</code> to process.
- * @return {Object} The GeoJSON representation of the Geometry.
- * @memberof GeoJSONWriter
- */
- GeoJSONWriter.prototype.write = function write (geometry) {
- return this.parser.write(geometry)
- };
- /* eslint-disable no-undef */
- // io
- var Position = function Position () {};
- var staticAccessors$20 = { ON: { configurable: true },LEFT: { configurable: true },RIGHT: { configurable: true } };
- Position.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Position.prototype.getClass = function getClass () {
- return Position
- };
- Position.opposite = function opposite (position) {
- if (position === Position.LEFT) { return Position.RIGHT }
- if (position === Position.RIGHT) { return Position.LEFT }
- return position
- };
- staticAccessors$20.ON.get = function () { return 0 };
- staticAccessors$20.LEFT.get = function () { return 1 };
- staticAccessors$20.RIGHT.get = function () { return 2 };
- Object.defineProperties( Position, staticAccessors$20 );
- /**
- * @param {string=} message Optional message
- * @extends {Error}
- * @constructor
- * @private
- */
- function EmptyStackException (message) {
- this.message = message || '';
- }
- EmptyStackException.prototype = new Error();
- /**
- * @type {string}
- */
- EmptyStackException.prototype.name = 'EmptyStackException';
- /**
- * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html
- *
- * @extends {List}
- * @constructor
- * @private
- */
- function Stack () {
- /**
- * @type {Array}
- * @private
- */
- this.array_ = [];
- }
- Stack.prototype = new List();
- /**
- * @override
- */
- Stack.prototype.add = function (e) {
- this.array_.push(e);
- return true
- };
- /**
- * @override
- */
- Stack.prototype.get = function (index) {
- if (index < 0 || index >= this.size()) {
- throw new Error()
- }
- return this.array_[index]
- };
- /**
- * Pushes an item onto the top of this stack.
- * @param {Object} e
- * @return {Object}
- */
- Stack.prototype.push = function (e) {
- this.array_.push(e);
- return e
- };
- /**
- * Pushes an item onto the top of this stack.
- * @param {Object} e
- * @return {Object}
- */
- Stack.prototype.pop = function (e) {
- if (this.array_.length === 0) {
- throw new EmptyStackException()
- }
- return this.array_.pop()
- };
- /**
- * Looks at the object at the top of this stack without removing it from the
- * stack.
- * @return {Object}
- */
- Stack.prototype.peek = function () {
- if (this.array_.length === 0) {
- throw new EmptyStackException()
- }
- return this.array_[this.array_.length - 1]
- };
- /**
- * Tests if this stack is empty.
- * @return {boolean} true if and only if this stack contains no items; false
- * otherwise.
- */
- Stack.prototype.empty = function () {
- if (this.array_.length === 0) {
- return true
- } else {
- return false
- }
- };
- /**
- * @return {boolean}
- */
- Stack.prototype.isEmpty = function () {
- return this.empty()
- };
- /**
- * Returns the 1-based position where an object is on this stack. If the object
- * o occurs as an item in this stack, this method returns the distance from the
- * top of the stack of the occurrence nearest the top of the stack; the topmost
- * item on the stack is considered to be at distance 1. The equals method is
- * used to compare o to the items in this stack.
- *
- * NOTE: does not currently actually use equals. (=== is used)
- *
- * @param {Object} o
- * @return {number} the 1-based position from the top of the stack where the
- * object is located; the return value -1 indicates that the object is
- * not on the stack.
- */
- Stack.prototype.search = function (o) {
- return this.array_.indexOf(o)
- };
- /**
- * @return {number}
- * @export
- */
- Stack.prototype.size = function () {
- return this.array_.length
- };
- /**
- * @return {Array}
- */
- Stack.prototype.toArray = function () {
- var this$1 = this;
- var array = [];
- for (var i = 0, len = this.array_.length; i < len; i++) {
- array.push(this$1.array_[i]);
- }
- return array
- };
- var RightmostEdgeFinder = function RightmostEdgeFinder () {
- this._minIndex = -1;
- this._minCoord = null;
- this._minDe = null;
- this._orientedDe = null;
- };
- RightmostEdgeFinder.prototype.getCoordinate = function getCoordinate () {
- return this._minCoord
- };
- RightmostEdgeFinder.prototype.getRightmostSide = function getRightmostSide (de, index) {
- var side = this.getRightmostSideOfSegment(de, index);
- if (side < 0) { side = this.getRightmostSideOfSegment(de, index - 1); }
- if (side < 0) {
- this._minCoord = null;
- this.checkForRightmostCoordinate(de);
- }
- return side
- };
- RightmostEdgeFinder.prototype.findRightmostEdgeAtVertex = function findRightmostEdgeAtVertex () {
- var pts = this._minDe.getEdge().getCoordinates();
- Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge');
- var pPrev = pts[this._minIndex - 1];
- var pNext = pts[this._minIndex + 1];
- var orientation = CGAlgorithms.computeOrientation(this._minCoord, pNext, pPrev);
- var usePrev = false;
- if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === CGAlgorithms.COUNTERCLOCKWISE) {
- usePrev = true;
- } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === CGAlgorithms.CLOCKWISE) {
- usePrev = true;
- }
- if (usePrev) {
- this._minIndex = this._minIndex - 1;
- }
- };
- RightmostEdgeFinder.prototype.getRightmostSideOfSegment = function getRightmostSideOfSegment (de, i) {
- var e = de.getEdge();
- var coord = e.getCoordinates();
- if (i < 0 || i + 1 >= coord.length) { return -1 }
- if (coord[i].y === coord[i + 1].y) { return -1 }
- var pos = Position.LEFT;
- if (coord[i].y < coord[i + 1].y) { pos = Position.RIGHT; }
- return pos
- };
- RightmostEdgeFinder.prototype.getEdge = function getEdge () {
- return this._orientedDe
- };
- RightmostEdgeFinder.prototype.checkForRightmostCoordinate = function checkForRightmostCoordinate (de) {
- var this$1 = this;
- var coord = de.getEdge().getCoordinates();
- for (var i = 0; i < coord.length - 1; i++) {
- if (this$1._minCoord === null || coord[i].x > this$1._minCoord.x) {
- this$1._minDe = de;
- this$1._minIndex = i;
- this$1._minCoord = coord[i];
- }
- }
- };
- RightmostEdgeFinder.prototype.findRightmostEdgeAtNode = function findRightmostEdgeAtNode () {
- var node = this._minDe.getNode();
- var star = node.getEdges();
- this._minDe = star.getRightmostEdge();
- if (!this._minDe.isForward()) {
- this._minDe = this._minDe.getSym();
- this._minIndex = this._minDe.getEdge().getCoordinates().length - 1;
- }
- };
- RightmostEdgeFinder.prototype.findEdge = function findEdge (dirEdgeList) {
- var this$1 = this;
- for (var i = dirEdgeList.iterator(); i.hasNext();) {
- var de = i.next();
- if (!de.isForward()) { continue }
- this$1.checkForRightmostCoordinate(de);
- }
- Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing');
- if (this._minIndex === 0) {
- this.findRightmostEdgeAtNode();
- } else {
- this.findRightmostEdgeAtVertex();
- }
- this._orientedDe = this._minDe;
- var rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);
- if (rightmostSide === Position.LEFT) {
- this._orientedDe = this._minDe.getSym();
- }
- };
- RightmostEdgeFinder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- RightmostEdgeFinder.prototype.getClass = function getClass () {
- return RightmostEdgeFinder
- };
- var TopologyException = (function (RuntimeException$$1) {
- function TopologyException (msg, pt) {
- RuntimeException$$1.call(this, TopologyException.msgWithCoord(msg, pt));
- this.pt = pt ? new Coordinate(pt) : null;
- this.name = 'TopologyException';
- }
- if ( RuntimeException$$1 ) TopologyException.__proto__ = RuntimeException$$1;
- TopologyException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
- TopologyException.prototype.constructor = TopologyException;
- TopologyException.prototype.getCoordinate = function getCoordinate () {
- return this.pt
- };
- TopologyException.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- TopologyException.prototype.getClass = function getClass () {
- return TopologyException
- };
- TopologyException.msgWithCoord = function msgWithCoord (msg, pt) {
- if (!pt) { return msg + ' [ ' + pt + ' ]' }
- return msg
- };
- return TopologyException;
- }(RuntimeException));
- var LinkedList = function LinkedList () {
- this.array_ = [];
- };
- LinkedList.prototype.addLast = function addLast (e) {
- this.array_.push(e);
- };
- LinkedList.prototype.removeFirst = function removeFirst () {
- return this.array_.shift()
- };
- LinkedList.prototype.isEmpty = function isEmpty () {
- return this.array_.length === 0
- };
- var BufferSubgraph = function BufferSubgraph () {
- this._finder = null;
- this._dirEdgeList = new ArrayList();
- this._nodes = new ArrayList();
- this._rightMostCoord = null;
- this._env = null;
- this._finder = new RightmostEdgeFinder();
- };
- BufferSubgraph.prototype.clearVisitedEdges = function clearVisitedEdges () {
- for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
- var de = it.next();
- de.setVisited(false);
- }
- };
- BufferSubgraph.prototype.getRightmostCoordinate = function getRightmostCoordinate () {
- return this._rightMostCoord
- };
- BufferSubgraph.prototype.computeNodeDepth = function computeNodeDepth (n) {
- var this$1 = this;
- var startEdge = null;
- for (var i = n.getEdges().iterator(); i.hasNext();) {
- var de = i.next();
- if (de.isVisited() || de.getSym().isVisited()) {
- startEdge = de;
- break
- }
- }
- if (startEdge === null) { throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate()) }
- n.getEdges().computeDepths(startEdge);
- for (var i$1 = n.getEdges().iterator(); i$1.hasNext();) {
- var de$1 = i$1.next();
- de$1.setVisited(true);
- this$1.copySymDepths(de$1);
- }
- };
- BufferSubgraph.prototype.computeDepth = function computeDepth (outsideDepth) {
- this.clearVisitedEdges();
- var de = this._finder.getEdge();
- // const n = de.getNode()
- // const label = de.getLabel()
- de.setEdgeDepths(Position.RIGHT, outsideDepth);
- this.copySymDepths(de);
- this.computeDepths(de);
- };
- BufferSubgraph.prototype.create = function create (node) {
- this.addReachable(node);
- this._finder.findEdge(this._dirEdgeList);
- this._rightMostCoord = this._finder.getCoordinate();
- };
- BufferSubgraph.prototype.findResultEdges = function findResultEdges () {
- for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
- var de = it.next();
- if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {
- de.setInResult(true);
- }
- }
- };
- BufferSubgraph.prototype.computeDepths = function computeDepths (startEdge) {
- var this$1 = this;
- var nodesVisited = new HashSet();
- var nodeQueue = new LinkedList();
- var startNode = startEdge.getNode();
- nodeQueue.addLast(startNode);
- nodesVisited.add(startNode);
- startEdge.setVisited(true);
- while (!nodeQueue.isEmpty()) {
- var n = nodeQueue.removeFirst();
- nodesVisited.add(n);
- this$1.computeNodeDepth(n);
- for (var i = n.getEdges().iterator(); i.hasNext();) {
- var de = i.next();
- var sym = de.getSym();
- if (sym.isVisited()) { continue }
- var adjNode = sym.getNode();
- if (!nodesVisited.contains(adjNode)) {
- nodeQueue.addLast(adjNode);
- nodesVisited.add(adjNode);
- }
- }
- }
- };
- BufferSubgraph.prototype.compareTo = function compareTo (o) {
- var graph = o;
- if (this._rightMostCoord.x < graph._rightMostCoord.x) {
- return -1
- }
- if (this._rightMostCoord.x > graph._rightMostCoord.x) {
- return 1
- }
- return 0
- };
- BufferSubgraph.prototype.getEnvelope = function getEnvelope () {
- if (this._env === null) {
- var edgeEnv = new Envelope();
- for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
- var dirEdge = it.next();
- var pts = dirEdge.getEdge().getCoordinates();
- for (var i = 0; i < pts.length - 1; i++) {
- edgeEnv.expandToInclude(pts[i]);
- }
- }
- this._env = edgeEnv;
- }
- return this._env
- };
- BufferSubgraph.prototype.addReachable = function addReachable (startNode) {
- var this$1 = this;
- var nodeStack = new Stack();
- nodeStack.add(startNode);
- while (!nodeStack.empty()) {
- var node = nodeStack.pop();
- this$1.add(node, nodeStack);
- }
- };
- BufferSubgraph.prototype.copySymDepths = function copySymDepths (de) {
- var sym = de.getSym();
- sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));
- sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));
- };
- BufferSubgraph.prototype.add = function add (node, nodeStack) {
- var this$1 = this;
- node.setVisited(true);
- this._nodes.add(node);
- for (var i = node.getEdges().iterator(); i.hasNext();) {
- var de = i.next();
- this$1._dirEdgeList.add(de);
- var sym = de.getSym();
- var symNode = sym.getNode();
- if (!symNode.isVisited()) { nodeStack.push(symNode); }
- }
- };
- BufferSubgraph.prototype.getNodes = function getNodes () {
- return this._nodes
- };
- BufferSubgraph.prototype.getDirectedEdges = function getDirectedEdges () {
- return this._dirEdgeList
- };
- BufferSubgraph.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- BufferSubgraph.prototype.getClass = function getClass () {
- return BufferSubgraph
- };
- var TopologyLocation = function TopologyLocation () {
- var this$1 = this;
- this.location = null;
- if (arguments.length === 1) {
- if (arguments[0] instanceof Array) {
- var location = arguments[0];
- this.init(location.length);
- } else if (Number.isInteger(arguments[0])) {
- var on = arguments[0];
- this.init(1);
- this.location[Position.ON] = on;
- } else if (arguments[0] instanceof TopologyLocation) {
- var gl = arguments[0];
- this.init(gl.location.length);
- if (gl !== null) {
- for (var i = 0; i < this.location.length; i++) {
- this$1.location[i] = gl.location[i];
- }
- }
- }
- } else if (arguments.length === 3) {
- var on$1 = arguments[0];
- var left = arguments[1];
- var right = arguments[2];
- this.init(3);
- this.location[Position.ON] = on$1;
- this.location[Position.LEFT] = left;
- this.location[Position.RIGHT] = right;
- }
- };
- TopologyLocation.prototype.setAllLocations = function setAllLocations (locValue) {
- var this$1 = this;
- for (var i = 0; i < this.location.length; i++) {
- this$1.location[i] = locValue;
- }
- };
- TopologyLocation.prototype.isNull = function isNull () {
- var this$1 = this;
- for (var i = 0; i < this.location.length; i++) {
- if (this$1.location[i] !== Location.NONE) { return false }
- }
- return true
- };
- TopologyLocation.prototype.setAllLocationsIfNull = function setAllLocationsIfNull (locValue) {
- var this$1 = this;
- for (var i = 0; i < this.location.length; i++) {
- if (this$1.location[i] === Location.NONE) { this$1.location[i] = locValue; }
- }
- };
- TopologyLocation.prototype.isLine = function isLine () {
- return this.location.length === 1
- };
- TopologyLocation.prototype.merge = function merge (gl) {
- var this$1 = this;
- if (gl.location.length > this.location.length) {
- var newLoc = new Array(3).fill(null);
- newLoc[Position.ON] = this.location[Position.ON];
- newLoc[Position.LEFT] = Location.NONE;
- newLoc[Position.RIGHT] = Location.NONE;
- this.location = newLoc;
- }
- for (var i = 0; i < this.location.length; i++) {
- if (this$1.location[i] === Location.NONE && i < gl.location.length) { this$1.location[i] = gl.location[i]; }
- }
- };
- TopologyLocation.prototype.getLocations = function getLocations () {
- return this.location
- };
- TopologyLocation.prototype.flip = function flip () {
- if (this.location.length <= 1) { return null }
- var temp = this.location[Position.LEFT];
- this.location[Position.LEFT] = this.location[Position.RIGHT];
- this.location[Position.RIGHT] = temp;
- };
- TopologyLocation.prototype.toString = function toString () {
- var buf = new StringBuffer();
- if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.LEFT])); }
- buf.append(Location.toLocationSymbol(this.location[Position.ON]));
- if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.RIGHT])); }
- return buf.toString()
- };
- TopologyLocation.prototype.setLocations = function setLocations (on, left, right) {
- this.location[Position.ON] = on;
- this.location[Position.LEFT] = left;
- this.location[Position.RIGHT] = right;
- };
- TopologyLocation.prototype.get = function get (posIndex) {
- if (posIndex < this.location.length) { return this.location[posIndex] }
- return Location.NONE
- };
- TopologyLocation.prototype.isArea = function isArea () {
- return this.location.length > 1
- };
- TopologyLocation.prototype.isAnyNull = function isAnyNull () {
- var this$1 = this;
- for (var i = 0; i < this.location.length; i++) {
- if (this$1.location[i] === Location.NONE) { return true }
- }
- return false
- };
- TopologyLocation.prototype.setLocation = function setLocation () {
- if (arguments.length === 1) {
- var locValue = arguments[0];
- this.setLocation(Position.ON, locValue);
- } else if (arguments.length === 2) {
- var locIndex = arguments[0];
- var locValue$1 = arguments[1];
- this.location[locIndex] = locValue$1;
- }
- };
- TopologyLocation.prototype.init = function init (size) {
- this.location = new Array(size).fill(null);
- this.setAllLocations(Location.NONE);
- };
- TopologyLocation.prototype.isEqualOnSide = function isEqualOnSide (le, locIndex) {
- return this.location[locIndex] === le.location[locIndex]
- };
- TopologyLocation.prototype.allPositionsEqual = function allPositionsEqual (loc) {
- var this$1 = this;
- for (var i = 0; i < this.location.length; i++) {
- if (this$1.location[i] !== loc) { return false }
- }
- return true
- };
- TopologyLocation.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- TopologyLocation.prototype.getClass = function getClass () {
- return TopologyLocation
- };
- var Label = function Label () {
- this.elt = new Array(2).fill(null);
- if (arguments.length === 1) {
- if (Number.isInteger(arguments[0])) {
- var onLoc = arguments[0];
- this.elt[0] = new TopologyLocation(onLoc);
- this.elt[1] = new TopologyLocation(onLoc);
- } else if (arguments[0] instanceof Label) {
- var lbl = arguments[0];
- this.elt[0] = new TopologyLocation(lbl.elt[0]);
- this.elt[1] = new TopologyLocation(lbl.elt[1]);
- }
- } else if (arguments.length === 2) {
- var geomIndex = arguments[0];
- var onLoc$1 = arguments[1];
- this.elt[0] = new TopologyLocation(Location.NONE);
- this.elt[1] = new TopologyLocation(Location.NONE);
- this.elt[geomIndex].setLocation(onLoc$1);
- } else if (arguments.length === 3) {
- var onLoc$2 = arguments[0];
- var leftLoc = arguments[1];
- var rightLoc = arguments[2];
- this.elt[0] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
- this.elt[1] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
- } else if (arguments.length === 4) {
- var geomIndex$1 = arguments[0];
- var onLoc$3 = arguments[1];
- var leftLoc$1 = arguments[2];
- var rightLoc$1 = arguments[3];
- this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
- this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
- this.elt[geomIndex$1].setLocations(onLoc$3, leftLoc$1, rightLoc$1);
- }
- };
- Label.prototype.getGeometryCount = function getGeometryCount () {
- var count = 0;
- if (!this.elt[0].isNull()) { count++; }
- if (!this.elt[1].isNull()) { count++; }
- return count
- };
- Label.prototype.setAllLocations = function setAllLocations (geomIndex, location) {
- this.elt[geomIndex].setAllLocations(location);
- };
- Label.prototype.isNull = function isNull (geomIndex) {
- return this.elt[geomIndex].isNull()
- };
- Label.prototype.setAllLocationsIfNull = function setAllLocationsIfNull () {
- if (arguments.length === 1) {
- var location = arguments[0];
- this.setAllLocationsIfNull(0, location);
- this.setAllLocationsIfNull(1, location);
- } else if (arguments.length === 2) {
- var geomIndex = arguments[0];
- var location$1 = arguments[1];
- this.elt[geomIndex].setAllLocationsIfNull(location$1);
- }
- };
- Label.prototype.isLine = function isLine (geomIndex) {
- return this.elt[geomIndex].isLine()
- };
- Label.prototype.merge = function merge (lbl) {
- var this$1 = this;
- for (var i = 0; i < 2; i++) {
- if (this$1.elt[i] === null && lbl.elt[i] !== null) {
- this$1.elt[i] = new TopologyLocation(lbl.elt[i]);
- } else {
- this$1.elt[i].merge(lbl.elt[i]);
- }
- }
- };
- Label.prototype.flip = function flip () {
- this.elt[0].flip();
- this.elt[1].flip();
- };
- Label.prototype.getLocation = function getLocation () {
- if (arguments.length === 1) {
- var geomIndex = arguments[0];
- return this.elt[geomIndex].get(Position.ON)
- } else if (arguments.length === 2) {
- var geomIndex$1 = arguments[0];
- var posIndex = arguments[1];
- return this.elt[geomIndex$1].get(posIndex)
- }
- };
- Label.prototype.toString = function toString () {
- var buf = new StringBuffer();
- if (this.elt[0] !== null) {
- buf.append('A:');
- buf.append(this.elt[0].toString());
- }
- if (this.elt[1] !== null) {
- buf.append(' B:');
- buf.append(this.elt[1].toString());
- }
- return buf.toString()
- };
- Label.prototype.isArea = function isArea () {
- if (arguments.length === 0) {
- return this.elt[0].isArea() || this.elt[1].isArea()
- } else if (arguments.length === 1) {
- var geomIndex = arguments[0];
- return this.elt[geomIndex].isArea()
- }
- };
- Label.prototype.isAnyNull = function isAnyNull (geomIndex) {
- return this.elt[geomIndex].isAnyNull()
- };
- Label.prototype.setLocation = function setLocation () {
- if (arguments.length === 2) {
- var geomIndex = arguments[0];
- var location = arguments[1];
- this.elt[geomIndex].setLocation(Position.ON, location);
- } else if (arguments.length === 3) {
- var geomIndex$1 = arguments[0];
- var posIndex = arguments[1];
- var location$1 = arguments[2];
- this.elt[geomIndex$1].setLocation(posIndex, location$1);
- }
- };
- Label.prototype.isEqualOnSide = function isEqualOnSide (lbl, side) {
- return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)
- };
- Label.prototype.allPositionsEqual = function allPositionsEqual (geomIndex, loc) {
- return this.elt[geomIndex].allPositionsEqual(loc)
- };
- Label.prototype.toLine = function toLine (geomIndex) {
- if (this.elt[geomIndex].isArea()) { this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0]); }
- };
- Label.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Label.prototype.getClass = function getClass () {
- return Label
- };
- Label.toLineLabel = function toLineLabel (label) {
- var lineLabel = new Label(Location.NONE);
- for (var i = 0; i < 2; i++) {
- lineLabel.setLocation(i, label.getLocation(i));
- }
- return lineLabel
- };
- var EdgeRing = function EdgeRing () {
- this._startDe = null;
- this._maxNodeDegree = -1;
- this._edges = new ArrayList();
- this._pts = new ArrayList();
- this._label = new Label(Location.NONE);
- this._ring = null;
- this._isHole = null;
- this._shell = null;
- this._holes = new ArrayList();
- this._geometryFactory = null;
- var start = arguments[0];
- var geometryFactory = arguments[1];
- this._geometryFactory = geometryFactory;
- this.computePoints(start);
- this.computeRing();
- };
- EdgeRing.prototype.computeRing = function computeRing () {
- var this$1 = this;
- if (this._ring !== null) { return null }
- var coord = new Array(this._pts.size()).fill(null);
- for (var i = 0; i < this._pts.size(); i++) {
- coord[i] = this$1._pts.get(i);
- }
- this._ring = this._geometryFactory.createLinearRing(coord);
- this._isHole = CGAlgorithms.isCCW(this._ring.getCoordinates());
- };
- EdgeRing.prototype.isIsolated = function isIsolated () {
- return this._label.getGeometryCount() === 1
- };
- EdgeRing.prototype.computePoints = function computePoints (start) {
- var this$1 = this;
- this._startDe = start;
- var de = start;
- var isFirstEdge = true;
- do {
- if (de === null) { throw new TopologyException('Found null DirectedEdge') }
- if (de.getEdgeRing() === this$1) { throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate()) }
- this$1._edges.add(de);
- var label = de.getLabel();
- Assert.isTrue(label.isArea());
- this$1.mergeLabel(label);
- this$1.addPoints(de.getEdge(), de.isForward(), isFirstEdge);
- isFirstEdge = false;
- this$1.setEdgeRing(de, this$1);
- de = this$1.getNext(de);
- } while (de !== this._startDe)
- };
- EdgeRing.prototype.getLinearRing = function getLinearRing () {
- return this._ring
- };
- EdgeRing.prototype.getCoordinate = function getCoordinate (i) {
- return this._pts.get(i)
- };
- EdgeRing.prototype.computeMaxNodeDegree = function computeMaxNodeDegree () {
- var this$1 = this;
- this._maxNodeDegree = 0;
- var de = this._startDe;
- do {
- var node = de.getNode();
- var degree = node.getEdges().getOutgoingDegree(this$1);
- if (degree > this$1._maxNodeDegree) { this$1._maxNodeDegree = degree; }
- de = this$1.getNext(de);
- } while (de !== this._startDe)
- this._maxNodeDegree *= 2;
- };
- EdgeRing.prototype.addPoints = function addPoints (edge, isForward, isFirstEdge) {
- var this$1 = this;
- var edgePts = edge.getCoordinates();
- if (isForward) {
- var startIndex = 1;
- if (isFirstEdge) { startIndex = 0; }
- for (var i = startIndex; i < edgePts.length; i++) {
- this$1._pts.add(edgePts[i]);
- }
- } else {
- var startIndex$1 = edgePts.length - 2;
- if (isFirstEdge) { startIndex$1 = edgePts.length - 1; }
- for (var i$1 = startIndex$1; i$1 >= 0; i$1--) {
- this$1._pts.add(edgePts[i$1]);
- }
- }
- };
- EdgeRing.prototype.isHole = function isHole () {
- return this._isHole
- };
- EdgeRing.prototype.setInResult = function setInResult () {
- var de = this._startDe;
- do {
- de.getEdge().setInResult(true);
- de = de.getNext();
- } while (de !== this._startDe)
- };
- EdgeRing.prototype.containsPoint = function containsPoint (p) {
- var shell = this.getLinearRing();
- var env = shell.getEnvelopeInternal();
- if (!env.contains(p)) { return false }
- if (!CGAlgorithms.isPointInRing(p, shell.getCoordinates())) { return false }
- for (var i = this._holes.iterator(); i.hasNext();) {
- var hole = i.next();
- if (hole.containsPoint(p)) { return false }
- }
- return true
- };
- EdgeRing.prototype.addHole = function addHole (ring) {
- this._holes.add(ring);
- };
- EdgeRing.prototype.isShell = function isShell () {
- return this._shell === null
- };
- EdgeRing.prototype.getLabel = function getLabel () {
- return this._label
- };
- EdgeRing.prototype.getEdges = function getEdges () {
- return this._edges
- };
- EdgeRing.prototype.getMaxNodeDegree = function getMaxNodeDegree () {
- if (this._maxNodeDegree < 0) { this.computeMaxNodeDegree(); }
- return this._maxNodeDegree
- };
- EdgeRing.prototype.getShell = function getShell () {
- return this._shell
- };
- EdgeRing.prototype.mergeLabel = function mergeLabel () {
- if (arguments.length === 1) {
- var deLabel = arguments[0];
- this.mergeLabel(deLabel, 0);
- this.mergeLabel(deLabel, 1);
- } else if (arguments.length === 2) {
- var deLabel$1 = arguments[0];
- var geomIndex = arguments[1];
- var loc = deLabel$1.getLocation(geomIndex, Position.RIGHT);
- if (loc === Location.NONE) { return null }
- if (this._label.getLocation(geomIndex) === Location.NONE) {
- this._label.setLocation(geomIndex, loc);
- return null
- }
- }
- };
- EdgeRing.prototype.setShell = function setShell (shell) {
- this._shell = shell;
- if (shell !== null) { shell.addHole(this); }
- };
- EdgeRing.prototype.toPolygon = function toPolygon (geometryFactory) {
- var this$1 = this;
- var holeLR = new Array(this._holes.size()).fill(null);
- for (var i = 0; i < this._holes.size(); i++) {
- holeLR[i] = this$1._holes.get(i).getLinearRing();
- }
- var poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);
- return poly
- };
- EdgeRing.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- EdgeRing.prototype.getClass = function getClass () {
- return EdgeRing
- };
- var MinimalEdgeRing = (function (EdgeRing$$1) {
- function MinimalEdgeRing () {
- var start = arguments[0];
- var geometryFactory = arguments[1];
- EdgeRing$$1.call(this, start, geometryFactory);
- }
- if ( EdgeRing$$1 ) MinimalEdgeRing.__proto__ = EdgeRing$$1;
- MinimalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
- MinimalEdgeRing.prototype.constructor = MinimalEdgeRing;
- MinimalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
- de.setMinEdgeRing(er);
- };
- MinimalEdgeRing.prototype.getNext = function getNext (de) {
- return de.getNextMin()
- };
- MinimalEdgeRing.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MinimalEdgeRing.prototype.getClass = function getClass () {
- return MinimalEdgeRing
- };
- return MinimalEdgeRing;
- }(EdgeRing));
- var MaximalEdgeRing = (function (EdgeRing$$1) {
- function MaximalEdgeRing () {
- var start = arguments[0];
- var geometryFactory = arguments[1];
- EdgeRing$$1.call(this, start, geometryFactory);
- }
- if ( EdgeRing$$1 ) MaximalEdgeRing.__proto__ = EdgeRing$$1;
- MaximalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
- MaximalEdgeRing.prototype.constructor = MaximalEdgeRing;
- MaximalEdgeRing.prototype.buildMinimalRings = function buildMinimalRings () {
- var this$1 = this;
- var minEdgeRings = new ArrayList();
- var de = this._startDe;
- do {
- if (de.getMinEdgeRing() === null) {
- var minEr = new MinimalEdgeRing(de, this$1._geometryFactory);
- minEdgeRings.add(minEr);
- }
- de = de.getNext();
- } while (de !== this._startDe)
- return minEdgeRings
- };
- MaximalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
- de.setEdgeRing(er);
- };
- MaximalEdgeRing.prototype.linkDirectedEdgesForMinimalEdgeRings = function linkDirectedEdgesForMinimalEdgeRings () {
- var this$1 = this;
- var de = this._startDe;
- do {
- var node = de.getNode();
- node.getEdges().linkMinimalDirectedEdges(this$1);
- de = de.getNext();
- } while (de !== this._startDe)
- };
- MaximalEdgeRing.prototype.getNext = function getNext (de) {
- return de.getNext()
- };
- MaximalEdgeRing.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MaximalEdgeRing.prototype.getClass = function getClass () {
- return MaximalEdgeRing
- };
- return MaximalEdgeRing;
- }(EdgeRing));
- var GraphComponent = function GraphComponent () {
- this._label = null;
- this._isInResult = false;
- this._isCovered = false;
- this._isCoveredSet = false;
- this._isVisited = false;
- if (arguments.length === 0) {} else if (arguments.length === 1) {
- var label = arguments[0];
- this._label = label;
- }
- };
- GraphComponent.prototype.setVisited = function setVisited (isVisited) {
- this._isVisited = isVisited;
- };
- GraphComponent.prototype.setInResult = function setInResult (isInResult) {
- this._isInResult = isInResult;
- };
- GraphComponent.prototype.isCovered = function isCovered () {
- return this._isCovered
- };
- GraphComponent.prototype.isCoveredSet = function isCoveredSet () {
- return this._isCoveredSet
- };
- GraphComponent.prototype.setLabel = function setLabel (label) {
- this._label = label;
- };
- GraphComponent.prototype.getLabel = function getLabel () {
- return this._label
- };
- GraphComponent.prototype.setCovered = function setCovered (isCovered) {
- this._isCovered = isCovered;
- this._isCoveredSet = true;
- };
- GraphComponent.prototype.updateIM = function updateIM (im) {
- Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label');
- this.computeIM(im);
- };
- GraphComponent.prototype.isInResult = function isInResult () {
- return this._isInResult
- };
- GraphComponent.prototype.isVisited = function isVisited () {
- return this._isVisited
- };
- GraphComponent.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GraphComponent.prototype.getClass = function getClass () {
- return GraphComponent
- };
- var Node = (function (GraphComponent$$1) {
- function Node () {
- GraphComponent$$1.call(this);
- this._coord = null;
- this._edges = null;
- var coord = arguments[0];
- var edges = arguments[1];
- this._coord = coord;
- this._edges = edges;
- this._label = new Label(0, Location.NONE);
- }
- if ( GraphComponent$$1 ) Node.__proto__ = GraphComponent$$1;
- Node.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
- Node.prototype.constructor = Node;
- Node.prototype.isIncidentEdgeInResult = function isIncidentEdgeInResult () {
- for (var it = this.getEdges().getEdges().iterator(); it.hasNext();) {
- var de = it.next();
- if (de.getEdge().isInResult()) { return true }
- }
- return false
- };
- Node.prototype.isIsolated = function isIsolated () {
- return this._label.getGeometryCount() === 1
- };
- Node.prototype.getCoordinate = function getCoordinate () {
- return this._coord
- };
- Node.prototype.print = function print (out) {
- out.println('node ' + this._coord + ' lbl: ' + this._label);
- };
- Node.prototype.computeIM = function computeIM (im) {};
- Node.prototype.computeMergedLocation = function computeMergedLocation (label2, eltIndex) {
- var loc = Location.NONE;
- loc = this._label.getLocation(eltIndex);
- if (!label2.isNull(eltIndex)) {
- var nLoc = label2.getLocation(eltIndex);
- if (loc !== Location.BOUNDARY) { loc = nLoc; }
- }
- return loc
- };
- Node.prototype.setLabel = function setLabel () {
- if (arguments.length === 2) {
- var argIndex = arguments[0];
- var onLocation = arguments[1];
- if (this._label === null) {
- this._label = new Label(argIndex, onLocation);
- } else { this._label.setLocation(argIndex, onLocation); }
- } else { return GraphComponent$$1.prototype.setLabel.apply(this, arguments) }
- };
- Node.prototype.getEdges = function getEdges () {
- return this._edges
- };
- Node.prototype.mergeLabel = function mergeLabel () {
- var this$1 = this;
- if (arguments[0] instanceof Node) {
- var n = arguments[0];
- this.mergeLabel(n._label);
- } else if (arguments[0] instanceof Label) {
- var label2 = arguments[0];
- for (var i = 0; i < 2; i++) {
- var loc = this$1.computeMergedLocation(label2, i);
- var thisLoc = this$1._label.getLocation(i);
- if (thisLoc === Location.NONE) { this$1._label.setLocation(i, loc); }
- }
- }
- };
- Node.prototype.add = function add (e) {
- this._edges.insert(e);
- e.setNode(this);
- };
- Node.prototype.setLabelBoundary = function setLabelBoundary (argIndex) {
- if (this._label === null) { return null }
- var loc = Location.NONE;
- if (this._label !== null) { loc = this._label.getLocation(argIndex); }
- var newLoc = null;
- switch (loc) {
- case Location.BOUNDARY:
- newLoc = Location.INTERIOR;
- break
- case Location.INTERIOR:
- newLoc = Location.BOUNDARY;
- break
- default:
- newLoc = Location.BOUNDARY;
- break
- }
- this._label.setLocation(argIndex, newLoc);
- };
- Node.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Node.prototype.getClass = function getClass () {
- return Node
- };
- return Node;
- }(GraphComponent));
- var NodeMap = function NodeMap () {
- this.nodeMap = new TreeMap();
- this.nodeFact = null;
- var nodeFact = arguments[0];
- this.nodeFact = nodeFact;
- };
- NodeMap.prototype.find = function find (coord) {
- return this.nodeMap.get(coord)
- };
- NodeMap.prototype.addNode = function addNode () {
- if (arguments[0] instanceof Coordinate) {
- var coord = arguments[0];
- var node = this.nodeMap.get(coord);
- if (node === null) {
- node = this.nodeFact.createNode(coord);
- this.nodeMap.put(coord, node);
- }
- return node
- } else if (arguments[0] instanceof Node) {
- var n = arguments[0];
- var node$1 = this.nodeMap.get(n.getCoordinate());
- if (node$1 === null) {
- this.nodeMap.put(n.getCoordinate(), n);
- return n
- }
- node$1.mergeLabel(n);
- return node$1
- }
- };
- NodeMap.prototype.print = function print (out) {
- for (var it = this.iterator(); it.hasNext();) {
- var n = it.next();
- n.print(out);
- }
- };
- NodeMap.prototype.iterator = function iterator () {
- return this.nodeMap.values().iterator()
- };
- NodeMap.prototype.values = function values () {
- return this.nodeMap.values()
- };
- NodeMap.prototype.getBoundaryNodes = function getBoundaryNodes (geomIndex) {
- var bdyNodes = new ArrayList();
- for (var i = this.iterator(); i.hasNext();) {
- var node = i.next();
- if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) { bdyNodes.add(node); }
- }
- return bdyNodes
- };
- NodeMap.prototype.add = function add (e) {
- var p = e.getCoordinate();
- var n = this.addNode(p);
- n.add(e);
- };
- NodeMap.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- NodeMap.prototype.getClass = function getClass () {
- return NodeMap
- };
- var Quadrant = function Quadrant () {};
- var staticAccessors$21 = { NE: { configurable: true },NW: { configurable: true },SW: { configurable: true },SE: { configurable: true } };
- Quadrant.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Quadrant.prototype.getClass = function getClass () {
- return Quadrant
- };
- Quadrant.isNorthern = function isNorthern (quad) {
- return quad === Quadrant.NE || quad === Quadrant.NW
- };
- Quadrant.isOpposite = function isOpposite (quad1, quad2) {
- if (quad1 === quad2) { return false }
- var diff = (quad1 - quad2 + 4) % 4;
- if (diff === 2) { return true }
- return false
- };
- Quadrant.commonHalfPlane = function commonHalfPlane (quad1, quad2) {
- if (quad1 === quad2) { return quad1 }
- var diff = (quad1 - quad2 + 4) % 4;
- if (diff === 2) { return -1 }
- var min = quad1 < quad2 ? quad1 : quad2;
- var max = quad1 > quad2 ? quad1 : quad2;
- if (min === 0 && max === 3) { return 3 }
- return min
- };
- Quadrant.isInHalfPlane = function isInHalfPlane (quad, halfPlane) {
- if (halfPlane === Quadrant.SE) {
- return quad === Quadrant.SE || quad === Quadrant.SW
- }
- return quad === halfPlane || quad === halfPlane + 1
- };
- Quadrant.quadrant = function quadrant () {
- if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
- var dx = arguments[0];
- var dy = arguments[1];
- if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )') }
- if (dx >= 0.0) {
- if (dy >= 0.0) { return Quadrant.NE; } else { return Quadrant.SE }
- } else {
- if (dy >= 0.0) { return Quadrant.NW; } else { return Quadrant.SW }
- }
- } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- if (p1.x === p0.x && p1.y === p0.y) { throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0) }
- if (p1.x >= p0.x) {
- if (p1.y >= p0.y) { return Quadrant.NE; } else { return Quadrant.SE }
- } else {
- if (p1.y >= p0.y) { return Quadrant.NW; } else { return Quadrant.SW }
- }
- }
- };
- staticAccessors$21.NE.get = function () { return 0 };
- staticAccessors$21.NW.get = function () { return 1 };
- staticAccessors$21.SW.get = function () { return 2 };
- staticAccessors$21.SE.get = function () { return 3 };
- Object.defineProperties( Quadrant, staticAccessors$21 );
- var EdgeEnd = function EdgeEnd () {
- this._edge = null;
- this._label = null;
- this._node = null;
- this._p0 = null;
- this._p1 = null;
- this._dx = null;
- this._dy = null;
- this._quadrant = null;
- if (arguments.length === 1) {
- var edge = arguments[0];
- this._edge = edge;
- } else if (arguments.length === 3) {
- var edge$1 = arguments[0];
- var p0 = arguments[1];
- var p1 = arguments[2];
- var label = null;
- this._edge = edge$1;
- this.init(p0, p1);
- this._label = label;
- } else if (arguments.length === 4) {
- var edge$2 = arguments[0];
- var p0$1 = arguments[1];
- var p1$1 = arguments[2];
- var label$1 = arguments[3];
- this._edge = edge$2;
- this.init(p0$1, p1$1);
- this._label = label$1;
- }
- };
- EdgeEnd.prototype.compareDirection = function compareDirection (e) {
- if (this._dx === e._dx && this._dy === e._dy) { return 0 }
- if (this._quadrant > e._quadrant) { return 1 }
- if (this._quadrant < e._quadrant) { return -1 }
- return CGAlgorithms.computeOrientation(e._p0, e._p1, this._p1)
- };
- EdgeEnd.prototype.getDy = function getDy () {
- return this._dy
- };
- EdgeEnd.prototype.getCoordinate = function getCoordinate () {
- return this._p0
- };
- EdgeEnd.prototype.setNode = function setNode (node) {
- this._node = node;
- };
- EdgeEnd.prototype.print = function print (out) {
- var angle = Math.atan2(this._dy, this._dx);
- var className = this.getClass().getName();
- var lastDotPos = className.lastIndexOf('.');
- var name = className.substring(lastDotPos + 1);
- out.print(' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label);
- };
- EdgeEnd.prototype.compareTo = function compareTo (obj) {
- var e = obj;
- return this.compareDirection(e)
- };
- EdgeEnd.prototype.getDirectedCoordinate = function getDirectedCoordinate () {
- return this._p1
- };
- EdgeEnd.prototype.getDx = function getDx () {
- return this._dx
- };
- EdgeEnd.prototype.getLabel = function getLabel () {
- return this._label
- };
- EdgeEnd.prototype.getEdge = function getEdge () {
- return this._edge
- };
- EdgeEnd.prototype.getQuadrant = function getQuadrant () {
- return this._quadrant
- };
- EdgeEnd.prototype.getNode = function getNode () {
- return this._node
- };
- EdgeEnd.prototype.toString = function toString () {
- var angle = Math.atan2(this._dy, this._dx);
- var className = this.getClass().getName();
- var lastDotPos = className.lastIndexOf('.');
- var name = className.substring(lastDotPos + 1);
- return ' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label
- };
- EdgeEnd.prototype.computeLabel = function computeLabel (boundaryNodeRule) {};
- EdgeEnd.prototype.init = function init (p0, p1) {
- this._p0 = p0;
- this._p1 = p1;
- this._dx = p1.x - p0.x;
- this._dy = p1.y - p0.y;
- this._quadrant = Quadrant.quadrant(this._dx, this._dy);
- Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found');
- };
- EdgeEnd.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- EdgeEnd.prototype.getClass = function getClass () {
- return EdgeEnd
- };
- var DirectedEdge = (function (EdgeEnd$$1) {
- function DirectedEdge () {
- var edge = arguments[0];
- var isForward = arguments[1];
- EdgeEnd$$1.call(this, edge);
- this._isForward = null;
- this._isInResult = false;
- this._isVisited = false;
- this._sym = null;
- this._next = null;
- this._nextMin = null;
- this._edgeRing = null;
- this._minEdgeRing = null;
- this._depth = [0, -999, -999];
- this._isForward = isForward;
- if (isForward) {
- this.init(edge.getCoordinate(0), edge.getCoordinate(1));
- } else {
- var n = edge.getNumPoints() - 1;
- this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1));
- }
- this.computeDirectedLabel();
- }
- if ( EdgeEnd$$1 ) DirectedEdge.__proto__ = EdgeEnd$$1;
- DirectedEdge.prototype = Object.create( EdgeEnd$$1 && EdgeEnd$$1.prototype );
- DirectedEdge.prototype.constructor = DirectedEdge;
- DirectedEdge.prototype.getNextMin = function getNextMin () {
- return this._nextMin
- };
- DirectedEdge.prototype.getDepth = function getDepth (position) {
- return this._depth[position]
- };
- DirectedEdge.prototype.setVisited = function setVisited (isVisited) {
- this._isVisited = isVisited;
- };
- DirectedEdge.prototype.computeDirectedLabel = function computeDirectedLabel () {
- this._label = new Label(this._edge.getLabel());
- if (!this._isForward) { this._label.flip(); }
- };
- DirectedEdge.prototype.getNext = function getNext () {
- return this._next
- };
- DirectedEdge.prototype.setDepth = function setDepth (position, depthVal) {
- if (this._depth[position] !== -999) {
- if (this._depth[position] !== depthVal) { throw new TopologyException('assigned depths do not match', this.getCoordinate()) }
- }
- this._depth[position] = depthVal;
- };
- DirectedEdge.prototype.isInteriorAreaEdge = function isInteriorAreaEdge () {
- var this$1 = this;
- var isInteriorAreaEdge = true;
- for (var i = 0; i < 2; i++) {
- if (!(this$1._label.isArea(i) && this$1._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this$1._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) {
- isInteriorAreaEdge = false;
- }
- }
- return isInteriorAreaEdge
- };
- DirectedEdge.prototype.setNextMin = function setNextMin (nextMin) {
- this._nextMin = nextMin;
- };
- DirectedEdge.prototype.print = function print (out) {
- EdgeEnd$$1.prototype.print.call(this, out);
- out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT]);
- out.print(' (' + this.getDepthDelta() + ')');
- if (this._isInResult) { out.print(' inResult'); }
- };
- DirectedEdge.prototype.setMinEdgeRing = function setMinEdgeRing (minEdgeRing) {
- this._minEdgeRing = minEdgeRing;
- };
- DirectedEdge.prototype.isLineEdge = function isLineEdge () {
- var isLine = this._label.isLine(0) || this._label.isLine(1);
- var isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR);
- var isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR);
- return isLine && isExteriorIfArea0 && isExteriorIfArea1
- };
- DirectedEdge.prototype.setEdgeRing = function setEdgeRing (edgeRing) {
- this._edgeRing = edgeRing;
- };
- DirectedEdge.prototype.getMinEdgeRing = function getMinEdgeRing () {
- return this._minEdgeRing
- };
- DirectedEdge.prototype.getDepthDelta = function getDepthDelta () {
- var depthDelta = this._edge.getDepthDelta();
- if (!this._isForward) { depthDelta = -depthDelta; }
- return depthDelta
- };
- DirectedEdge.prototype.setInResult = function setInResult (isInResult) {
- this._isInResult = isInResult;
- };
- DirectedEdge.prototype.getSym = function getSym () {
- return this._sym
- };
- DirectedEdge.prototype.isForward = function isForward () {
- return this._isForward
- };
- DirectedEdge.prototype.getEdge = function getEdge () {
- return this._edge
- };
- DirectedEdge.prototype.printEdge = function printEdge (out) {
- this.print(out);
- out.print(' ');
- if (this._isForward) { this._edge.print(out); } else { this._edge.printReverse(out); }
- };
- DirectedEdge.prototype.setSym = function setSym (de) {
- this._sym = de;
- };
- DirectedEdge.prototype.setVisitedEdge = function setVisitedEdge (isVisited) {
- this.setVisited(isVisited);
- this._sym.setVisited(isVisited);
- };
- DirectedEdge.prototype.setEdgeDepths = function setEdgeDepths (position, depth) {
- var depthDelta = this.getEdge().getDepthDelta();
- if (!this._isForward) { depthDelta = -depthDelta; }
- var directionFactor = 1;
- if (position === Position.LEFT) { directionFactor = -1; }
- var oppositePos = Position.opposite(position);
- var delta = depthDelta * directionFactor;
- var oppositeDepth = depth + delta;
- this.setDepth(position, depth);
- this.setDepth(oppositePos, oppositeDepth);
- };
- DirectedEdge.prototype.getEdgeRing = function getEdgeRing () {
- return this._edgeRing
- };
- DirectedEdge.prototype.isInResult = function isInResult () {
- return this._isInResult
- };
- DirectedEdge.prototype.setNext = function setNext (next) {
- this._next = next;
- };
- DirectedEdge.prototype.isVisited = function isVisited () {
- return this._isVisited
- };
- DirectedEdge.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- DirectedEdge.prototype.getClass = function getClass () {
- return DirectedEdge
- };
- DirectedEdge.depthFactor = function depthFactor (currLocation, nextLocation) {
- if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) { return 1; } else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) { return -1 }
- return 0
- };
- return DirectedEdge;
- }(EdgeEnd));
- var NodeFactory = function NodeFactory () {};
- NodeFactory.prototype.createNode = function createNode (coord) {
- return new Node(coord, null)
- };
- NodeFactory.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- NodeFactory.prototype.getClass = function getClass () {
- return NodeFactory
- };
- var PlanarGraph = function PlanarGraph () {
- this._edges = new ArrayList();
- this._nodes = null;
- this._edgeEndList = new ArrayList();
- if (arguments.length === 0) {
- this._nodes = new NodeMap(new NodeFactory());
- } else if (arguments.length === 1) {
- var nodeFact = arguments[0];
- this._nodes = new NodeMap(nodeFact);
- }
- };
- PlanarGraph.prototype.printEdges = function printEdges (out) {
- var this$1 = this;
- out.println('Edges:');
- for (var i = 0; i < this._edges.size(); i++) {
- out.println('edge ' + i + ':');
- var e = this$1._edges.get(i);
- e.print(out);
- e.eiList.print(out);
- }
- };
- PlanarGraph.prototype.find = function find (coord) {
- return this._nodes.find(coord)
- };
- PlanarGraph.prototype.addNode = function addNode () {
- if (arguments[0] instanceof Node) {
- var node = arguments[0];
- return this._nodes.addNode(node)
- } else if (arguments[0] instanceof Coordinate) {
- var coord = arguments[0];
- return this._nodes.addNode(coord)
- }
- };
- PlanarGraph.prototype.getNodeIterator = function getNodeIterator () {
- return this._nodes.iterator()
- };
- PlanarGraph.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
- for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- node.getEdges().linkResultDirectedEdges();
- }
- };
- PlanarGraph.prototype.debugPrintln = function debugPrintln (o) {
- System.out.println(o);
- };
- PlanarGraph.prototype.isBoundaryNode = function isBoundaryNode (geomIndex, coord) {
- var node = this._nodes.find(coord);
- if (node === null) { return false }
- var label = node.getLabel();
- if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) { return true }
- return false
- };
- PlanarGraph.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
- for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- node.getEdges().linkAllDirectedEdges();
- }
- };
- PlanarGraph.prototype.matchInSameDirection = function matchInSameDirection (p0, p1, ep0, ep1) {
- if (!p0.equals(ep0)) { return false }
- if (CGAlgorithms.computeOrientation(p0, p1, ep1) === CGAlgorithms.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) { return true }
- return false
- };
- PlanarGraph.prototype.getEdgeEnds = function getEdgeEnds () {
- return this._edgeEndList
- };
- PlanarGraph.prototype.debugPrint = function debugPrint (o) {
- System.out.print(o);
- };
- PlanarGraph.prototype.getEdgeIterator = function getEdgeIterator () {
- return this._edges.iterator()
- };
- PlanarGraph.prototype.findEdgeInSameDirection = function findEdgeInSameDirection (p0, p1) {
- var this$1 = this;
- for (var i = 0; i < this._edges.size(); i++) {
- var e = this$1._edges.get(i);
- var eCoord = e.getCoordinates();
- if (this$1.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) { return e }
- if (this$1.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) { return e }
- }
- return null
- };
- PlanarGraph.prototype.insertEdge = function insertEdge (e) {
- this._edges.add(e);
- };
- PlanarGraph.prototype.findEdgeEnd = function findEdgeEnd (e) {
- for (var i = this.getEdgeEnds().iterator(); i.hasNext();) {
- var ee = i.next();
- if (ee.getEdge() === e) { return ee }
- }
- return null
- };
- PlanarGraph.prototype.addEdges = function addEdges (edgesToAdd) {
- var this$1 = this;
- for (var it = edgesToAdd.iterator(); it.hasNext();) {
- var e = it.next();
- this$1._edges.add(e);
- var de1 = new DirectedEdge(e, true);
- var de2 = new DirectedEdge(e, false);
- de1.setSym(de2);
- de2.setSym(de1);
- this$1.add(de1);
- this$1.add(de2);
- }
- };
- PlanarGraph.prototype.add = function add (e) {
- this._nodes.add(e);
- this._edgeEndList.add(e);
- };
- PlanarGraph.prototype.getNodes = function getNodes () {
- return this._nodes.values()
- };
- PlanarGraph.prototype.findEdge = function findEdge (p0, p1) {
- var this$1 = this;
- for (var i = 0; i < this._edges.size(); i++) {
- var e = this$1._edges.get(i);
- var eCoord = e.getCoordinates();
- if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) { return e }
- }
- return null
- };
- PlanarGraph.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PlanarGraph.prototype.getClass = function getClass () {
- return PlanarGraph
- };
- PlanarGraph.linkResultDirectedEdges = function linkResultDirectedEdges (nodes) {
- for (var nodeit = nodes.iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- node.getEdges().linkResultDirectedEdges();
- }
- };
- var PolygonBuilder = function PolygonBuilder () {
- this._geometryFactory = null;
- this._shellList = new ArrayList();
- var geometryFactory = arguments[0];
- this._geometryFactory = geometryFactory;
- };
- PolygonBuilder.prototype.sortShellsAndHoles = function sortShellsAndHoles (edgeRings, shellList, freeHoleList) {
- for (var it = edgeRings.iterator(); it.hasNext();) {
- var er = it.next();
- if (er.isHole()) {
- freeHoleList.add(er);
- } else {
- shellList.add(er);
- }
- }
- };
- PolygonBuilder.prototype.computePolygons = function computePolygons (shellList) {
- var this$1 = this;
- var resultPolyList = new ArrayList();
- for (var it = shellList.iterator(); it.hasNext();) {
- var er = it.next();
- var poly = er.toPolygon(this$1._geometryFactory);
- resultPolyList.add(poly);
- }
- return resultPolyList
- };
- PolygonBuilder.prototype.placeFreeHoles = function placeFreeHoles (shellList, freeHoleList) {
- var this$1 = this;
- for (var it = freeHoleList.iterator(); it.hasNext();) {
- var hole = it.next();
- if (hole.getShell() === null) {
- var shell = this$1.findEdgeRingContaining(hole, shellList);
- if (shell === null) { throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0)) }
- hole.setShell(shell);
- }
- }
- };
- PolygonBuilder.prototype.buildMinimalEdgeRings = function buildMinimalEdgeRings (maxEdgeRings, shellList, freeHoleList) {
- var this$1 = this;
- var edgeRings = new ArrayList();
- for (var it = maxEdgeRings.iterator(); it.hasNext();) {
- var er = it.next();
- if (er.getMaxNodeDegree() > 2) {
- er.linkDirectedEdgesForMinimalEdgeRings();
- var minEdgeRings = er.buildMinimalRings();
- var shell = this$1.findShell(minEdgeRings);
- if (shell !== null) {
- this$1.placePolygonHoles(shell, minEdgeRings);
- shellList.add(shell);
- } else {
- freeHoleList.addAll(minEdgeRings);
- }
- } else {
- edgeRings.add(er);
- }
- }
- return edgeRings
- };
- PolygonBuilder.prototype.containsPoint = function containsPoint (p) {
- for (var it = this._shellList.iterator(); it.hasNext();) {
- var er = it.next();
- if (er.containsPoint(p)) { return true }
- }
- return false
- };
- PolygonBuilder.prototype.buildMaximalEdgeRings = function buildMaximalEdgeRings (dirEdges) {
- var this$1 = this;
- var maxEdgeRings = new ArrayList();
- for (var it = dirEdges.iterator(); it.hasNext();) {
- var de = it.next();
- if (de.isInResult() && de.getLabel().isArea()) {
- if (de.getEdgeRing() === null) {
- var er = new MaximalEdgeRing(de, this$1._geometryFactory);
- maxEdgeRings.add(er);
- er.setInResult();
- }
- }
- }
- return maxEdgeRings
- };
- PolygonBuilder.prototype.placePolygonHoles = function placePolygonHoles (shell, minEdgeRings) {
- for (var it = minEdgeRings.iterator(); it.hasNext();) {
- var er = it.next();
- if (er.isHole()) {
- er.setShell(shell);
- }
- }
- };
- PolygonBuilder.prototype.getPolygons = function getPolygons () {
- var resultPolyList = this.computePolygons(this._shellList);
- return resultPolyList
- };
- PolygonBuilder.prototype.findEdgeRingContaining = function findEdgeRingContaining (testEr, shellList) {
- var testRing = testEr.getLinearRing();
- var testEnv = testRing.getEnvelopeInternal();
- var testPt = testRing.getCoordinateN(0);
- var minShell = null;
- var minEnv = null;
- for (var it = shellList.iterator(); it.hasNext();) {
- var tryShell = it.next();
- var tryRing = tryShell.getLinearRing();
- var tryEnv = tryRing.getEnvelopeInternal();
- if (minShell !== null) { minEnv = minShell.getLinearRing().getEnvelopeInternal(); }
- var isContained = false;
- if (tryEnv.contains(testEnv) && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates())) { isContained = true; }
- if (isContained) {
- if (minShell === null || minEnv.contains(tryEnv)) {
- minShell = tryShell;
- }
- }
- }
- return minShell
- };
- PolygonBuilder.prototype.findShell = function findShell (minEdgeRings) {
- var shellCount = 0;
- var shell = null;
- for (var it = minEdgeRings.iterator(); it.hasNext();) {
- var er = it.next();
- if (!er.isHole()) {
- shell = er;
- shellCount++;
- }
- }
- Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list');
- return shell
- };
- PolygonBuilder.prototype.add = function add () {
- if (arguments.length === 1) {
- var graph = arguments[0];
- this.add(graph.getEdgeEnds(), graph.getNodes());
- } else if (arguments.length === 2) {
- var dirEdges = arguments[0];
- var nodes = arguments[1];
- PlanarGraph.linkResultDirectedEdges(nodes);
- var maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);
- var freeHoleList = new ArrayList();
- var edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);
- this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);
- this.placeFreeHoles(this._shellList, freeHoleList);
- }
- };
- PolygonBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PolygonBuilder.prototype.getClass = function getClass () {
- return PolygonBuilder
- };
- var Boundable = function Boundable () {};
- Boundable.prototype.getBounds = function getBounds () {};
- Boundable.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Boundable.prototype.getClass = function getClass () {
- return Boundable
- };
- var ItemBoundable = function ItemBoundable () {
- this._bounds = null;
- this._item = null;
- var bounds = arguments[0];
- var item = arguments[1];
- this._bounds = bounds;
- this._item = item;
- };
- ItemBoundable.prototype.getItem = function getItem () {
- return this._item
- };
- ItemBoundable.prototype.getBounds = function getBounds () {
- return this._bounds
- };
- ItemBoundable.prototype.interfaces_ = function interfaces_ () {
- return [Boundable, Serializable]
- };
- ItemBoundable.prototype.getClass = function getClass () {
- return ItemBoundable
- };
- var PriorityQueue = function PriorityQueue () {
- this._size = null;
- this._items = null;
- this._size = 0;
- this._items = new ArrayList();
- this._items.add(null);
- };
- PriorityQueue.prototype.poll = function poll () {
- if (this.isEmpty()) { return null }
- var minItem = this._items.get(1);
- this._items.set(1, this._items.get(this._size));
- this._size -= 1;
- this.reorder(1);
- return minItem
- };
- PriorityQueue.prototype.size = function size () {
- return this._size
- };
- PriorityQueue.prototype.reorder = function reorder (hole) {
- var this$1 = this;
- var child = null;
- var tmp = this._items.get(hole);
- for (; hole * 2 <= this._size; hole = child) {
- child = hole * 2;
- if (child !== this$1._size && this$1._items.get(child + 1).compareTo(this$1._items.get(child)) < 0) { child++; }
- if (this$1._items.get(child).compareTo(tmp) < 0) { this$1._items.set(hole, this$1._items.get(child)); } else { break }
- }
- this._items.set(hole, tmp);
- };
- PriorityQueue.prototype.clear = function clear () {
- this._size = 0;
- this._items.clear();
- };
- PriorityQueue.prototype.isEmpty = function isEmpty () {
- return this._size === 0
- };
- PriorityQueue.prototype.add = function add (x) {
- var this$1 = this;
- this._items.add(null);
- this._size += 1;
- var hole = this._size;
- this._items.set(0, x);
- for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) {
- this$1._items.set(hole, this$1._items.get(Math.trunc(hole / 2)));
- }
- this._items.set(hole, x);
- };
- PriorityQueue.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PriorityQueue.prototype.getClass = function getClass () {
- return PriorityQueue
- };
- var ItemVisitor = function ItemVisitor () {};
- ItemVisitor.prototype.visitItem = function visitItem (item) {};
- ItemVisitor.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- ItemVisitor.prototype.getClass = function getClass () {
- return ItemVisitor
- };
- var SpatialIndex = function SpatialIndex () {};
- SpatialIndex.prototype.insert = function insert (itemEnv, item) {};
- SpatialIndex.prototype.remove = function remove (itemEnv, item) {};
- SpatialIndex.prototype.query = function query () {
- // if (arguments.length === 1) {
- // const searchEnv = arguments[0]
- // } else if (arguments.length === 2) {
- // const searchEnv = arguments[0]
- // const visitor = arguments[1]
- // }
- };
- SpatialIndex.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SpatialIndex.prototype.getClass = function getClass () {
- return SpatialIndex
- };
- var AbstractNode = function AbstractNode () {
- this._childBoundables = new ArrayList();
- this._bounds = null;
- this._level = null;
- if (arguments.length === 0) {} else if (arguments.length === 1) {
- var level = arguments[0];
- this._level = level;
- }
- };
- var staticAccessors$22 = { serialVersionUID: { configurable: true } };
- AbstractNode.prototype.getLevel = function getLevel () {
- return this._level
- };
- AbstractNode.prototype.size = function size () {
- return this._childBoundables.size()
- };
- AbstractNode.prototype.getChildBoundables = function getChildBoundables () {
- return this._childBoundables
- };
- AbstractNode.prototype.addChildBoundable = function addChildBoundable (childBoundable) {
- Assert.isTrue(this._bounds === null);
- this._childBoundables.add(childBoundable);
- };
- AbstractNode.prototype.isEmpty = function isEmpty () {
- return this._childBoundables.isEmpty()
- };
- AbstractNode.prototype.getBounds = function getBounds () {
- if (this._bounds === null) {
- this._bounds = this.computeBounds();
- }
- return this._bounds
- };
- AbstractNode.prototype.interfaces_ = function interfaces_ () {
- return [Boundable, Serializable]
- };
- AbstractNode.prototype.getClass = function getClass () {
- return AbstractNode
- };
- staticAccessors$22.serialVersionUID.get = function () { return 6493722185909573708 };
- Object.defineProperties( AbstractNode, staticAccessors$22 );
- var Collections = function Collections () {};
- Collections.reverseOrder = function reverseOrder () {
- return {
- compare: function compare (a, b) {
- return b.compareTo(a)
- }
- }
- };
- Collections.min = function min (l) {
- Collections.sort(l);
- return l.get(0)
- };
- Collections.sort = function sort (l, c) {
- var a = l.toArray();
- if (c) {
- Arrays.sort(a, c);
- } else {
- Arrays.sort(a);
- }
- var i = l.iterator();
- for (var pos = 0, alen = a.length; pos < alen; pos++) {
- i.next();
- i.set(a[pos]);
- }
- };
- Collections.singletonList = function singletonList (o) {
- var arrayList = new ArrayList();
- arrayList.add(o);
- return arrayList
- };
- var BoundablePair = function BoundablePair () {
- this._boundable1 = null;
- this._boundable2 = null;
- this._distance = null;
- this._itemDistance = null;
- var boundable1 = arguments[0];
- var boundable2 = arguments[1];
- var itemDistance = arguments[2];
- this._boundable1 = boundable1;
- this._boundable2 = boundable2;
- this._itemDistance = itemDistance;
- this._distance = this.distance();
- };
- BoundablePair.prototype.expandToQueue = function expandToQueue (priQ, minDistance) {
- var isComp1 = BoundablePair.isComposite(this._boundable1);
- var isComp2 = BoundablePair.isComposite(this._boundable2);
- if (isComp1 && isComp2) {
- if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {
- this.expand(this._boundable1, this._boundable2, priQ, minDistance);
- return null
- } else {
- this.expand(this._boundable2, this._boundable1, priQ, minDistance);
- return null
- }
- } else if (isComp1) {
- this.expand(this._boundable1, this._boundable2, priQ, minDistance);
- return null
- } else if (isComp2) {
- this.expand(this._boundable2, this._boundable1, priQ, minDistance);
- return null
- }
- throw new IllegalArgumentException('neither boundable is composite')
- };
- BoundablePair.prototype.isLeaves = function isLeaves () {
- return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))
- };
- BoundablePair.prototype.compareTo = function compareTo (o) {
- var nd = o;
- if (this._distance < nd._distance) { return -1 }
- if (this._distance > nd._distance) { return 1 }
- return 0
- };
- BoundablePair.prototype.expand = function expand (bndComposite, bndOther, priQ, minDistance) {
- var this$1 = this;
- var children = bndComposite.getChildBoundables();
- for (var i = children.iterator(); i.hasNext();) {
- var child = i.next();
- var bp = new BoundablePair(child, bndOther, this$1._itemDistance);
- if (bp.getDistance() < minDistance) {
- priQ.add(bp);
- }
- }
- };
- BoundablePair.prototype.getBoundable = function getBoundable (i) {
- if (i === 0) { return this._boundable1 }
- return this._boundable2
- };
- BoundablePair.prototype.getDistance = function getDistance () {
- return this._distance
- };
- BoundablePair.prototype.distance = function distance () {
- if (this.isLeaves()) {
- return this._itemDistance.distance(this._boundable1, this._boundable2)
- }
- return this._boundable1.getBounds().distance(this._boundable2.getBounds())
- };
- BoundablePair.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- BoundablePair.prototype.getClass = function getClass () {
- return BoundablePair
- };
- BoundablePair.area = function area (b) {
- return b.getBounds().getArea()
- };
- BoundablePair.isComposite = function isComposite (item) {
- return item instanceof AbstractNode
- };
- var AbstractSTRtree = function AbstractSTRtree () {
- this._root = null;
- this._built = false;
- this._itemBoundables = new ArrayList();
- this._nodeCapacity = null;
- if (arguments.length === 0) {
- var nodeCapacity = AbstractSTRtree.DEFAULT_NODE_CAPACITY;
- this._nodeCapacity = nodeCapacity;
- } else if (arguments.length === 1) {
- var nodeCapacity$1 = arguments[0];
- Assert.isTrue(nodeCapacity$1 > 1, 'Node capacity must be greater than 1');
- this._nodeCapacity = nodeCapacity$1;
- }
- };
- var staticAccessors$23 = { IntersectsOp: { configurable: true },serialVersionUID: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
- AbstractSTRtree.prototype.getNodeCapacity = function getNodeCapacity () {
- return this._nodeCapacity
- };
- AbstractSTRtree.prototype.lastNode = function lastNode (nodes) {
- return nodes.get(nodes.size() - 1)
- };
- AbstractSTRtree.prototype.size = function size () {
- var this$1 = this;
- if (arguments.length === 0) {
- if (this.isEmpty()) {
- return 0
- }
- this.build();
- return this.size(this._root)
- } else if (arguments.length === 1) {
- var node = arguments[0];
- var size = 0;
- for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (childBoundable instanceof AbstractNode) {
- size += this$1.size(childBoundable);
- } else if (childBoundable instanceof ItemBoundable) {
- size += 1;
- }
- }
- return size
- }
- };
- AbstractSTRtree.prototype.removeItem = function removeItem (node, item) {
- var childToRemove = null;
- for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (childBoundable instanceof ItemBoundable) {
- if (childBoundable.getItem() === item) { childToRemove = childBoundable; }
- }
- }
- if (childToRemove !== null) {
- node.getChildBoundables().remove(childToRemove);
- return true
- }
- return false
- };
- AbstractSTRtree.prototype.itemsTree = function itemsTree () {
- var this$1 = this;
- if (arguments.length === 0) {
- this.build();
- var valuesTree = this.itemsTree(this._root);
- if (valuesTree === null) { return new ArrayList() }
- return valuesTree
- } else if (arguments.length === 1) {
- var node = arguments[0];
- var valuesTreeForNode = new ArrayList();
- for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (childBoundable instanceof AbstractNode) {
- var valuesTreeForChild = this$1.itemsTree(childBoundable);
- if (valuesTreeForChild !== null) { valuesTreeForNode.add(valuesTreeForChild); }
- } else if (childBoundable instanceof ItemBoundable) {
- valuesTreeForNode.add(childBoundable.getItem());
- } else {
- Assert.shouldNeverReachHere();
- }
- }
- if (valuesTreeForNode.size() <= 0) { return null }
- return valuesTreeForNode
- }
- };
- AbstractSTRtree.prototype.insert = function insert (bounds, item) {
- Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.');
- this._itemBoundables.add(new ItemBoundable(bounds, item));
- };
- AbstractSTRtree.prototype.boundablesAtLevel = function boundablesAtLevel () {
- var this$1 = this;
- if (arguments.length === 1) {
- var level = arguments[0];
- var boundables = new ArrayList();
- this.boundablesAtLevel(level, this._root, boundables);
- return boundables
- } else if (arguments.length === 3) {
- var level$1 = arguments[0];
- var top = arguments[1];
- var boundables$1 = arguments[2];
- Assert.isTrue(level$1 > -2);
- if (top.getLevel() === level$1) {
- boundables$1.add(top);
- return null
- }
- for (var i = top.getChildBoundables().iterator(); i.hasNext();) {
- var boundable = i.next();
- if (boundable instanceof AbstractNode) {
- this$1.boundablesAtLevel(level$1, boundable, boundables$1);
- } else {
- Assert.isTrue(boundable instanceof ItemBoundable);
- if (level$1 === -1) {
- boundables$1.add(boundable);
- }
- }
- }
- return null
- }
- };
- AbstractSTRtree.prototype.query = function query () {
- var this$1 = this;
- if (arguments.length === 1) {
- var searchBounds = arguments[0];
- this.build();
- var matches = new ArrayList();
- if (this.isEmpty()) {
- return matches
- }
- if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
- this.query(searchBounds, this._root, matches);
- }
- return matches
- } else if (arguments.length === 2) {
- var searchBounds$1 = arguments[0];
- var visitor = arguments[1];
- this.build();
- if (this.isEmpty()) {
- return null
- }
- if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds$1)) {
- this.query(searchBounds$1, this._root, visitor);
- }
- } else if (arguments.length === 3) {
- if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
- var searchBounds$2 = arguments[0];
- var node = arguments[1];
- var visitor$1 = arguments[2];
- var childBoundables = node.getChildBoundables();
- for (var i = 0; i < childBoundables.size(); i++) {
- var childBoundable = childBoundables.get(i);
- if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$2)) {
- continue
- }
- if (childBoundable instanceof AbstractNode) {
- this$1.query(searchBounds$2, childBoundable, visitor$1);
- } else if (childBoundable instanceof ItemBoundable) {
- visitor$1.visitItem(childBoundable.getItem());
- } else {
- Assert.shouldNeverReachHere();
- }
- }
- } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
- var searchBounds$3 = arguments[0];
- var node$1 = arguments[1];
- var matches$1 = arguments[2];
- var childBoundables$1 = node$1.getChildBoundables();
- for (var i$1 = 0; i$1 < childBoundables$1.size(); i$1++) {
- var childBoundable$1 = childBoundables$1.get(i$1);
- if (!this$1.getIntersectsOp().intersects(childBoundable$1.getBounds(), searchBounds$3)) {
- continue
- }
- if (childBoundable$1 instanceof AbstractNode) {
- this$1.query(searchBounds$3, childBoundable$1, matches$1);
- } else if (childBoundable$1 instanceof ItemBoundable) {
- matches$1.add(childBoundable$1.getItem());
- } else {
- Assert.shouldNeverReachHere();
- }
- }
- }
- }
- };
- AbstractSTRtree.prototype.build = function build () {
- if (this._built) { return null }
- this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1);
- this._itemBoundables = null;
- this._built = true;
- };
- AbstractSTRtree.prototype.getRoot = function getRoot () {
- this.build();
- return this._root
- };
- AbstractSTRtree.prototype.remove = function remove () {
- var this$1 = this;
- if (arguments.length === 2) {
- var searchBounds = arguments[0];
- var item = arguments[1];
- this.build();
- if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
- return this.remove(searchBounds, this._root, item)
- }
- return false
- } else if (arguments.length === 3) {
- var searchBounds$1 = arguments[0];
- var node = arguments[1];
- var item$1 = arguments[2];
- var found = this.removeItem(node, item$1);
- if (found) { return true }
- var childToPrune = null;
- for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$1)) {
- continue
- }
- if (childBoundable instanceof AbstractNode) {
- found = this$1.remove(searchBounds$1, childBoundable, item$1);
- if (found) {
- childToPrune = childBoundable;
- break
- }
- }
- }
- if (childToPrune !== null) {
- if (childToPrune.getChildBoundables().isEmpty()) {
- node.getChildBoundables().remove(childToPrune);
- }
- }
- return found
- }
- };
- AbstractSTRtree.prototype.createHigherLevels = function createHigherLevels (boundablesOfALevel, level) {
- Assert.isTrue(!boundablesOfALevel.isEmpty());
- var parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1);
- if (parentBoundables.size() === 1) {
- return parentBoundables.get(0)
- }
- return this.createHigherLevels(parentBoundables, level + 1)
- };
- AbstractSTRtree.prototype.depth = function depth () {
- var this$1 = this;
- if (arguments.length === 0) {
- if (this.isEmpty()) {
- return 0
- }
- this.build();
- return this.depth(this._root)
- } else if (arguments.length === 1) {
- var node = arguments[0];
- var maxChildDepth = 0;
- for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (childBoundable instanceof AbstractNode) {
- var childDepth = this$1.depth(childBoundable);
- if (childDepth > maxChildDepth) { maxChildDepth = childDepth; }
- }
- }
- return maxChildDepth + 1
- }
- };
- AbstractSTRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
- var this$1 = this;
- Assert.isTrue(!childBoundables.isEmpty());
- var parentBoundables = new ArrayList();
- parentBoundables.add(this.createNode(newLevel));
- var sortedChildBoundables = new ArrayList(childBoundables);
- Collections.sort(sortedChildBoundables, this.getComparator());
- for (var i = sortedChildBoundables.iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (this$1.lastNode(parentBoundables).getChildBoundables().size() === this$1.getNodeCapacity()) {
- parentBoundables.add(this$1.createNode(newLevel));
- }
- this$1.lastNode(parentBoundables).addChildBoundable(childBoundable);
- }
- return parentBoundables
- };
- AbstractSTRtree.prototype.isEmpty = function isEmpty () {
- if (!this._built) { return this._itemBoundables.isEmpty() }
- return this._root.isEmpty()
- };
- AbstractSTRtree.prototype.interfaces_ = function interfaces_ () {
- return [Serializable]
- };
- AbstractSTRtree.prototype.getClass = function getClass () {
- return AbstractSTRtree
- };
- AbstractSTRtree.compareDoubles = function compareDoubles (a, b) {
- return a > b ? 1 : a < b ? -1 : 0
- };
- staticAccessors$23.IntersectsOp.get = function () { return IntersectsOp };
- staticAccessors$23.serialVersionUID.get = function () { return -3886435814360241337 };
- staticAccessors$23.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
- Object.defineProperties( AbstractSTRtree, staticAccessors$23 );
- var IntersectsOp = function IntersectsOp () {};
- var ItemDistance = function ItemDistance () {};
- ItemDistance.prototype.distance = function distance (item1, item2) {};
- ItemDistance.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- ItemDistance.prototype.getClass = function getClass () {
- return ItemDistance
- };
- var STRtree = (function (AbstractSTRtree$$1) {
- function STRtree (nodeCapacity) {
- nodeCapacity = nodeCapacity || STRtree.DEFAULT_NODE_CAPACITY;
- AbstractSTRtree$$1.call(this, nodeCapacity);
- }
- if ( AbstractSTRtree$$1 ) STRtree.__proto__ = AbstractSTRtree$$1;
- STRtree.prototype = Object.create( AbstractSTRtree$$1 && AbstractSTRtree$$1.prototype );
- STRtree.prototype.constructor = STRtree;
- var staticAccessors = { STRtreeNode: { configurable: true },serialVersionUID: { configurable: true },xComparator: { configurable: true },yComparator: { configurable: true },intersectsOp: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
- STRtree.prototype.createParentBoundablesFromVerticalSlices = function createParentBoundablesFromVerticalSlices (verticalSlices, newLevel) {
- var this$1 = this;
- Assert.isTrue(verticalSlices.length > 0);
- var parentBoundables = new ArrayList();
- for (var i = 0; i < verticalSlices.length; i++) {
- parentBoundables.addAll(this$1.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel));
- }
- return parentBoundables
- };
- STRtree.prototype.createNode = function createNode (level) {
- return new STRtreeNode(level)
- };
- STRtree.prototype.size = function size () {
- if (arguments.length === 0) {
- return AbstractSTRtree$$1.prototype.size.call(this)
- } else { return AbstractSTRtree$$1.prototype.size.apply(this, arguments) }
- };
- STRtree.prototype.insert = function insert () {
- if (arguments.length === 2) {
- var itemEnv = arguments[0];
- var item = arguments[1];
- if (itemEnv.isNull()) {
- return null
- }
- AbstractSTRtree$$1.prototype.insert.call(this, itemEnv, item);
- } else { return AbstractSTRtree$$1.prototype.insert.apply(this, arguments) }
- };
- STRtree.prototype.getIntersectsOp = function getIntersectsOp () {
- return STRtree.intersectsOp
- };
- STRtree.prototype.verticalSlices = function verticalSlices (childBoundables, sliceCount) {
- var sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount));
- var slices = new Array(sliceCount).fill(null);
- var i = childBoundables.iterator();
- for (var j = 0; j < sliceCount; j++) {
- slices[j] = new ArrayList();
- var boundablesAddedToSlice = 0;
- while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {
- var childBoundable = i.next();
- slices[j].add(childBoundable);
- boundablesAddedToSlice++;
- }
- }
- return slices
- };
- STRtree.prototype.query = function query () {
- if (arguments.length === 1) {
- var searchEnv = arguments[0];
- return AbstractSTRtree$$1.prototype.query.call(this, searchEnv)
- } else if (arguments.length === 2) {
- var searchEnv$1 = arguments[0];
- var visitor = arguments[1];
- AbstractSTRtree$$1.prototype.query.call(this, searchEnv$1, visitor);
- } else if (arguments.length === 3) {
- if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
- var searchBounds = arguments[0];
- var node = arguments[1];
- var visitor$1 = arguments[2];
- AbstractSTRtree$$1.prototype.query.call(this, searchBounds, node, visitor$1);
- } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
- var searchBounds$1 = arguments[0];
- var node$1 = arguments[1];
- var matches = arguments[2];
- AbstractSTRtree$$1.prototype.query.call(this, searchBounds$1, node$1, matches);
- }
- }
- };
- STRtree.prototype.getComparator = function getComparator () {
- return STRtree.yComparator
- };
- STRtree.prototype.createParentBoundablesFromVerticalSlice = function createParentBoundablesFromVerticalSlice (childBoundables, newLevel) {
- return AbstractSTRtree$$1.prototype.createParentBoundables.call(this, childBoundables, newLevel)
- };
- STRtree.prototype.remove = function remove () {
- if (arguments.length === 2) {
- var itemEnv = arguments[0];
- var item = arguments[1];
- return AbstractSTRtree$$1.prototype.remove.call(this, itemEnv, item)
- } else { return AbstractSTRtree$$1.prototype.remove.apply(this, arguments) }
- };
- STRtree.prototype.depth = function depth () {
- if (arguments.length === 0) {
- return AbstractSTRtree$$1.prototype.depth.call(this)
- } else { return AbstractSTRtree$$1.prototype.depth.apply(this, arguments) }
- };
- STRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
- Assert.isTrue(!childBoundables.isEmpty());
- var minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()));
- var sortedChildBoundables = new ArrayList(childBoundables);
- Collections.sort(sortedChildBoundables, STRtree.xComparator);
- var verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))));
- return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)
- };
- STRtree.prototype.nearestNeighbour = function nearestNeighbour () {
- if (arguments.length === 1) {
- if (hasInterface(arguments[0], ItemDistance)) {
- var itemDist = arguments[0];
- var bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist);
- return this.nearestNeighbour(bp)
- } else if (arguments[0] instanceof BoundablePair) {
- var initBndPair = arguments[0];
- return this.nearestNeighbour(initBndPair, Double.POSITIVE_INFINITY)
- }
- } else if (arguments.length === 2) {
- if (arguments[0] instanceof STRtree && hasInterface(arguments[1], ItemDistance)) {
- var tree = arguments[0];
- var itemDist$1 = arguments[1];
- var bp$1 = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist$1);
- return this.nearestNeighbour(bp$1)
- } else if (arguments[0] instanceof BoundablePair && typeof arguments[1] === 'number') {
- var initBndPair$1 = arguments[0];
- var maxDistance = arguments[1];
- var distanceLowerBound = maxDistance;
- var minPair = null;
- var priQ = new PriorityQueue();
- priQ.add(initBndPair$1);
- while (!priQ.isEmpty() && distanceLowerBound > 0.0) {
- var bndPair = priQ.poll();
- var currentDistance = bndPair.getDistance();
- if (currentDistance >= distanceLowerBound) { break }
- if (bndPair.isLeaves()) {
- distanceLowerBound = currentDistance;
- minPair = bndPair;
- } else {
- bndPair.expandToQueue(priQ, distanceLowerBound);
- }
- }
- return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]
- }
- } else if (arguments.length === 3) {
- var env = arguments[0];
- var item = arguments[1];
- var itemDist$2 = arguments[2];
- var bnd = new ItemBoundable(env, item);
- var bp$2 = new BoundablePair(this.getRoot(), bnd, itemDist$2);
- return this.nearestNeighbour(bp$2)[0]
- }
- };
- STRtree.prototype.interfaces_ = function interfaces_ () {
- return [SpatialIndex, Serializable]
- };
- STRtree.prototype.getClass = function getClass () {
- return STRtree
- };
- STRtree.centreX = function centreX (e) {
- return STRtree.avg(e.getMinX(), e.getMaxX())
- };
- STRtree.avg = function avg (a, b) {
- return (a + b) / 2
- };
- STRtree.centreY = function centreY (e) {
- return STRtree.avg(e.getMinY(), e.getMaxY())
- };
- staticAccessors.STRtreeNode.get = function () { return STRtreeNode };
- staticAccessors.serialVersionUID.get = function () { return 259274702368956900 };
- staticAccessors.xComparator.get = function () {
- return {
- interfaces_: function () {
- return [Comparator]
- },
- compare: function (o1, o2) {
- return AbstractSTRtree$$1.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))
- }
- }
- };
- staticAccessors.yComparator.get = function () {
- return {
- interfaces_: function () {
- return [Comparator]
- },
- compare: function (o1, o2) {
- return AbstractSTRtree$$1.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))
- }
- }
- };
- staticAccessors.intersectsOp.get = function () {
- return {
- interfaces_: function () {
- return [AbstractSTRtree$$1.IntersectsOp]
- },
- intersects: function (aBounds, bBounds) {
- return aBounds.intersects(bBounds)
- }
- }
- };
- staticAccessors.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
- Object.defineProperties( STRtree, staticAccessors );
- return STRtree;
- }(AbstractSTRtree));
- var STRtreeNode = (function (AbstractNode$$1) {
- function STRtreeNode () {
- var level = arguments[0];
- AbstractNode$$1.call(this, level);
- }
- if ( AbstractNode$$1 ) STRtreeNode.__proto__ = AbstractNode$$1;
- STRtreeNode.prototype = Object.create( AbstractNode$$1 && AbstractNode$$1.prototype );
- STRtreeNode.prototype.constructor = STRtreeNode;
- STRtreeNode.prototype.computeBounds = function computeBounds () {
- var bounds = null;
- for (var i = this.getChildBoundables().iterator(); i.hasNext();) {
- var childBoundable = i.next();
- if (bounds === null) {
- bounds = new Envelope(childBoundable.getBounds());
- } else {
- bounds.expandToInclude(childBoundable.getBounds());
- }
- }
- return bounds
- };
- STRtreeNode.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- STRtreeNode.prototype.getClass = function getClass () {
- return STRtreeNode
- };
- return STRtreeNode;
- }(AbstractNode));
- var SegmentPointComparator = function SegmentPointComparator () {};
- SegmentPointComparator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SegmentPointComparator.prototype.getClass = function getClass () {
- return SegmentPointComparator
- };
- SegmentPointComparator.relativeSign = function relativeSign (x0, x1) {
- if (x0 < x1) { return -1 }
- if (x0 > x1) { return 1 }
- return 0
- };
- SegmentPointComparator.compare = function compare (octant, p0, p1) {
- if (p0.equals2D(p1)) { return 0 }
- var xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);
- var ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);
- switch (octant) {
- case 0:
- return SegmentPointComparator.compareValue(xSign, ySign)
- case 1:
- return SegmentPointComparator.compareValue(ySign, xSign)
- case 2:
- return SegmentPointComparator.compareValue(ySign, -xSign)
- case 3:
- return SegmentPointComparator.compareValue(-xSign, ySign)
- case 4:
- return SegmentPointComparator.compareValue(-xSign, -ySign)
- case 5:
- return SegmentPointComparator.compareValue(-ySign, -xSign)
- case 6:
- return SegmentPointComparator.compareValue(-ySign, xSign)
- case 7:
- return SegmentPointComparator.compareValue(xSign, -ySign)
- default:
- }
- Assert.shouldNeverReachHere('invalid octant value');
- return 0
- };
- SegmentPointComparator.compareValue = function compareValue (compareSign0, compareSign1) {
- if (compareSign0 < 0) { return -1 }
- if (compareSign0 > 0) { return 1 }
- if (compareSign1 < 0) { return -1 }
- if (compareSign1 > 0) { return 1 }
- return 0
- };
- var SegmentNode = function SegmentNode () {
- this._segString = null;
- this.coord = null;
- this.segmentIndex = null;
- this._segmentOctant = null;
- this._isInterior = null;
- var segString = arguments[0];
- var coord = arguments[1];
- var segmentIndex = arguments[2];
- var segmentOctant = arguments[3];
- this._segString = segString;
- this.coord = new Coordinate(coord);
- this.segmentIndex = segmentIndex;
- this._segmentOctant = segmentOctant;
- this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));
- };
- SegmentNode.prototype.getCoordinate = function getCoordinate () {
- return this.coord
- };
- SegmentNode.prototype.print = function print (out) {
- out.print(this.coord);
- out.print(' seg # = ' + this.segmentIndex);
- };
- SegmentNode.prototype.compareTo = function compareTo (obj) {
- var other = obj;
- if (this.segmentIndex < other.segmentIndex) { return -1 }
- if (this.segmentIndex > other.segmentIndex) { return 1 }
- if (this.coord.equals2D(other.coord)) { return 0 }
- return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)
- };
- SegmentNode.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
- if (this.segmentIndex === 0 && !this._isInterior) { return true }
- if (this.segmentIndex === maxSegmentIndex) { return true }
- return false
- };
- SegmentNode.prototype.isInterior = function isInterior () {
- return this._isInterior
- };
- SegmentNode.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- SegmentNode.prototype.getClass = function getClass () {
- return SegmentNode
- };
- // import Iterator from '../../../../java/util/Iterator'
- var SegmentNodeList = function SegmentNodeList () {
- this._nodeMap = new TreeMap();
- this._edge = null;
- var edge = arguments[0];
- this._edge = edge;
- };
- SegmentNodeList.prototype.getSplitCoordinates = function getSplitCoordinates () {
- var this$1 = this;
- var coordList = new CoordinateList();
- this.addEndpoints();
- var it = this.iterator();
- var eiPrev = it.next();
- while (it.hasNext()) {
- var ei = it.next();
- this$1.addEdgeCoordinates(eiPrev, ei, coordList);
- eiPrev = ei;
- }
- return coordList.toCoordinateArray()
- };
- SegmentNodeList.prototype.addCollapsedNodes = function addCollapsedNodes () {
- var this$1 = this;
- var collapsedVertexIndexes = new ArrayList();
- this.findCollapsesFromInsertedNodes(collapsedVertexIndexes);
- this.findCollapsesFromExistingVertices(collapsedVertexIndexes);
- for (var it = collapsedVertexIndexes.iterator(); it.hasNext();) {
- var vertexIndex = it.next().intValue();
- this$1.add(this$1._edge.getCoordinate(vertexIndex), vertexIndex);
- }
- };
- SegmentNodeList.prototype.print = function print (out) {
- out.println('Intersections:');
- for (var it = this.iterator(); it.hasNext();) {
- var ei = it.next();
- ei.print(out);
- }
- };
- SegmentNodeList.prototype.findCollapsesFromExistingVertices = function findCollapsesFromExistingVertices (collapsedVertexIndexes) {
- var this$1 = this;
- for (var i = 0; i < this._edge.size() - 2; i++) {
- var p0 = this$1._edge.getCoordinate(i);
- // const p1 = this._edge.getCoordinate(i + 1)
- var p2 = this$1._edge.getCoordinate(i + 2);
- if (p0.equals2D(p2)) {
- collapsedVertexIndexes.add(new Integer(i + 1));
- }
- }
- };
- SegmentNodeList.prototype.addEdgeCoordinates = function addEdgeCoordinates (ei0, ei1, coordList) {
- var this$1 = this;
- // let npts = ei1.segmentIndex - ei0.segmentIndex + 2
- var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
- var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
- // if (!useIntPt1) {
- // npts--
- // }
- // const ipt = 0
- coordList.add(new Coordinate(ei0.coord), false);
- for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
- coordList.add(this$1._edge.getCoordinate(i));
- }
- if (useIntPt1) {
- coordList.add(new Coordinate(ei1.coord));
- }
- };
- SegmentNodeList.prototype.iterator = function iterator () {
- return this._nodeMap.values().iterator()
- };
- SegmentNodeList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
- var this$1 = this;
- this.addEndpoints();
- this.addCollapsedNodes();
- var it = this.iterator();
- var eiPrev = it.next();
- while (it.hasNext()) {
- var ei = it.next();
- var newEdge = this$1.createSplitEdge(eiPrev, ei);
- edgeList.add(newEdge);
- eiPrev = ei;
- }
- };
- SegmentNodeList.prototype.findCollapseIndex = function findCollapseIndex (ei0, ei1, collapsedVertexIndex) {
- if (!ei0.coord.equals2D(ei1.coord)) { return false }
- var numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;
- if (!ei1.isInterior()) {
- numVerticesBetween--;
- }
- if (numVerticesBetween === 1) {
- collapsedVertexIndex[0] = ei0.segmentIndex + 1;
- return true
- }
- return false
- };
- SegmentNodeList.prototype.findCollapsesFromInsertedNodes = function findCollapsesFromInsertedNodes (collapsedVertexIndexes) {
- var this$1 = this;
- var collapsedVertexIndex = new Array(1).fill(null);
- var it = this.iterator();
- var eiPrev = it.next();
- while (it.hasNext()) {
- var ei = it.next();
- var isCollapsed = this$1.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);
- if (isCollapsed) { collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0])); }
- eiPrev = ei;
- }
- };
- SegmentNodeList.prototype.getEdge = function getEdge () {
- return this._edge
- };
- SegmentNodeList.prototype.addEndpoints = function addEndpoints () {
- var maxSegIndex = this._edge.size() - 1;
- this.add(this._edge.getCoordinate(0), 0);
- this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);
- };
- SegmentNodeList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
- var this$1 = this;
- var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
- var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
- var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
- if (!useIntPt1) {
- npts--;
- }
- var pts = new Array(npts).fill(null);
- var ipt = 0;
- pts[ipt++] = new Coordinate(ei0.coord);
- for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
- pts[ipt++] = this$1._edge.getCoordinate(i);
- }
- if (useIntPt1) { pts[ipt] = new Coordinate(ei1.coord); }
- return new NodedSegmentString(pts, this._edge.getData())
- };
- SegmentNodeList.prototype.add = function add (intPt, segmentIndex) {
- var eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));
- var ei = this._nodeMap.get(eiNew);
- if (ei !== null) {
- Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates');
- return ei
- }
- this._nodeMap.put(eiNew, eiNew);
- return eiNew
- };
- SegmentNodeList.prototype.checkSplitEdgesCorrectness = function checkSplitEdgesCorrectness (splitEdges) {
- var edgePts = this._edge.getCoordinates();
- var split0 = splitEdges.get(0);
- var pt0 = split0.getCoordinate(0);
- if (!pt0.equals2D(edgePts[0])) { throw new RuntimeException('bad split edge start point at ' + pt0) }
- var splitn = splitEdges.get(splitEdges.size() - 1);
- var splitnPts = splitn.getCoordinates();
- var ptn = splitnPts[splitnPts.length - 1];
- if (!ptn.equals2D(edgePts[edgePts.length - 1])) { throw new RuntimeException('bad split edge end point at ' + ptn) }
- };
- SegmentNodeList.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SegmentNodeList.prototype.getClass = function getClass () {
- return SegmentNodeList
- };
- // class NodeVertexIterator {
- // constructor () {
- // this._nodeList = null
- // this._edge = null
- // this._nodeIt = null
- // this._currNode = null
- // this._nextNode = null
- // this._currSegIndex = 0
- // let nodeList = arguments[0]
- // this._nodeList = nodeList
- // this._edge = nodeList.getEdge()
- // this._nodeIt = nodeList.iterator()
- // this.readNextNode()
- // }
- // next () {
- // if (this._currNode === null) {
- // this._currNode = this._nextNode
- // this._currSegIndex = this._currNode.segmentIndex
- // this.readNextNode()
- // return this._currNode
- // }
- // if (this._nextNode === null) return null
- // if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {
- // this._currNode = this._nextNode
- // this._currSegIndex = this._currNode.segmentIndex
- // this.readNextNode()
- // return this._currNode
- // }
- // if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}
- // return null
- // }
- // remove () {
- // // throw new UnsupportedOperationException(this.getClass().getName())
- // }
- // hasNext () {
- // if (this._nextNode === null) return false
- // return true
- // }
- // readNextNode () {
- // if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null
- // }
- // interfaces_ () {
- // return [Iterator]
- // }
- // getClass () {
- // return NodeVertexIterator
- // }
- // }
- var Octant = function Octant () {};
- Octant.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Octant.prototype.getClass = function getClass () {
- return Octant
- };
- Octant.octant = function octant () {
- if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
- var dx = arguments[0];
- var dy = arguments[1];
- if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )') }
- var adx = Math.abs(dx);
- var ady = Math.abs(dy);
- if (dx >= 0) {
- if (dy >= 0) {
- if (adx >= ady) { return 0; } else { return 1 }
- } else {
- if (adx >= ady) { return 7; } else { return 6 }
- }
- } else {
- if (dy >= 0) {
- if (adx >= ady) { return 3; } else { return 2 }
- } else {
- if (adx >= ady) { return 4; } else { return 5 }
- }
- }
- } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- var dx$1 = p1.x - p0.x;
- var dy$1 = p1.y - p0.y;
- if (dx$1 === 0.0 && dy$1 === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0) }
- return Octant.octant(dx$1, dy$1)
- }
- };
- var SegmentString = function SegmentString () {};
- SegmentString.prototype.getCoordinates = function getCoordinates () {};
- SegmentString.prototype.size = function size () {};
- SegmentString.prototype.getCoordinate = function getCoordinate (i) {};
- SegmentString.prototype.isClosed = function isClosed () {};
- SegmentString.prototype.setData = function setData (data) {};
- SegmentString.prototype.getData = function getData () {};
- SegmentString.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SegmentString.prototype.getClass = function getClass () {
- return SegmentString
- };
- var NodableSegmentString = function NodableSegmentString () {};
- NodableSegmentString.prototype.addIntersection = function addIntersection (intPt, segmentIndex) {};
- NodableSegmentString.prototype.interfaces_ = function interfaces_ () {
- return [SegmentString]
- };
- NodableSegmentString.prototype.getClass = function getClass () {
- return NodableSegmentString
- };
- var NodedSegmentString = function NodedSegmentString () {
- this._nodeList = new SegmentNodeList(this);
- this._pts = null;
- this._data = null;
- var pts = arguments[0];
- var data = arguments[1];
- this._pts = pts;
- this._data = data;
- };
- NodedSegmentString.prototype.getCoordinates = function getCoordinates () {
- return this._pts
- };
- NodedSegmentString.prototype.size = function size () {
- return this._pts.length
- };
- NodedSegmentString.prototype.getCoordinate = function getCoordinate (i) {
- return this._pts[i]
- };
- NodedSegmentString.prototype.isClosed = function isClosed () {
- return this._pts[0].equals(this._pts[this._pts.length - 1])
- };
- NodedSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
- if (index === this._pts.length - 1) { return -1 }
- return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))
- };
- NodedSegmentString.prototype.setData = function setData (data) {
- this._data = data;
- };
- NodedSegmentString.prototype.safeOctant = function safeOctant (p0, p1) {
- if (p0.equals2D(p1)) { return 0 }
- return Octant.octant(p0, p1)
- };
- NodedSegmentString.prototype.getData = function getData () {
- return this._data
- };
- NodedSegmentString.prototype.addIntersection = function addIntersection () {
- if (arguments.length === 2) {
- var intPt$1 = arguments[0];
- var segmentIndex = arguments[1];
- this.addIntersectionNode(intPt$1, segmentIndex);
- } else if (arguments.length === 4) {
- var li = arguments[0];
- var segmentIndex$1 = arguments[1];
- // const geomIndex = arguments[2]
- var intIndex = arguments[3];
- var intPt = new Coordinate(li.getIntersection(intIndex));
- this.addIntersection(intPt, segmentIndex$1);
- }
- };
- NodedSegmentString.prototype.toString = function toString () {
- return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
- };
- NodedSegmentString.prototype.getNodeList = function getNodeList () {
- return this._nodeList
- };
- NodedSegmentString.prototype.addIntersectionNode = function addIntersectionNode (intPt, segmentIndex) {
- var normalizedSegmentIndex = segmentIndex;
- var nextSegIndex = normalizedSegmentIndex + 1;
- if (nextSegIndex < this._pts.length) {
- var nextPt = this._pts[nextSegIndex];
- if (intPt.equals2D(nextPt)) {
- normalizedSegmentIndex = nextSegIndex;
- }
- }
- var ei = this._nodeList.add(intPt, normalizedSegmentIndex);
- return ei
- };
- NodedSegmentString.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
- var this$1 = this;
- for (var i = 0; i < li.getIntersectionNum(); i++) {
- this$1.addIntersection(li, segmentIndex, geomIndex, i);
- }
- };
- NodedSegmentString.prototype.interfaces_ = function interfaces_ () {
- return [NodableSegmentString]
- };
- NodedSegmentString.prototype.getClass = function getClass () {
- return NodedSegmentString
- };
- NodedSegmentString.getNodedSubstrings = function getNodedSubstrings () {
- if (arguments.length === 1) {
- var segStrings = arguments[0];
- var resultEdgelist = new ArrayList();
- NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);
- return resultEdgelist
- } else if (arguments.length === 2) {
- var segStrings$1 = arguments[0];
- var resultEdgelist$1 = arguments[1];
- for (var i = segStrings$1.iterator(); i.hasNext();) {
- var ss = i.next();
- ss.getNodeList().addSplitEdges(resultEdgelist$1);
- }
- }
- };
- var LineSegment = function LineSegment () {
- this.p0 = null;
- this.p1 = null;
- if (arguments.length === 0) {
- this.p0 = new Coordinate();
- this.p1 = new Coordinate();
- } else if (arguments.length === 1) {
- var ls = arguments[0];
- this.p0 = new Coordinate(ls.p0);
- this.p1 = new Coordinate(ls.p1);
- } else if (arguments.length === 2) {
- this.p0 = arguments[0];
- this.p1 = arguments[1];
- } else if (arguments.length === 4) {
- var x0 = arguments[0];
- var y0 = arguments[1];
- var x1 = arguments[2];
- var y1 = arguments[3];
- this.p0 = new Coordinate(x0, y0);
- this.p1 = new Coordinate(x1, y1);
- }
- };
- var staticAccessors$24 = { serialVersionUID: { configurable: true } };
- LineSegment.prototype.minX = function minX () {
- return Math.min(this.p0.x, this.p1.x)
- };
- LineSegment.prototype.orientationIndex = function orientationIndex () {
- if (arguments[0] instanceof LineSegment) {
- var seg = arguments[0];
- var orient0 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p0);
- var orient1 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p1);
- if (orient0 >= 0 && orient1 >= 0) { return Math.max(orient0, orient1) }
- if (orient0 <= 0 && orient1 <= 0) { return Math.max(orient0, orient1) }
- return 0
- } else if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- return CGAlgorithms.orientationIndex(this.p0, this.p1, p)
- }
- };
- LineSegment.prototype.toGeometry = function toGeometry (geomFactory) {
- return geomFactory.createLineString([this.p0, this.p1])
- };
- LineSegment.prototype.isVertical = function isVertical () {
- return this.p0.x === this.p1.x
- };
- LineSegment.prototype.equals = function equals (o) {
- if (!(o instanceof LineSegment)) {
- return false
- }
- var other = o;
- return this.p0.equals(other.p0) && this.p1.equals(other.p1)
- };
- LineSegment.prototype.intersection = function intersection (line) {
- var li = new RobustLineIntersector();
- li.computeIntersection(this.p0, this.p1, line.p0, line.p1);
- if (li.hasIntersection()) { return li.getIntersection(0) }
- return null
- };
- LineSegment.prototype.project = function project () {
- if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- if (p.equals(this.p0) || p.equals(this.p1)) { return new Coordinate(p) }
- var r = this.projectionFactor(p);
- var coord = new Coordinate();
- coord.x = this.p0.x + r * (this.p1.x - this.p0.x);
- coord.y = this.p0.y + r * (this.p1.y - this.p0.y);
- return coord
- } else if (arguments[0] instanceof LineSegment) {
- var seg = arguments[0];
- var pf0 = this.projectionFactor(seg.p0);
- var pf1 = this.projectionFactor(seg.p1);
- if (pf0 >= 1.0 && pf1 >= 1.0) { return null }
- if (pf0 <= 0.0 && pf1 <= 0.0) { return null }
- var newp0 = this.project(seg.p0);
- if (pf0 < 0.0) { newp0 = this.p0; }
- if (pf0 > 1.0) { newp0 = this.p1; }
- var newp1 = this.project(seg.p1);
- if (pf1 < 0.0) { newp1 = this.p0; }
- if (pf1 > 1.0) { newp1 = this.p1; }
- return new LineSegment(newp0, newp1)
- }
- };
- LineSegment.prototype.normalize = function normalize () {
- if (this.p1.compareTo(this.p0) < 0) { this.reverse(); }
- };
- LineSegment.prototype.angle = function angle () {
- return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)
- };
- LineSegment.prototype.getCoordinate = function getCoordinate (i) {
- if (i === 0) { return this.p0 }
- return this.p1
- };
- LineSegment.prototype.distancePerpendicular = function distancePerpendicular (p) {
- return CGAlgorithms.distancePointLinePerpendicular(p, this.p0, this.p1)
- };
- LineSegment.prototype.minY = function minY () {
- return Math.min(this.p0.y, this.p1.y)
- };
- LineSegment.prototype.midPoint = function midPoint () {
- return LineSegment.midPoint(this.p0, this.p1)
- };
- LineSegment.prototype.projectionFactor = function projectionFactor (p) {
- if (p.equals(this.p0)) { return 0.0 }
- if (p.equals(this.p1)) { return 1.0 }
- var dx = this.p1.x - this.p0.x;
- var dy = this.p1.y - this.p0.y;
- var len = dx * dx + dy * dy;
- if (len <= 0.0) { return Double.NaN }
- var r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len;
- return r
- };
- LineSegment.prototype.closestPoints = function closestPoints (line) {
- var intPt = this.intersection(line);
- if (intPt !== null) {
- return [intPt, intPt]
- }
- var closestPt = new Array(2).fill(null);
- var minDistance = Double.MAX_VALUE;
- var dist = null;
- var close00 = this.closestPoint(line.p0);
- minDistance = close00.distance(line.p0);
- closestPt[0] = close00;
- closestPt[1] = line.p0;
- var close01 = this.closestPoint(line.p1);
- dist = close01.distance(line.p1);
- if (dist < minDistance) {
- minDistance = dist;
- closestPt[0] = close01;
- closestPt[1] = line.p1;
- }
- var close10 = line.closestPoint(this.p0);
- dist = close10.distance(this.p0);
- if (dist < minDistance) {
- minDistance = dist;
- closestPt[0] = this.p0;
- closestPt[1] = close10;
- }
- var close11 = line.closestPoint(this.p1);
- dist = close11.distance(this.p1);
- if (dist < minDistance) {
- minDistance = dist;
- closestPt[0] = this.p1;
- closestPt[1] = close11;
- }
- return closestPt
- };
- LineSegment.prototype.closestPoint = function closestPoint (p) {
- var factor = this.projectionFactor(p);
- if (factor > 0 && factor < 1) {
- return this.project(p)
- }
- var dist0 = this.p0.distance(p);
- var dist1 = this.p1.distance(p);
- if (dist0 < dist1) { return this.p0 }
- return this.p1
- };
- LineSegment.prototype.maxX = function maxX () {
- return Math.max(this.p0.x, this.p1.x)
- };
- LineSegment.prototype.getLength = function getLength () {
- return this.p0.distance(this.p1)
- };
- LineSegment.prototype.compareTo = function compareTo (o) {
- var other = o;
- var comp0 = this.p0.compareTo(other.p0);
- if (comp0 !== 0) { return comp0 }
- return this.p1.compareTo(other.p1)
- };
- LineSegment.prototype.reverse = function reverse () {
- var temp = this.p0;
- this.p0 = this.p1;
- this.p1 = temp;
- };
- LineSegment.prototype.equalsTopo = function equalsTopo (other) {
- return this.p0.equals(other.p0) &&
- (this.p1.equals(other.p1) || this.p0.equals(other.p1)) &&
- this.p1.equals(other.p0)
- };
- LineSegment.prototype.lineIntersection = function lineIntersection (line) {
- try {
- var intPt = HCoordinate.intersection(this.p0, this.p1, line.p0, line.p1);
- return intPt
- } catch (ex) {
- if (ex instanceof NotRepresentableException) {} else { throw ex }
- } finally {}
- return null
- };
- LineSegment.prototype.maxY = function maxY () {
- return Math.max(this.p0.y, this.p1.y)
- };
- LineSegment.prototype.pointAlongOffset = function pointAlongOffset (segmentLengthFraction, offsetDistance) {
- var segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
- var segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
- var dx = this.p1.x - this.p0.x;
- var dy = this.p1.y - this.p0.y;
- var len = Math.sqrt(dx * dx + dy * dy);
- var ux = 0.0;
- var uy = 0.0;
- if (offsetDistance !== 0.0) {
- if (len <= 0.0) { throw new Error('Cannot compute offset from zero-length line segment') }
- ux = offsetDistance * dx / len;
- uy = offsetDistance * dy / len;
- }
- var offsetx = segx - uy;
- var offsety = segy + ux;
- var coord = new Coordinate(offsetx, offsety);
- return coord
- };
- LineSegment.prototype.setCoordinates = function setCoordinates () {
- if (arguments.length === 1) {
- var ls = arguments[0];
- this.setCoordinates(ls.p0, ls.p1);
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- this.p0.x = p0.x;
- this.p0.y = p0.y;
- this.p1.x = p1.x;
- this.p1.y = p1.y;
- }
- };
- LineSegment.prototype.segmentFraction = function segmentFraction (inputPt) {
- var segFrac = this.projectionFactor(inputPt);
- if (segFrac < 0.0) { segFrac = 0.0; } else if (segFrac > 1.0 || Double.isNaN(segFrac)) { segFrac = 1.0; }
- return segFrac
- };
- LineSegment.prototype.toString = function toString () {
- return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'
- };
- LineSegment.prototype.isHorizontal = function isHorizontal () {
- return this.p0.y === this.p1.y
- };
- LineSegment.prototype.distance = function distance () {
- if (arguments[0] instanceof LineSegment) {
- var ls = arguments[0];
- return CGAlgorithms.distanceLineLine(this.p0, this.p1, ls.p0, ls.p1)
- } else if (arguments[0] instanceof Coordinate) {
- var p = arguments[0];
- return CGAlgorithms.distancePointLine(p, this.p0, this.p1)
- }
- };
- LineSegment.prototype.pointAlong = function pointAlong (segmentLengthFraction) {
- var coord = new Coordinate();
- coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
- coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
- return coord
- };
- LineSegment.prototype.hashCode = function hashCode () {
- var bits0 = Double.doubleToLongBits(this.p0.x);
- bits0 ^= Double.doubleToLongBits(this.p0.y) * 31;
- var hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32);
- var bits1 = Double.doubleToLongBits(this.p1.x);
- bits1 ^= Double.doubleToLongBits(this.p1.y) * 31;
- var hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32);
- return hash0 ^ hash1
- };
- LineSegment.prototype.interfaces_ = function interfaces_ () {
- return [Comparable, Serializable]
- };
- LineSegment.prototype.getClass = function getClass () {
- return LineSegment
- };
- LineSegment.midPoint = function midPoint (p0, p1) {
- return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)
- };
- staticAccessors$24.serialVersionUID.get = function () { return 3252005833466256227 };
- Object.defineProperties( LineSegment, staticAccessors$24 );
- var MonotoneChainOverlapAction = function MonotoneChainOverlapAction () {
- this.tempEnv1 = new Envelope();
- this.tempEnv2 = new Envelope();
- this._overlapSeg1 = new LineSegment();
- this._overlapSeg2 = new LineSegment();
- };
- MonotoneChainOverlapAction.prototype.overlap = function overlap () {
- if (arguments.length === 2) {
- // const seg1 = arguments[0]
- // const seg2 = arguments[1]
- } else if (arguments.length === 4) {
- var mc1 = arguments[0];
- var start1 = arguments[1];
- var mc2 = arguments[2];
- var start2 = arguments[3];
- mc1.getLineSegment(start1, this._overlapSeg1);
- mc2.getLineSegment(start2, this._overlapSeg2);
- this.overlap(this._overlapSeg1, this._overlapSeg2);
- }
- };
- MonotoneChainOverlapAction.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChainOverlapAction.prototype.getClass = function getClass () {
- return MonotoneChainOverlapAction
- };
- var MonotoneChain = function MonotoneChain () {
- this._pts = null;
- this._start = null;
- this._end = null;
- this._env = null;
- this._context = null;
- this._id = null;
- var pts = arguments[0];
- var start = arguments[1];
- var end = arguments[2];
- var context = arguments[3];
- this._pts = pts;
- this._start = start;
- this._end = end;
- this._context = context;
- };
- MonotoneChain.prototype.getLineSegment = function getLineSegment (index, ls) {
- ls.p0 = this._pts[index];
- ls.p1 = this._pts[index + 1];
- };
- MonotoneChain.prototype.computeSelect = function computeSelect (searchEnv, start0, end0, mcs) {
- var p0 = this._pts[start0];
- var p1 = this._pts[end0];
- mcs.tempEnv1.init(p0, p1);
- if (end0 - start0 === 1) {
- mcs.select(this, start0);
- return null
- }
- if (!searchEnv.intersects(mcs.tempEnv1)) { return null }
- var mid = Math.trunc((start0 + end0) / 2);
- if (start0 < mid) {
- this.computeSelect(searchEnv, start0, mid, mcs);
- }
- if (mid < end0) {
- this.computeSelect(searchEnv, mid, end0, mcs);
- }
- };
- MonotoneChain.prototype.getCoordinates = function getCoordinates () {
- var this$1 = this;
- var coord = new Array(this._end - this._start + 1).fill(null);
- var index = 0;
- for (var i = this._start; i <= this._end; i++) {
- coord[index++] = this$1._pts[i];
- }
- return coord
- };
- MonotoneChain.prototype.computeOverlaps = function computeOverlaps (mc, mco) {
- this.computeOverlapsInternal(this._start, this._end, mc, mc._start, mc._end, mco);
- };
- MonotoneChain.prototype.setId = function setId (id) {
- this._id = id;
- };
- MonotoneChain.prototype.select = function select (searchEnv, mcs) {
- this.computeSelect(searchEnv, this._start, this._end, mcs);
- };
- MonotoneChain.prototype.getEnvelope = function getEnvelope () {
- if (this._env === null) {
- var p0 = this._pts[this._start];
- var p1 = this._pts[this._end];
- this._env = new Envelope(p0, p1);
- }
- return this._env
- };
- MonotoneChain.prototype.getEndIndex = function getEndIndex () {
- return this._end
- };
- MonotoneChain.prototype.getStartIndex = function getStartIndex () {
- return this._start
- };
- MonotoneChain.prototype.getContext = function getContext () {
- return this._context
- };
- MonotoneChain.prototype.getId = function getId () {
- return this._id
- };
- MonotoneChain.prototype.computeOverlapsInternal = function computeOverlapsInternal (start0, end0, mc, start1, end1, mco) {
- var p00 = this._pts[start0];
- var p01 = this._pts[end0];
- var p10 = mc._pts[start1];
- var p11 = mc._pts[end1];
- if (end0 - start0 === 1 && end1 - start1 === 1) {
- mco.overlap(this, start0, mc, start1);
- return null
- }
- mco.tempEnv1.init(p00, p01);
- mco.tempEnv2.init(p10, p11);
- if (!mco.tempEnv1.intersects(mco.tempEnv2)) { return null }
- var mid0 = Math.trunc((start0 + end0) / 2);
- var mid1 = Math.trunc((start1 + end1) / 2);
- if (start0 < mid0) {
- if (start1 < mid1) { this.computeOverlapsInternal(start0, mid0, mc, start1, mid1, mco); }
- if (mid1 < end1) { this.computeOverlapsInternal(start0, mid0, mc, mid1, end1, mco); }
- }
- if (mid0 < end0) {
- if (start1 < mid1) { this.computeOverlapsInternal(mid0, end0, mc, start1, mid1, mco); }
- if (mid1 < end1) { this.computeOverlapsInternal(mid0, end0, mc, mid1, end1, mco); }
- }
- };
- MonotoneChain.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChain.prototype.getClass = function getClass () {
- return MonotoneChain
- };
- var MonotoneChainBuilder = function MonotoneChainBuilder () {};
- MonotoneChainBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChainBuilder.prototype.getClass = function getClass () {
- return MonotoneChainBuilder
- };
- MonotoneChainBuilder.getChainStartIndices = function getChainStartIndices (pts) {
- var start = 0;
- var startIndexList = new ArrayList();
- startIndexList.add(new Integer(start));
- do {
- var last = MonotoneChainBuilder.findChainEnd(pts, start);
- startIndexList.add(new Integer(last));
- start = last;
- } while (start < pts.length - 1)
- var startIndex = MonotoneChainBuilder.toIntArray(startIndexList);
- return startIndex
- };
- MonotoneChainBuilder.findChainEnd = function findChainEnd (pts, start) {
- var safeStart = start;
- while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {
- safeStart++;
- }
- if (safeStart >= pts.length - 1) {
- return pts.length - 1
- }
- var chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);
- var last = start + 1;
- while (last < pts.length) {
- if (!pts[last - 1].equals2D(pts[last])) {
- var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
- if (quad !== chainQuad) { break }
- }
- last++;
- }
- return last - 1
- };
- MonotoneChainBuilder.getChains = function getChains () {
- if (arguments.length === 1) {
- var pts = arguments[0];
- return MonotoneChainBuilder.getChains(pts, null)
- } else if (arguments.length === 2) {
- var pts$1 = arguments[0];
- var context = arguments[1];
- var mcList = new ArrayList();
- var startIndex = MonotoneChainBuilder.getChainStartIndices(pts$1);
- for (var i = 0; i < startIndex.length - 1; i++) {
- var mc = new MonotoneChain(pts$1, startIndex[i], startIndex[i + 1], context);
- mcList.add(mc);
- }
- return mcList
- }
- };
- MonotoneChainBuilder.toIntArray = function toIntArray (list) {
- var array = new Array(list.size()).fill(null);
- for (var i = 0; i < array.length; i++) {
- array[i] = list.get(i).intValue();
- }
- return array
- };
- var Noder = function Noder () {};
- Noder.prototype.computeNodes = function computeNodes (segStrings) {};
- Noder.prototype.getNodedSubstrings = function getNodedSubstrings () {};
- Noder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Noder.prototype.getClass = function getClass () {
- return Noder
- };
- var SinglePassNoder = function SinglePassNoder () {
- this._segInt = null;
- if (arguments.length === 0) {} else if (arguments.length === 1) {
- var segInt = arguments[0];
- this.setSegmentIntersector(segInt);
- }
- };
- SinglePassNoder.prototype.setSegmentIntersector = function setSegmentIntersector (segInt) {
- this._segInt = segInt;
- };
- SinglePassNoder.prototype.interfaces_ = function interfaces_ () {
- return [Noder]
- };
- SinglePassNoder.prototype.getClass = function getClass () {
- return SinglePassNoder
- };
- var MCIndexNoder = (function (SinglePassNoder$$1) {
- function MCIndexNoder (si) {
- if (si) { SinglePassNoder$$1.call(this, si); }
- else { SinglePassNoder$$1.call(this); }
- this._monoChains = new ArrayList();
- this._index = new STRtree();
- this._idCounter = 0;
- this._nodedSegStrings = null;
- this._nOverlaps = 0;
- }
- if ( SinglePassNoder$$1 ) MCIndexNoder.__proto__ = SinglePassNoder$$1;
- MCIndexNoder.prototype = Object.create( SinglePassNoder$$1 && SinglePassNoder$$1.prototype );
- MCIndexNoder.prototype.constructor = MCIndexNoder;
- var staticAccessors = { SegmentOverlapAction: { configurable: true } };
- MCIndexNoder.prototype.getMonotoneChains = function getMonotoneChains () {
- return this._monoChains
- };
- MCIndexNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
- return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
- };
- MCIndexNoder.prototype.getIndex = function getIndex () {
- return this._index
- };
- MCIndexNoder.prototype.add = function add (segStr) {
- var this$1 = this;
- var segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);
- for (var i = segChains.iterator(); i.hasNext();) {
- var mc = i.next();
- mc.setId(this$1._idCounter++);
- this$1._index.insert(mc.getEnvelope(), mc);
- this$1._monoChains.add(mc);
- }
- };
- MCIndexNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
- var this$1 = this;
- this._nodedSegStrings = inputSegStrings;
- for (var i = inputSegStrings.iterator(); i.hasNext();) {
- this$1.add(i.next());
- }
- this.intersectChains();
- };
- MCIndexNoder.prototype.intersectChains = function intersectChains () {
- var this$1 = this;
- var overlapAction = new SegmentOverlapAction(this._segInt);
- for (var i = this._monoChains.iterator(); i.hasNext();) {
- var queryChain = i.next();
- var overlapChains = this$1._index.query(queryChain.getEnvelope());
- for (var j = overlapChains.iterator(); j.hasNext();) {
- var testChain = j.next();
- if (testChain.getId() > queryChain.getId()) {
- queryChain.computeOverlaps(testChain, overlapAction);
- this$1._nOverlaps++;
- }
- if (this$1._segInt.isDone()) { return null }
- }
- }
- };
- MCIndexNoder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MCIndexNoder.prototype.getClass = function getClass () {
- return MCIndexNoder
- };
- staticAccessors.SegmentOverlapAction.get = function () { return SegmentOverlapAction };
- Object.defineProperties( MCIndexNoder, staticAccessors );
- return MCIndexNoder;
- }(SinglePassNoder));
- var SegmentOverlapAction = (function (MonotoneChainOverlapAction$$1) {
- function SegmentOverlapAction () {
- MonotoneChainOverlapAction$$1.call(this);
- this._si = null;
- var si = arguments[0];
- this._si = si;
- }
- if ( MonotoneChainOverlapAction$$1 ) SegmentOverlapAction.__proto__ = MonotoneChainOverlapAction$$1;
- SegmentOverlapAction.prototype = Object.create( MonotoneChainOverlapAction$$1 && MonotoneChainOverlapAction$$1.prototype );
- SegmentOverlapAction.prototype.constructor = SegmentOverlapAction;
- SegmentOverlapAction.prototype.overlap = function overlap () {
- if (arguments.length === 4) {
- var mc1 = arguments[0];
- var start1 = arguments[1];
- var mc2 = arguments[2];
- var start2 = arguments[3];
- var ss1 = mc1.getContext();
- var ss2 = mc2.getContext();
- this._si.processIntersections(ss1, start1, ss2, start2);
- } else { return MonotoneChainOverlapAction$$1.prototype.overlap.apply(this, arguments) }
- };
- SegmentOverlapAction.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SegmentOverlapAction.prototype.getClass = function getClass () {
- return SegmentOverlapAction
- };
- return SegmentOverlapAction;
- }(MonotoneChainOverlapAction));
- var BufferParameters = function BufferParameters () {
- this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
- this._endCapStyle = BufferParameters.CAP_ROUND;
- this._joinStyle = BufferParameters.JOIN_ROUND;
- this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;
- this._isSingleSided = false;
- this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;
- if (arguments.length === 0) {} else if (arguments.length === 1) {
- var quadrantSegments = arguments[0];
- this.setQuadrantSegments(quadrantSegments);
- } else if (arguments.length === 2) {
- var quadrantSegments$1 = arguments[0];
- var endCapStyle = arguments[1];
- this.setQuadrantSegments(quadrantSegments$1);
- this.setEndCapStyle(endCapStyle);
- } else if (arguments.length === 4) {
- var quadrantSegments$2 = arguments[0];
- var endCapStyle$1 = arguments[1];
- var joinStyle = arguments[2];
- var mitreLimit = arguments[3];
- this.setQuadrantSegments(quadrantSegments$2);
- this.setEndCapStyle(endCapStyle$1);
- this.setJoinStyle(joinStyle);
- this.setMitreLimit(mitreLimit);
- }
- };
- var staticAccessors$25 = { CAP_ROUND: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },JOIN_ROUND: { configurable: true },JOIN_MITRE: { configurable: true },JOIN_BEVEL: { configurable: true },DEFAULT_QUADRANT_SEGMENTS: { configurable: true },DEFAULT_MITRE_LIMIT: { configurable: true },DEFAULT_SIMPLIFY_FACTOR: { configurable: true } };
- BufferParameters.prototype.getEndCapStyle = function getEndCapStyle () {
- return this._endCapStyle
- };
- BufferParameters.prototype.isSingleSided = function isSingleSided () {
- return this._isSingleSided
- };
- BufferParameters.prototype.setQuadrantSegments = function setQuadrantSegments (quadSegs) {
- this._quadrantSegments = quadSegs;
- if (this._quadrantSegments === 0) { this._joinStyle = BufferParameters.JOIN_BEVEL; }
- if (this._quadrantSegments < 0) {
- this._joinStyle = BufferParameters.JOIN_MITRE;
- this._mitreLimit = Math.abs(this._quadrantSegments);
- }
- if (quadSegs <= 0) {
- this._quadrantSegments = 1;
- }
- if (this._joinStyle !== BufferParameters.JOIN_ROUND) {
- this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
- }
- };
- BufferParameters.prototype.getJoinStyle = function getJoinStyle () {
- return this._joinStyle
- };
- BufferParameters.prototype.setJoinStyle = function setJoinStyle (joinStyle) {
- this._joinStyle = joinStyle;
- };
- BufferParameters.prototype.setSimplifyFactor = function setSimplifyFactor (simplifyFactor) {
- this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;
- };
- BufferParameters.prototype.getSimplifyFactor = function getSimplifyFactor () {
- return this._simplifyFactor
- };
- BufferParameters.prototype.getQuadrantSegments = function getQuadrantSegments () {
- return this._quadrantSegments
- };
- BufferParameters.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
- this._endCapStyle = endCapStyle;
- };
- BufferParameters.prototype.getMitreLimit = function getMitreLimit () {
- return this._mitreLimit
- };
- BufferParameters.prototype.setMitreLimit = function setMitreLimit (mitreLimit) {
- this._mitreLimit = mitreLimit;
- };
- BufferParameters.prototype.setSingleSided = function setSingleSided (isSingleSided) {
- this._isSingleSided = isSingleSided;
- };
- BufferParameters.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferParameters.prototype.getClass = function getClass () {
- return BufferParameters
- };
- BufferParameters.bufferDistanceError = function bufferDistanceError (quadSegs) {
- var alpha = Math.PI / 2.0 / quadSegs;
- return 1 - Math.cos(alpha / 2.0)
- };
- staticAccessors$25.CAP_ROUND.get = function () { return 1 };
- staticAccessors$25.CAP_FLAT.get = function () { return 2 };
- staticAccessors$25.CAP_SQUARE.get = function () { return 3 };
- staticAccessors$25.JOIN_ROUND.get = function () { return 1 };
- staticAccessors$25.JOIN_MITRE.get = function () { return 2 };
- staticAccessors$25.JOIN_BEVEL.get = function () { return 3 };
- staticAccessors$25.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 };
- staticAccessors$25.DEFAULT_MITRE_LIMIT.get = function () { return 5.0 };
- staticAccessors$25.DEFAULT_SIMPLIFY_FACTOR.get = function () { return 0.01 };
- Object.defineProperties( BufferParameters, staticAccessors$25 );
- var BufferInputLineSimplifier = function BufferInputLineSimplifier (inputLine) {
- this._distanceTol = null;
- this._isDeleted = null;
- this._angleOrientation = CGAlgorithms.COUNTERCLOCKWISE;
- this._inputLine = inputLine || null;
- };
- var staticAccessors$26 = { INIT: { configurable: true },DELETE: { configurable: true },KEEP: { configurable: true },NUM_PTS_TO_CHECK: { configurable: true } };
- BufferInputLineSimplifier.prototype.isDeletable = function isDeletable (i0, i1, i2, distanceTol) {
- var p0 = this._inputLine[i0];
- var p1 = this._inputLine[i1];
- var p2 = this._inputLine[i2];
- if (!this.isConcave(p0, p1, p2)) { return false }
- if (!this.isShallow(p0, p1, p2, distanceTol)) { return false }
- return this.isShallowSampled(p0, p1, i0, i2, distanceTol)
- };
- BufferInputLineSimplifier.prototype.deleteShallowConcavities = function deleteShallowConcavities () {
- var this$1 = this;
- var index = 1;
- // const maxIndex = this._inputLine.length - 1
- var midIndex = this.findNextNonDeletedIndex(index);
- var lastIndex = this.findNextNonDeletedIndex(midIndex);
- var isChanged = false;
- while (lastIndex < this._inputLine.length) {
- var isMiddleVertexDeleted = false;
- if (this$1.isDeletable(index, midIndex, lastIndex, this$1._distanceTol)) {
- this$1._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;
- isMiddleVertexDeleted = true;
- isChanged = true;
- }
- if (isMiddleVertexDeleted) { index = lastIndex; } else { index = midIndex; }
- midIndex = this$1.findNextNonDeletedIndex(index);
- lastIndex = this$1.findNextNonDeletedIndex(midIndex);
- }
- return isChanged
- };
- BufferInputLineSimplifier.prototype.isShallowConcavity = function isShallowConcavity (p0, p1, p2, distanceTol) {
- var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
- var isAngleToSimplify = orientation === this._angleOrientation;
- if (!isAngleToSimplify) { return false }
- var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
- return dist < distanceTol
- };
- BufferInputLineSimplifier.prototype.isShallowSampled = function isShallowSampled (p0, p2, i0, i2, distanceTol) {
- var this$1 = this;
- var inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);
- if (inc <= 0) { inc = 1; }
- for (var i = i0; i < i2; i += inc) {
- if (!this$1.isShallow(p0, p2, this$1._inputLine[i], distanceTol)) { return false }
- }
- return true
- };
- BufferInputLineSimplifier.prototype.isConcave = function isConcave (p0, p1, p2) {
- var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
- var isConcave = orientation === this._angleOrientation;
- return isConcave
- };
- BufferInputLineSimplifier.prototype.simplify = function simplify (distanceTol) {
- var this$1 = this;
- this._distanceTol = Math.abs(distanceTol);
- if (distanceTol < 0) { this._angleOrientation = CGAlgorithms.CLOCKWISE; }
- this._isDeleted = new Array(this._inputLine.length).fill(null);
- var isChanged = false;
- do {
- isChanged = this$1.deleteShallowConcavities();
- } while (isChanged)
- return this.collapseLine()
- };
- BufferInputLineSimplifier.prototype.findNextNonDeletedIndex = function findNextNonDeletedIndex (index) {
- var next = index + 1;
- while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) { next++; }
- return next
- };
- BufferInputLineSimplifier.prototype.isShallow = function isShallow (p0, p1, p2, distanceTol) {
- var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
- return dist < distanceTol
- };
- BufferInputLineSimplifier.prototype.collapseLine = function collapseLine () {
- var this$1 = this;
- var coordList = new CoordinateList();
- for (var i = 0; i < this._inputLine.length; i++) {
- if (this$1._isDeleted[i] !== BufferInputLineSimplifier.DELETE) { coordList.add(this$1._inputLine[i]); }
- }
- return coordList.toCoordinateArray()
- };
- BufferInputLineSimplifier.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferInputLineSimplifier.prototype.getClass = function getClass () {
- return BufferInputLineSimplifier
- };
- BufferInputLineSimplifier.simplify = function simplify (inputLine, distanceTol) {
- var simp = new BufferInputLineSimplifier(inputLine);
- return simp.simplify(distanceTol)
- };
- staticAccessors$26.INIT.get = function () { return 0 };
- staticAccessors$26.DELETE.get = function () { return 1 };
- staticAccessors$26.KEEP.get = function () { return 1 };
- staticAccessors$26.NUM_PTS_TO_CHECK.get = function () { return 10 };
- Object.defineProperties( BufferInputLineSimplifier, staticAccessors$26 );
- var OffsetSegmentString = function OffsetSegmentString () {
- this._ptList = null;
- this._precisionModel = null;
- this._minimimVertexDistance = 0.0;
- this._ptList = new ArrayList();
- };
- var staticAccessors$28 = { COORDINATE_ARRAY_TYPE: { configurable: true } };
- OffsetSegmentString.prototype.getCoordinates = function getCoordinates () {
- var coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);
- return coord
- };
- OffsetSegmentString.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
- this._precisionModel = precisionModel;
- };
- OffsetSegmentString.prototype.addPt = function addPt (pt) {
- var bufPt = new Coordinate(pt);
- this._precisionModel.makePrecise(bufPt);
- if (this.isRedundant(bufPt)) { return null }
- this._ptList.add(bufPt);
- };
- OffsetSegmentString.prototype.revere = function revere () {};
- OffsetSegmentString.prototype.addPts = function addPts (pt, isForward) {
- var this$1 = this;
- if (isForward) {
- for (var i = 0; i < pt.length; i++) {
- this$1.addPt(pt[i]);
- }
- } else {
- for (var i$1 = pt.length - 1; i$1 >= 0; i$1--) {
- this$1.addPt(pt[i$1]);
- }
- }
- };
- OffsetSegmentString.prototype.isRedundant = function isRedundant (pt) {
- if (this._ptList.size() < 1) { return false }
- var lastPt = this._ptList.get(this._ptList.size() - 1);
- var ptDist = pt.distance(lastPt);
- if (ptDist < this._minimimVertexDistance) { return true }
- return false
- };
- OffsetSegmentString.prototype.toString = function toString () {
- var fact = new GeometryFactory();
- var line = fact.createLineString(this.getCoordinates());
- return line.toString()
- };
- OffsetSegmentString.prototype.closeRing = function closeRing () {
- if (this._ptList.size() < 1) { return null }
- var startPt = new Coordinate(this._ptList.get(0));
- var lastPt = this._ptList.get(this._ptList.size() - 1);
- // const last2Pt = null
- // if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)
- if (startPt.equals(lastPt)) { return null }
- this._ptList.add(startPt);
- };
- OffsetSegmentString.prototype.setMinimumVertexDistance = function setMinimumVertexDistance (minimimVertexDistance) {
- this._minimimVertexDistance = minimimVertexDistance;
- };
- OffsetSegmentString.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OffsetSegmentString.prototype.getClass = function getClass () {
- return OffsetSegmentString
- };
- staticAccessors$28.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) };
- Object.defineProperties( OffsetSegmentString, staticAccessors$28 );
- var Angle = function Angle () {};
- var staticAccessors$29 = { PI_TIMES_2: { configurable: true },PI_OVER_2: { configurable: true },PI_OVER_4: { configurable: true },COUNTERCLOCKWISE: { configurable: true },CLOCKWISE: { configurable: true },NONE: { configurable: true } };
- Angle.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Angle.prototype.getClass = function getClass () {
- return Angle
- };
- Angle.toDegrees = function toDegrees (radians) {
- return radians * 180 / Math.PI
- };
- Angle.normalize = function normalize (angle) {
- while (angle > Math.PI) { angle -= Angle.PI_TIMES_2; }
- while (angle <= -Math.PI) { angle += Angle.PI_TIMES_2; }
- return angle
- };
- Angle.angle = function angle () {
- if (arguments.length === 1) {
- var p = arguments[0];
- return Math.atan2(p.y, p.x)
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- var dx = p1.x - p0.x;
- var dy = p1.y - p0.y;
- return Math.atan2(dy, dx)
- }
- };
- Angle.isAcute = function isAcute (p0, p1, p2) {
- var dx0 = p0.x - p1.x;
- var dy0 = p0.y - p1.y;
- var dx1 = p2.x - p1.x;
- var dy1 = p2.y - p1.y;
- var dotprod = dx0 * dx1 + dy0 * dy1;
- return dotprod > 0
- };
- Angle.isObtuse = function isObtuse (p0, p1, p2) {
- var dx0 = p0.x - p1.x;
- var dy0 = p0.y - p1.y;
- var dx1 = p2.x - p1.x;
- var dy1 = p2.y - p1.y;
- var dotprod = dx0 * dx1 + dy0 * dy1;
- return dotprod < 0
- };
- Angle.interiorAngle = function interiorAngle (p0, p1, p2) {
- var anglePrev = Angle.angle(p1, p0);
- var angleNext = Angle.angle(p1, p2);
- return Math.abs(angleNext - anglePrev)
- };
- Angle.normalizePositive = function normalizePositive (angle) {
- if (angle < 0.0) {
- while (angle < 0.0) { angle += Angle.PI_TIMES_2; }
- if (angle >= Angle.PI_TIMES_2) { angle = 0.0; }
- } else {
- while (angle >= Angle.PI_TIMES_2) { angle -= Angle.PI_TIMES_2; }
- if (angle < 0.0) { angle = 0.0; }
- }
- return angle
- };
- Angle.angleBetween = function angleBetween (tip1, tail, tip2) {
- var a1 = Angle.angle(tail, tip1);
- var a2 = Angle.angle(tail, tip2);
- return Angle.diff(a1, a2)
- };
- Angle.diff = function diff (ang1, ang2) {
- var delAngle = null;
- if (ang1 < ang2) {
- delAngle = ang2 - ang1;
- } else {
- delAngle = ang1 - ang2;
- }
- if (delAngle > Math.PI) {
- delAngle = 2 * Math.PI - delAngle;
- }
- return delAngle
- };
- Angle.toRadians = function toRadians (angleDegrees) {
- return angleDegrees * Math.PI / 180.0
- };
- Angle.getTurn = function getTurn (ang1, ang2) {
- var crossproduct = Math.sin(ang2 - ang1);
- if (crossproduct > 0) {
- return Angle.COUNTERCLOCKWISE
- }
- if (crossproduct < 0) {
- return Angle.CLOCKWISE
- }
- return Angle.NONE
- };
- Angle.angleBetweenOriented = function angleBetweenOriented (tip1, tail, tip2) {
- var a1 = Angle.angle(tail, tip1);
- var a2 = Angle.angle(tail, tip2);
- var angDel = a2 - a1;
- if (angDel <= -Math.PI) { return angDel + Angle.PI_TIMES_2 }
- if (angDel > Math.PI) { return angDel - Angle.PI_TIMES_2 }
- return angDel
- };
- staticAccessors$29.PI_TIMES_2.get = function () { return 2.0 * Math.PI };
- staticAccessors$29.PI_OVER_2.get = function () { return Math.PI / 2.0 };
- staticAccessors$29.PI_OVER_4.get = function () { return Math.PI / 4.0 };
- staticAccessors$29.COUNTERCLOCKWISE.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
- staticAccessors$29.CLOCKWISE.get = function () { return CGAlgorithms.CLOCKWISE };
- staticAccessors$29.NONE.get = function () { return CGAlgorithms.COLLINEAR };
- Object.defineProperties( Angle, staticAccessors$29 );
- var OffsetSegmentGenerator = function OffsetSegmentGenerator () {
- this._maxCurveSegmentError = 0.0;
- this._filletAngleQuantum = null;
- this._closingSegLengthFactor = 1;
- this._segList = null;
- this._distance = 0.0;
- this._precisionModel = null;
- this._bufParams = null;
- this._li = null;
- this._s0 = null;
- this._s1 = null;
- this._s2 = null;
- this._seg0 = new LineSegment();
- this._seg1 = new LineSegment();
- this._offset0 = new LineSegment();
- this._offset1 = new LineSegment();
- this._side = 0;
- this._hasNarrowConcaveAngle = false;
- var precisionModel = arguments[0];
- var bufParams = arguments[1];
- var distance = arguments[2];
- this._precisionModel = precisionModel;
- this._bufParams = bufParams;
- this._li = new RobustLineIntersector();
- this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();
- if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) { this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR; }
- this.init(distance);
- };
- var staticAccessors$27 = { OFFSET_SEGMENT_SEPARATION_FACTOR: { configurable: true },INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },CURVE_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },MAX_CLOSING_SEG_LEN_FACTOR: { configurable: true } };
- OffsetSegmentGenerator.prototype.addNextSegment = function addNextSegment (p, addStartPoint) {
- this._s0 = this._s1;
- this._s1 = this._s2;
- this._s2 = p;
- this._seg0.setCoordinates(this._s0, this._s1);
- this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);
- this._seg1.setCoordinates(this._s1, this._s2);
- this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);
- if (this._s1.equals(this._s2)) { return null }
- var orientation = CGAlgorithms.computeOrientation(this._s0, this._s1, this._s2);
- var outsideTurn = (orientation === CGAlgorithms.CLOCKWISE && this._side === Position.LEFT) || (orientation === CGAlgorithms.COUNTERCLOCKWISE && this._side === Position.RIGHT);
- if (orientation === 0) {
- this.addCollinear(addStartPoint);
- } else if (outsideTurn) {
- this.addOutsideTurn(orientation, addStartPoint);
- } else {
- this.addInsideTurn(orientation, addStartPoint);
- }
- };
- OffsetSegmentGenerator.prototype.addLineEndCap = function addLineEndCap (p0, p1) {
- var seg = new LineSegment(p0, p1);
- var offsetL = new LineSegment();
- this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);
- var offsetR = new LineSegment();
- this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);
- var dx = p1.x - p0.x;
- var dy = p1.y - p0.y;
- var angle = Math.atan2(dy, dx);
- switch (this._bufParams.getEndCapStyle()) {
- case BufferParameters.CAP_ROUND:
- this._segList.addPt(offsetL.p1);
- this.addFilletArc(p1, angle + Math.PI / 2, angle - Math.PI / 2, CGAlgorithms.CLOCKWISE, this._distance);
- this._segList.addPt(offsetR.p1);
- break
- case BufferParameters.CAP_FLAT:
- this._segList.addPt(offsetL.p1);
- this._segList.addPt(offsetR.p1);
- break
- case BufferParameters.CAP_SQUARE:
- var squareCapSideOffset = new Coordinate();
- squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);
- squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);
- var squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);
- var squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);
- this._segList.addPt(squareCapLOffset);
- this._segList.addPt(squareCapROffset);
- break
- default:
- }
- };
- OffsetSegmentGenerator.prototype.getCoordinates = function getCoordinates () {
- var pts = this._segList.getCoordinates();
- return pts
- };
- OffsetSegmentGenerator.prototype.addMitreJoin = function addMitreJoin (p, offset0, offset1, distance) {
- var isMitreWithinLimit = true;
- var intPt = null;
- try {
- intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);
- var mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);
- if (mitreRatio > this._bufParams.getMitreLimit()) { isMitreWithinLimit = false; }
- } catch (ex) {
- if (ex instanceof NotRepresentableException) {
- intPt = new Coordinate(0, 0);
- isMitreWithinLimit = false;
- } else { throw ex }
- } finally {}
- if (isMitreWithinLimit) {
- this._segList.addPt(intPt);
- } else {
- this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());
- }
- };
- OffsetSegmentGenerator.prototype.addFilletCorner = function addFilletCorner (p, p0, p1, direction, radius) {
- var dx0 = p0.x - p.x;
- var dy0 = p0.y - p.y;
- var startAngle = Math.atan2(dy0, dx0);
- var dx1 = p1.x - p.x;
- var dy1 = p1.y - p.y;
- var endAngle = Math.atan2(dy1, dx1);
- if (direction === CGAlgorithms.CLOCKWISE) {
- if (startAngle <= endAngle) { startAngle += 2.0 * Math.PI; }
- } else {
- if (startAngle >= endAngle) { startAngle -= 2.0 * Math.PI; }
- }
- this._segList.addPt(p0);
- this.addFilletArc(p, startAngle, endAngle, direction, radius);
- this._segList.addPt(p1);
- };
- OffsetSegmentGenerator.prototype.addOutsideTurn = function addOutsideTurn (orientation, addStartPoint) {
- if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {
- this._segList.addPt(this._offset0.p1);
- return null
- }
- if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
- this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);
- } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {
- this.addBevelJoin(this._offset0, this._offset1);
- } else {
- if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
- this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);
- this._segList.addPt(this._offset1.p0);
- }
- };
- OffsetSegmentGenerator.prototype.createSquare = function createSquare (p) {
- this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));
- this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));
- this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));
- this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));
- this._segList.closeRing();
- };
- OffsetSegmentGenerator.prototype.addSegments = function addSegments (pt, isForward) {
- this._segList.addPts(pt, isForward);
- };
- OffsetSegmentGenerator.prototype.addFirstSegment = function addFirstSegment () {
- this._segList.addPt(this._offset1.p0);
- };
- OffsetSegmentGenerator.prototype.addLastSegment = function addLastSegment () {
- this._segList.addPt(this._offset1.p1);
- };
- OffsetSegmentGenerator.prototype.initSideSegments = function initSideSegments (s1, s2, side) {
- this._s1 = s1;
- this._s2 = s2;
- this._side = side;
- this._seg1.setCoordinates(s1, s2);
- this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);
- };
- OffsetSegmentGenerator.prototype.addLimitedMitreJoin = function addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {
- var basePt = this._seg0.p1;
- var ang0 = Angle.angle(basePt, this._seg0.p0);
- // const ang1 = Angle.angle(basePt, this._seg1.p1)
- var angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);
- var angDiffHalf = angDiff / 2;
- var midAng = Angle.normalize(ang0 + angDiffHalf);
- var mitreMidAng = Angle.normalize(midAng + Math.PI);
- var mitreDist = mitreLimit * distance;
- var bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));
- var bevelHalfLen = distance - bevelDelta;
- var bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);
- var bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);
- var bevelMidPt = new Coordinate(bevelMidX, bevelMidY);
- var mitreMidLine = new LineSegment(basePt, bevelMidPt);
- var bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);
- var bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);
- if (this._side === Position.LEFT) {
- this._segList.addPt(bevelEndLeft);
- this._segList.addPt(bevelEndRight);
- } else {
- this._segList.addPt(bevelEndRight);
- this._segList.addPt(bevelEndLeft);
- }
- };
- OffsetSegmentGenerator.prototype.computeOffsetSegment = function computeOffsetSegment (seg, side, distance, offset) {
- var sideSign = side === Position.LEFT ? 1 : -1;
- var dx = seg.p1.x - seg.p0.x;
- var dy = seg.p1.y - seg.p0.y;
- var len = Math.sqrt(dx * dx + dy * dy);
- var ux = sideSign * distance * dx / len;
- var uy = sideSign * distance * dy / len;
- offset.p0.x = seg.p0.x - uy;
- offset.p0.y = seg.p0.y + ux;
- offset.p1.x = seg.p1.x - uy;
- offset.p1.y = seg.p1.y + ux;
- };
- OffsetSegmentGenerator.prototype.addFilletArc = function addFilletArc (p, startAngle, endAngle, direction, radius) {
- var this$1 = this;
- var directionFactor = direction === CGAlgorithms.CLOCKWISE ? -1 : 1;
- var totalAngle = Math.abs(startAngle - endAngle);
- var nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);
- if (nSegs < 1) { return null }
- var initAngle = 0.0;
- var currAngleInc = totalAngle / nSegs;
- var currAngle = initAngle;
- var pt = new Coordinate();
- while (currAngle < totalAngle) {
- var angle = startAngle + directionFactor * currAngle;
- pt.x = p.x + radius * Math.cos(angle);
- pt.y = p.y + radius * Math.sin(angle);
- this$1._segList.addPt(pt);
- currAngle += currAngleInc;
- }
- };
- OffsetSegmentGenerator.prototype.addInsideTurn = function addInsideTurn (orientation, addStartPoint) {
- this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);
- if (this._li.hasIntersection()) {
- this._segList.addPt(this._li.getIntersection(0));
- } else {
- this._hasNarrowConcaveAngle = true;
- if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {
- this._segList.addPt(this._offset0.p1);
- } else {
- this._segList.addPt(this._offset0.p1);
- if (this._closingSegLengthFactor > 0) {
- var mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1));
- this._segList.addPt(mid0);
- var mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1));
- this._segList.addPt(mid1);
- } else {
- this._segList.addPt(this._s1);
- }
- this._segList.addPt(this._offset1.p0);
- }
- }
- };
- OffsetSegmentGenerator.prototype.createCircle = function createCircle (p) {
- var pt = new Coordinate(p.x + this._distance, p.y);
- this._segList.addPt(pt);
- this.addFilletArc(p, 0.0, 2.0 * Math.PI, -1, this._distance);
- this._segList.closeRing();
- };
- OffsetSegmentGenerator.prototype.addBevelJoin = function addBevelJoin (offset0, offset1) {
- this._segList.addPt(offset0.p1);
- this._segList.addPt(offset1.p0);
- };
- OffsetSegmentGenerator.prototype.init = function init (distance) {
- this._distance = distance;
- this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));
- this._segList = new OffsetSegmentString();
- this._segList.setPrecisionModel(this._precisionModel);
- this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);
- };
- OffsetSegmentGenerator.prototype.addCollinear = function addCollinear (addStartPoint) {
- this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);
- var numInt = this._li.getIntersectionNum();
- if (numInt >= 2) {
- if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
- if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
- this._segList.addPt(this._offset1.p0);
- } else {
- this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, CGAlgorithms.CLOCKWISE, this._distance);
- }
- }
- };
- OffsetSegmentGenerator.prototype.closeRing = function closeRing () {
- this._segList.closeRing();
- };
- OffsetSegmentGenerator.prototype.hasNarrowConcaveAngle = function hasNarrowConcaveAngle () {
- return this._hasNarrowConcaveAngle
- };
- OffsetSegmentGenerator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OffsetSegmentGenerator.prototype.getClass = function getClass () {
- return OffsetSegmentGenerator
- };
- staticAccessors$27.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return 1.0E-3 };
- staticAccessors$27.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-3 };
- staticAccessors$27.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-6 };
- staticAccessors$27.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 };
- Object.defineProperties( OffsetSegmentGenerator, staticAccessors$27 );
- var OffsetCurveBuilder = function OffsetCurveBuilder () {
- this._distance = 0.0;
- this._precisionModel = null;
- this._bufParams = null;
- var precisionModel = arguments[0];
- var bufParams = arguments[1];
- this._precisionModel = precisionModel;
- this._bufParams = bufParams;
- };
- OffsetCurveBuilder.prototype.getOffsetCurve = function getOffsetCurve (inputPts, distance) {
- this._distance = distance;
- if (distance === 0.0) { return null }
- var isRightSide = distance < 0.0;
- var posDistance = Math.abs(distance);
- var segGen = this.getSegGen(posDistance);
- if (inputPts.length <= 1) {
- this.computePointCurve(inputPts[0], segGen);
- } else {
- this.computeOffsetCurve(inputPts, isRightSide, segGen);
- }
- var curvePts = segGen.getCoordinates();
- if (isRightSide) { CoordinateArrays.reverse(curvePts); }
- return curvePts
- };
- OffsetCurveBuilder.prototype.computeSingleSidedBufferCurve = function computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {
- var distTol = this.simplifyTolerance(this._distance);
- if (isRightSide) {
- segGen.addSegments(inputPts, true);
- var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
- var n2 = simp2.length - 1;
- segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
- segGen.addFirstSegment();
- for (var i = n2 - 2; i >= 0; i--) {
- segGen.addNextSegment(simp2[i], true);
- }
- } else {
- segGen.addSegments(inputPts, false);
- var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
- var n1 = simp1.length - 1;
- segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
- segGen.addFirstSegment();
- for (var i$1 = 2; i$1 <= n1; i$1++) {
- segGen.addNextSegment(simp1[i$1], true);
- }
- }
- segGen.addLastSegment();
- segGen.closeRing();
- };
- OffsetCurveBuilder.prototype.computeRingBufferCurve = function computeRingBufferCurve (inputPts, side, segGen) {
- var distTol = this.simplifyTolerance(this._distance);
- if (side === Position.RIGHT) { distTol = -distTol; }
- var simp = BufferInputLineSimplifier.simplify(inputPts, distTol);
- var n = simp.length - 1;
- segGen.initSideSegments(simp[n - 1], simp[0], side);
- for (var i = 1; i <= n; i++) {
- var addStartPoint = i !== 1;
- segGen.addNextSegment(simp[i], addStartPoint);
- }
- segGen.closeRing();
- };
- OffsetCurveBuilder.prototype.computeLineBufferCurve = function computeLineBufferCurve (inputPts, segGen) {
- var distTol = this.simplifyTolerance(this._distance);
- var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
- var n1 = simp1.length - 1;
- segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
- for (var i = 2; i <= n1; i++) {
- segGen.addNextSegment(simp1[i], true);
- }
- segGen.addLastSegment();
- segGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);
- var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
- var n2 = simp2.length - 1;
- segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
- for (var i$1 = n2 - 2; i$1 >= 0; i$1--) {
- segGen.addNextSegment(simp2[i$1], true);
- }
- segGen.addLastSegment();
- segGen.addLineEndCap(simp2[1], simp2[0]);
- segGen.closeRing();
- };
- OffsetCurveBuilder.prototype.computePointCurve = function computePointCurve (pt, segGen) {
- switch (this._bufParams.getEndCapStyle()) {
- case BufferParameters.CAP_ROUND:
- segGen.createCircle(pt);
- break
- case BufferParameters.CAP_SQUARE:
- segGen.createSquare(pt);
- break
- default:
- }
- };
- OffsetCurveBuilder.prototype.getLineCurve = function getLineCurve (inputPts, distance) {
- this._distance = distance;
- if (distance < 0.0 && !this._bufParams.isSingleSided()) { return null }
- if (distance === 0.0) { return null }
- var posDistance = Math.abs(distance);
- var segGen = this.getSegGen(posDistance);
- if (inputPts.length <= 1) {
- this.computePointCurve(inputPts[0], segGen);
- } else {
- if (this._bufParams.isSingleSided()) {
- var isRightSide = distance < 0.0;
- this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);
- } else { this.computeLineBufferCurve(inputPts, segGen); }
- }
- var lineCoord = segGen.getCoordinates();
- return lineCoord
- };
- OffsetCurveBuilder.prototype.getBufferParameters = function getBufferParameters () {
- return this._bufParams
- };
- OffsetCurveBuilder.prototype.simplifyTolerance = function simplifyTolerance (bufDistance) {
- return bufDistance * this._bufParams.getSimplifyFactor()
- };
- OffsetCurveBuilder.prototype.getRingCurve = function getRingCurve (inputPts, side, distance) {
- this._distance = distance;
- if (inputPts.length <= 2) { return this.getLineCurve(inputPts, distance) }
- if (distance === 0.0) {
- return OffsetCurveBuilder.copyCoordinates(inputPts)
- }
- var segGen = this.getSegGen(distance);
- this.computeRingBufferCurve(inputPts, side, segGen);
- return segGen.getCoordinates()
- };
- OffsetCurveBuilder.prototype.computeOffsetCurve = function computeOffsetCurve (inputPts, isRightSide, segGen) {
- var distTol = this.simplifyTolerance(this._distance);
- if (isRightSide) {
- var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
- var n2 = simp2.length - 1;
- segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
- segGen.addFirstSegment();
- for (var i = n2 - 2; i >= 0; i--) {
- segGen.addNextSegment(simp2[i], true);
- }
- } else {
- var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
- var n1 = simp1.length - 1;
- segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
- segGen.addFirstSegment();
- for (var i$1 = 2; i$1 <= n1; i$1++) {
- segGen.addNextSegment(simp1[i$1], true);
- }
- }
- segGen.addLastSegment();
- };
- OffsetCurveBuilder.prototype.getSegGen = function getSegGen (distance) {
- return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)
- };
- OffsetCurveBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OffsetCurveBuilder.prototype.getClass = function getClass () {
- return OffsetCurveBuilder
- };
- OffsetCurveBuilder.copyCoordinates = function copyCoordinates (pts) {
- var copy = new Array(pts.length).fill(null);
- for (var i = 0; i < copy.length; i++) {
- copy[i] = new Coordinate(pts[i]);
- }
- return copy
- };
- var SubgraphDepthLocater = function SubgraphDepthLocater () {
- this._subgraphs = null;
- this._seg = new LineSegment();
- this._cga = new CGAlgorithms();
- var subgraphs = arguments[0];
- this._subgraphs = subgraphs;
- };
- var staticAccessors$30 = { DepthSegment: { configurable: true } };
- SubgraphDepthLocater.prototype.findStabbedSegments = function findStabbedSegments () {
- var this$1 = this;
- if (arguments.length === 1) {
- var stabbingRayLeftPt = arguments[0];
- var stabbedSegments = new ArrayList();
- for (var i = this._subgraphs.iterator(); i.hasNext();) {
- var bsg = i.next();
- var env = bsg.getEnvelope();
- if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) { continue }
- this$1.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);
- }
- return stabbedSegments
- } else if (arguments.length === 3) {
- if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {
- var stabbingRayLeftPt$1 = arguments[0];
- var dirEdge = arguments[1];
- var stabbedSegments$1 = arguments[2];
- var pts = dirEdge.getEdge().getCoordinates();
- for (var i$1 = 0; i$1 < pts.length - 1; i$1++) {
- this$1._seg.p0 = pts[i$1];
- this$1._seg.p1 = pts[i$1 + 1];
- if (this$1._seg.p0.y > this$1._seg.p1.y) { this$1._seg.reverse(); }
- var maxx = Math.max(this$1._seg.p0.x, this$1._seg.p1.x);
- if (maxx < stabbingRayLeftPt$1.x) { continue }
- if (this$1._seg.isHorizontal()) { continue }
- if (stabbingRayLeftPt$1.y < this$1._seg.p0.y || stabbingRayLeftPt$1.y > this$1._seg.p1.y) { continue }
- if (CGAlgorithms.computeOrientation(this$1._seg.p0, this$1._seg.p1, stabbingRayLeftPt$1) === CGAlgorithms.RIGHT) { continue }
- var depth = dirEdge.getDepth(Position.LEFT);
- if (!this$1._seg.p0.equals(pts[i$1])) { depth = dirEdge.getDepth(Position.RIGHT); }
- var ds = new DepthSegment(this$1._seg, depth);
- stabbedSegments$1.add(ds);
- }
- } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {
- var stabbingRayLeftPt$2 = arguments[0];
- var dirEdges = arguments[1];
- var stabbedSegments$2 = arguments[2];
- for (var i$2 = dirEdges.iterator(); i$2.hasNext();) {
- var de = i$2.next();
- if (!de.isForward()) { continue }
- this$1.findStabbedSegments(stabbingRayLeftPt$2, de, stabbedSegments$2);
- }
- }
- }
- };
- SubgraphDepthLocater.prototype.getDepth = function getDepth (p) {
- var stabbedSegments = this.findStabbedSegments(p);
- if (stabbedSegments.size() === 0) { return 0 }
- var ds = Collections.min(stabbedSegments);
- return ds._leftDepth
- };
- SubgraphDepthLocater.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SubgraphDepthLocater.prototype.getClass = function getClass () {
- return SubgraphDepthLocater
- };
- staticAccessors$30.DepthSegment.get = function () { return DepthSegment };
- Object.defineProperties( SubgraphDepthLocater, staticAccessors$30 );
- var DepthSegment = function DepthSegment () {
- this._upwardSeg = null;
- this._leftDepth = null;
- var seg = arguments[0];
- var depth = arguments[1];
- this._upwardSeg = new LineSegment(seg);
- this._leftDepth = depth;
- };
- DepthSegment.prototype.compareTo = function compareTo (obj) {
- var other = obj;
- if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) { return 1 }
- if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) { return -1 }
- var orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);
- if (orientIndex !== 0) { return orientIndex }
- orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);
- if (orientIndex !== 0) { return orientIndex }
- return this._upwardSeg.compareTo(other._upwardSeg)
- };
- DepthSegment.prototype.compareX = function compareX (seg0, seg1) {
- var compare0 = seg0.p0.compareTo(seg1.p0);
- if (compare0 !== 0) { return compare0 }
- return seg0.p1.compareTo(seg1.p1)
- };
- DepthSegment.prototype.toString = function toString () {
- return this._upwardSeg.toString()
- };
- DepthSegment.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- DepthSegment.prototype.getClass = function getClass () {
- return DepthSegment
- };
- var Triangle = function Triangle (p0, p1, p2) {
- this.p0 = p0 || null;
- this.p1 = p1 || null;
- this.p2 = p2 || null;
- };
- Triangle.prototype.area = function area () {
- return Triangle.area(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.signedArea = function signedArea () {
- return Triangle.signedArea(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.interpolateZ = function interpolateZ (p) {
- if (p === null) { throw new IllegalArgumentException('Supplied point is null.') }
- return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)
- };
- Triangle.prototype.longestSideLength = function longestSideLength () {
- return Triangle.longestSideLength(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.isAcute = function isAcute () {
- return Triangle.isAcute(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.circumcentre = function circumcentre () {
- return Triangle.circumcentre(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.area3D = function area3D () {
- return Triangle.area3D(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.centroid = function centroid () {
- return Triangle.centroid(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.inCentre = function inCentre () {
- return Triangle.inCentre(this.p0, this.p1, this.p2)
- };
- Triangle.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Triangle.prototype.getClass = function getClass () {
- return Triangle
- };
- Triangle.area = function area (a, b, c) {
- return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)
- };
- Triangle.signedArea = function signedArea (a, b, c) {
- return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2
- };
- Triangle.det = function det (m00, m01, m10, m11) {
- return m00 * m11 - m01 * m10
- };
- Triangle.interpolateZ = function interpolateZ (p, v0, v1, v2) {
- var x0 = v0.x;
- var y0 = v0.y;
- var a = v1.x - x0;
- var b = v2.x - x0;
- var c = v1.y - y0;
- var d = v2.y - y0;
- var det = a * d - b * c;
- var dx = p.x - x0;
- var dy = p.y - y0;
- var t = (d * dx - b * dy) / det;
- var u = (-c * dx + a * dy) / det;
- var z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);
- return z
- };
- Triangle.longestSideLength = function longestSideLength (a, b, c) {
- var lenAB = a.distance(b);
- var lenBC = b.distance(c);
- var lenCA = c.distance(a);
- var maxLen = lenAB;
- if (lenBC > maxLen) { maxLen = lenBC; }
- if (lenCA > maxLen) { maxLen = lenCA; }
- return maxLen
- };
- Triangle.isAcute = function isAcute (a, b, c) {
- if (!Angle.isAcute(a, b, c)) { return false }
- if (!Angle.isAcute(b, c, a)) { return false }
- if (!Angle.isAcute(c, a, b)) { return false }
- return true
- };
- Triangle.circumcentre = function circumcentre (a, b, c) {
- var cx = c.x;
- var cy = c.y;
- var ax = a.x - cx;
- var ay = a.y - cy;
- var bx = b.x - cx;
- var by = b.y - cy;
- var denom = 2 * Triangle.det(ax, ay, bx, by);
- var numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by);
- var numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);
- var ccx = cx - numx / denom;
- var ccy = cy + numy / denom;
- return new Coordinate(ccx, ccy)
- };
- Triangle.perpendicularBisector = function perpendicularBisector (a, b) {
- var dx = b.x - a.x;
- var dy = b.y - a.y;
- var l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0);
- var l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0);
- return new HCoordinate(l1, l2)
- };
- Triangle.angleBisector = function angleBisector (a, b, c) {
- var len0 = b.distance(a);
- var len2 = b.distance(c);
- var frac = len0 / (len0 + len2);
- var dx = c.x - a.x;
- var dy = c.y - a.y;
- var splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy);
- return splitPt
- };
- Triangle.area3D = function area3D (a, b, c) {
- var ux = b.x - a.x;
- var uy = b.y - a.y;
- var uz = b.z - a.z;
- var vx = c.x - a.x;
- var vy = c.y - a.y;
- var vz = c.z - a.z;
- var crossx = uy * vz - uz * vy;
- var crossy = uz * vx - ux * vz;
- var crossz = ux * vy - uy * vx;
- var absSq = crossx * crossx + crossy * crossy + crossz * crossz;
- var area3D = Math.sqrt(absSq) / 2;
- return area3D
- };
- Triangle.centroid = function centroid (a, b, c) {
- var x = (a.x + b.x + c.x) / 3;
- var y = (a.y + b.y + c.y) / 3;
- return new Coordinate(x, y)
- };
- Triangle.inCentre = function inCentre (a, b, c) {
- var len0 = b.distance(c);
- var len1 = a.distance(c);
- var len2 = a.distance(b);
- var circum = len0 + len1 + len2;
- var inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum;
- var inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum;
- return new Coordinate(inCentreX, inCentreY)
- };
- var OffsetCurveSetBuilder = function OffsetCurveSetBuilder () {
- this._inputGeom = null;
- this._distance = null;
- this._curveBuilder = null;
- this._curveList = new ArrayList();
- var inputGeom = arguments[0];
- var distance = arguments[1];
- var curveBuilder = arguments[2];
- this._inputGeom = inputGeom;
- this._distance = distance;
- this._curveBuilder = curveBuilder;
- };
- OffsetCurveSetBuilder.prototype.addPoint = function addPoint (p) {
- if (this._distance <= 0.0) { return null }
- var coord = p.getCoordinates();
- var curve = this._curveBuilder.getLineCurve(coord, this._distance);
- this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
- };
- OffsetCurveSetBuilder.prototype.addPolygon = function addPolygon (p) {
- var this$1 = this;
- var offsetDistance = this._distance;
- var offsetSide = Position.LEFT;
- if (this._distance < 0.0) {
- offsetDistance = -this._distance;
- offsetSide = Position.RIGHT;
- }
- var shell = p.getExteriorRing();
- var shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());
- if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) { return null }
- if (this._distance <= 0.0 && shellCoord.length < 3) { return null }
- this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);
- for (var i = 0; i < p.getNumInteriorRing(); i++) {
- var hole = p.getInteriorRingN(i);
- var holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());
- if (this$1._distance > 0.0 && this$1.isErodedCompletely(hole, -this$1._distance)) { continue }
- this$1.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);
- }
- };
- OffsetCurveSetBuilder.prototype.isTriangleErodedCompletely = function isTriangleErodedCompletely (triangleCoord, bufferDistance) {
- var tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);
- var inCentre = tri.inCentre();
- var distToCentre = CGAlgorithms.distancePointLine(inCentre, tri.p0, tri.p1);
- return distToCentre < Math.abs(bufferDistance)
- };
- OffsetCurveSetBuilder.prototype.addLineString = function addLineString (line) {
- if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) { return null }
- var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
- var curve = this._curveBuilder.getLineCurve(coord, this._distance);
- this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
- };
- OffsetCurveSetBuilder.prototype.addCurve = function addCurve (coord, leftLoc, rightLoc) {
- if (coord === null || coord.length < 2) { return null }
- var e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));
- this._curveList.add(e);
- };
- OffsetCurveSetBuilder.prototype.getCurves = function getCurves () {
- this.add(this._inputGeom);
- return this._curveList
- };
- OffsetCurveSetBuilder.prototype.addPolygonRing = function addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {
- if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) { return null }
- var leftLoc = cwLeftLoc;
- var rightLoc = cwRightLoc;
- if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && CGAlgorithms.isCCW(coord)) {
- leftLoc = cwRightLoc;
- rightLoc = cwLeftLoc;
- side = Position.opposite(side);
- }
- var curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);
- this.addCurve(curve, leftLoc, rightLoc);
- };
- OffsetCurveSetBuilder.prototype.add = function add (g) {
- if (g.isEmpty()) { return null }
- if (g instanceof Polygon) { this.addPolygon(g); }
- else if (g instanceof LineString) { this.addLineString(g); }
- else if (g instanceof Point) { this.addPoint(g); }
- else if (g instanceof MultiPoint) { this.addCollection(g); }
- else if (g instanceof MultiLineString) { this.addCollection(g); }
- else if (g instanceof MultiPolygon) { this.addCollection(g); }
- else if (g instanceof GeometryCollection) { this.addCollection(g); }
- // else throw new UnsupportedOperationException(g.getClass().getName())
- };
- OffsetCurveSetBuilder.prototype.isErodedCompletely = function isErodedCompletely (ring, bufferDistance) {
- var ringCoord = ring.getCoordinates();
- // const minDiam = 0.0
- if (ringCoord.length < 4) { return bufferDistance < 0 }
- if (ringCoord.length === 4) { return this.isTriangleErodedCompletely(ringCoord, bufferDistance) }
- var env = ring.getEnvelopeInternal();
- var envMinDimension = Math.min(env.getHeight(), env.getWidth());
- if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) { return true }
- return false
- };
- OffsetCurveSetBuilder.prototype.addCollection = function addCollection (gc) {
- var this$1 = this;
- for (var i = 0; i < gc.getNumGeometries(); i++) {
- var g = gc.getGeometryN(i);
- this$1.add(g);
- }
- };
- OffsetCurveSetBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OffsetCurveSetBuilder.prototype.getClass = function getClass () {
- return OffsetCurveSetBuilder
- };
- var PointOnGeometryLocator = function PointOnGeometryLocator () {};
- PointOnGeometryLocator.prototype.locate = function locate (p) {};
- PointOnGeometryLocator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PointOnGeometryLocator.prototype.getClass = function getClass () {
- return PointOnGeometryLocator
- };
- var GeometryCollectionIterator = function GeometryCollectionIterator () {
- this._parent = null;
- this._atStart = null;
- this._max = null;
- this._index = null;
- this._subcollectionIterator = null;
- var parent = arguments[0];
- this._parent = parent;
- this._atStart = true;
- this._index = 0;
- this._max = parent.getNumGeometries();
- };
- GeometryCollectionIterator.prototype.next = function next () {
- if (this._atStart) {
- this._atStart = false;
- if (GeometryCollectionIterator.isAtomic(this._parent)) { this._index++; }
- return this._parent
- }
- if (this._subcollectionIterator !== null) {
- if (this._subcollectionIterator.hasNext()) {
- return this._subcollectionIterator.next()
- } else {
- this._subcollectionIterator = null;
- }
- }
- if (this._index >= this._max) {
- throw new NoSuchElementException()
- }
- var obj = this._parent.getGeometryN(this._index++);
- if (obj instanceof GeometryCollection) {
- this._subcollectionIterator = new GeometryCollectionIterator(obj);
- return this._subcollectionIterator.next()
- }
- return obj
- };
- GeometryCollectionIterator.prototype.remove = function remove () {
- throw new Error(this.getClass().getName())
- };
- GeometryCollectionIterator.prototype.hasNext = function hasNext () {
- if (this._atStart) {
- return true
- }
- if (this._subcollectionIterator !== null) {
- if (this._subcollectionIterator.hasNext()) {
- return true
- }
- this._subcollectionIterator = null;
- }
- if (this._index >= this._max) {
- return false
- }
- return true
- };
- GeometryCollectionIterator.prototype.interfaces_ = function interfaces_ () {
- return [Iterator]
- };
- GeometryCollectionIterator.prototype.getClass = function getClass () {
- return GeometryCollectionIterator
- };
- GeometryCollectionIterator.isAtomic = function isAtomic (geom) {
- return !(geom instanceof GeometryCollection)
- };
- var SimplePointInAreaLocator = function SimplePointInAreaLocator () {
- this._geom = null;
- var geom = arguments[0];
- this._geom = geom;
- };
- SimplePointInAreaLocator.prototype.locate = function locate (p) {
- return SimplePointInAreaLocator.locate(p, this._geom)
- };
- SimplePointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
- return [PointOnGeometryLocator]
- };
- SimplePointInAreaLocator.prototype.getClass = function getClass () {
- return SimplePointInAreaLocator
- };
- SimplePointInAreaLocator.isPointInRing = function isPointInRing (p, ring) {
- if (!ring.getEnvelopeInternal().intersects(p)) { return false }
- return CGAlgorithms.isPointInRing(p, ring.getCoordinates())
- };
- SimplePointInAreaLocator.containsPointInPolygon = function containsPointInPolygon (p, poly) {
- if (poly.isEmpty()) { return false }
- var shell = poly.getExteriorRing();
- if (!SimplePointInAreaLocator.isPointInRing(p, shell)) { return false }
- for (var i = 0; i < poly.getNumInteriorRing(); i++) {
- var hole = poly.getInteriorRingN(i);
- if (SimplePointInAreaLocator.isPointInRing(p, hole)) { return false }
- }
- return true
- };
- SimplePointInAreaLocator.containsPoint = function containsPoint (p, geom) {
- if (geom instanceof Polygon) {
- return SimplePointInAreaLocator.containsPointInPolygon(p, geom)
- } else if (geom instanceof GeometryCollection) {
- var geomi = new GeometryCollectionIterator(geom);
- while (geomi.hasNext()) {
- var g2 = geomi.next();
- if (g2 !== geom) { if (SimplePointInAreaLocator.containsPoint(p, g2)) { return true } }
- }
- }
- return false
- };
- SimplePointInAreaLocator.locate = function locate (p, geom) {
- if (geom.isEmpty()) { return Location.EXTERIOR }
- if (SimplePointInAreaLocator.containsPoint(p, geom)) { return Location.INTERIOR }
- return Location.EXTERIOR
- };
- var EdgeEndStar = function EdgeEndStar () {
- this._edgeMap = new TreeMap();
- this._edgeList = null;
- this._ptInAreaLocation = [Location.NONE, Location.NONE];
- };
- EdgeEndStar.prototype.getNextCW = function getNextCW (ee) {
- this.getEdges();
- var i = this._edgeList.indexOf(ee);
- var iNextCW = i - 1;
- if (i === 0) { iNextCW = this._edgeList.size() - 1; }
- return this._edgeList.get(iNextCW)
- };
- EdgeEndStar.prototype.propagateSideLabels = function propagateSideLabels (geomIndex) {
- var startLoc = Location.NONE;
- for (var it = this.iterator(); it.hasNext();) {
- var e = it.next();
- var label = e.getLabel();
- if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) { startLoc = label.getLocation(geomIndex, Position.LEFT); }
- }
- if (startLoc === Location.NONE) { return null }
- var currLoc = startLoc;
- for (var it$1 = this.iterator(); it$1.hasNext();) {
- var e$1 = it$1.next();
- var label$1 = e$1.getLabel();
- if (label$1.getLocation(geomIndex, Position.ON) === Location.NONE) { label$1.setLocation(geomIndex, Position.ON, currLoc); }
- if (label$1.isArea(geomIndex)) {
- var leftLoc = label$1.getLocation(geomIndex, Position.LEFT);
- var rightLoc = label$1.getLocation(geomIndex, Position.RIGHT);
- if (rightLoc !== Location.NONE) {
- if (rightLoc !== currLoc) { throw new TopologyException('side location conflict', e$1.getCoordinate()) }
- if (leftLoc === Location.NONE) {
- Assert.shouldNeverReachHere('found single null side (at ' + e$1.getCoordinate() + ')');
- }
- currLoc = leftLoc;
- } else {
- Assert.isTrue(label$1.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side');
- label$1.setLocation(geomIndex, Position.RIGHT, currLoc);
- label$1.setLocation(geomIndex, Position.LEFT, currLoc);
- }
- }
- }
- };
- EdgeEndStar.prototype.getCoordinate = function getCoordinate () {
- var it = this.iterator();
- if (!it.hasNext()) { return null }
- var e = it.next();
- return e.getCoordinate()
- };
- EdgeEndStar.prototype.print = function print (out) {
- System.out.println('EdgeEndStar: ' + this.getCoordinate());
- for (var it = this.iterator(); it.hasNext();) {
- var e = it.next();
- e.print(out);
- }
- };
- EdgeEndStar.prototype.isAreaLabelsConsistent = function isAreaLabelsConsistent (geomGraph) {
- this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());
- return this.checkAreaLabelsConsistent(0)
- };
- EdgeEndStar.prototype.checkAreaLabelsConsistent = function checkAreaLabelsConsistent (geomIndex) {
- var edges = this.getEdges();
- if (edges.size() <= 0) { return true }
- var lastEdgeIndex = edges.size() - 1;
- var startLabel = edges.get(lastEdgeIndex).getLabel();
- var startLoc = startLabel.getLocation(geomIndex, Position.LEFT);
- Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge');
- var currLoc = startLoc;
- for (var it = this.iterator(); it.hasNext();) {
- var e = it.next();
- var label = e.getLabel();
- Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge');
- var leftLoc = label.getLocation(geomIndex, Position.LEFT);
- var rightLoc = label.getLocation(geomIndex, Position.RIGHT);
- if (leftLoc === rightLoc) {
- return false
- }
- if (rightLoc !== currLoc) {
- return false
- }
- currLoc = leftLoc;
- }
- return true
- };
- EdgeEndStar.prototype.findIndex = function findIndex (eSearch) {
- var this$1 = this;
- this.iterator();
- for (var i = 0; i < this._edgeList.size(); i++) {
- var e = this$1._edgeList.get(i);
- if (e === eSearch) { return i }
- }
- return -1
- };
- EdgeEndStar.prototype.iterator = function iterator () {
- return this.getEdges().iterator()
- };
- EdgeEndStar.prototype.getEdges = function getEdges () {
- if (this._edgeList === null) {
- this._edgeList = new ArrayList(this._edgeMap.values());
- }
- return this._edgeList
- };
- EdgeEndStar.prototype.getLocation = function getLocation (geomIndex, p, geom) {
- if (this._ptInAreaLocation[geomIndex] === Location.NONE) {
- this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());
- }
- return this._ptInAreaLocation[geomIndex]
- };
- EdgeEndStar.prototype.toString = function toString () {
- var buf = new StringBuffer();
- buf.append('EdgeEndStar: ' + this.getCoordinate());
- buf.append('\n');
- for (var it = this.iterator(); it.hasNext();) {
- var e = it.next();
- buf.append(e);
- buf.append('\n');
- }
- return buf.toString()
- };
- EdgeEndStar.prototype.computeEdgeEndLabels = function computeEdgeEndLabels (boundaryNodeRule) {
- for (var it = this.iterator(); it.hasNext();) {
- var ee = it.next();
- ee.computeLabel(boundaryNodeRule);
- }
- };
- EdgeEndStar.prototype.computeLabelling = function computeLabelling (geomGraph) {
- var this$1 = this;
- this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());
- this.propagateSideLabels(0);
- this.propagateSideLabels(1);
- var hasDimensionalCollapseEdge = [false, false];
- for (var it = this.iterator(); it.hasNext();) {
- var e = it.next();
- var label = e.getLabel();
- for (var geomi = 0; geomi < 2; geomi++) {
- if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) { hasDimensionalCollapseEdge[geomi] = true; }
- }
- }
- for (var it$1 = this.iterator(); it$1.hasNext();) {
- var e$1 = it$1.next();
- var label$1 = e$1.getLabel();
- for (var geomi$1 = 0; geomi$1 < 2; geomi$1++) {
- if (label$1.isAnyNull(geomi$1)) {
- var loc = Location.NONE;
- if (hasDimensionalCollapseEdge[geomi$1]) {
- loc = Location.EXTERIOR;
- } else {
- var p = e$1.getCoordinate();
- loc = this$1.getLocation(geomi$1, p, geomGraph);
- }
- label$1.setAllLocationsIfNull(geomi$1, loc);
- }
- }
- }
- };
- EdgeEndStar.prototype.getDegree = function getDegree () {
- return this._edgeMap.size()
- };
- EdgeEndStar.prototype.insertEdgeEnd = function insertEdgeEnd (e, obj) {
- this._edgeMap.put(e, obj);
- this._edgeList = null;
- };
- EdgeEndStar.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- EdgeEndStar.prototype.getClass = function getClass () {
- return EdgeEndStar
- };
- var DirectedEdgeStar = (function (EdgeEndStar$$1) {
- function DirectedEdgeStar () {
- EdgeEndStar$$1.call(this);
- this._resultAreaEdgeList = null;
- this._label = null;
- this._SCANNING_FOR_INCOMING = 1;
- this._LINKING_TO_OUTGOING = 2;
- }
- if ( EdgeEndStar$$1 ) DirectedEdgeStar.__proto__ = EdgeEndStar$$1;
- DirectedEdgeStar.prototype = Object.create( EdgeEndStar$$1 && EdgeEndStar$$1.prototype );
- DirectedEdgeStar.prototype.constructor = DirectedEdgeStar;
- DirectedEdgeStar.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
- var this$1 = this;
- this.getResultAreaEdges();
- var firstOut = null;
- var incoming = null;
- var state = this._SCANNING_FOR_INCOMING;
- for (var i = 0; i < this._resultAreaEdgeList.size(); i++) {
- var nextOut = this$1._resultAreaEdgeList.get(i);
- var nextIn = nextOut.getSym();
- if (!nextOut.getLabel().isArea()) { continue }
- if (firstOut === null && nextOut.isInResult()) { firstOut = nextOut; }
- switch (state) {
- case this$1._SCANNING_FOR_INCOMING:
- if (!nextIn.isInResult()) { continue }
- incoming = nextIn;
- state = this$1._LINKING_TO_OUTGOING;
- break
- case this$1._LINKING_TO_OUTGOING:
- if (!nextOut.isInResult()) { continue }
- incoming.setNext(nextOut);
- state = this$1._SCANNING_FOR_INCOMING;
- break
- default:
- }
- }
- if (state === this._LINKING_TO_OUTGOING) {
- if (firstOut === null) { throw new TopologyException('no outgoing dirEdge found', this.getCoordinate()) }
- Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge');
- incoming.setNext(firstOut);
- }
- };
- DirectedEdgeStar.prototype.insert = function insert (ee) {
- var de = ee;
- this.insertEdgeEnd(de, de);
- };
- DirectedEdgeStar.prototype.getRightmostEdge = function getRightmostEdge () {
- var edges = this.getEdges();
- var size = edges.size();
- if (size < 1) { return null }
- var de0 = edges.get(0);
- if (size === 1) { return de0 }
- var deLast = edges.get(size - 1);
- var quad0 = de0.getQuadrant();
- var quad1 = deLast.getQuadrant();
- if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) { return de0; } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) { return deLast; } else {
- // const nonHorizontalEdge = null
- if (de0.getDy() !== 0) { return de0; } else if (deLast.getDy() !== 0) { return deLast }
- }
- Assert.shouldNeverReachHere('found two horizontal edges incident on node');
- return null
- };
- DirectedEdgeStar.prototype.print = function print (out) {
- System.out.println('DirectedEdgeStar: ' + this.getCoordinate());
- for (var it = this.iterator(); it.hasNext();) {
- var de = it.next();
- out.print('out ');
- de.print(out);
- out.println();
- out.print('in ');
- de.getSym().print(out);
- out.println();
- }
- };
- DirectedEdgeStar.prototype.getResultAreaEdges = function getResultAreaEdges () {
- var this$1 = this;
- if (this._resultAreaEdgeList !== null) { return this._resultAreaEdgeList }
- this._resultAreaEdgeList = new ArrayList();
- for (var it = this.iterator(); it.hasNext();) {
- var de = it.next();
- if (de.isInResult() || de.getSym().isInResult()) { this$1._resultAreaEdgeList.add(de); }
- }
- return this._resultAreaEdgeList
- };
- DirectedEdgeStar.prototype.updateLabelling = function updateLabelling (nodeLabel) {
- for (var it = this.iterator(); it.hasNext();) {
- var de = it.next();
- var label = de.getLabel();
- label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));
- label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));
- }
- };
- DirectedEdgeStar.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
- var this$1 = this;
- this.getEdges();
- var prevOut = null;
- var firstIn = null;
- for (var i = this._edgeList.size() - 1; i >= 0; i--) {
- var nextOut = this$1._edgeList.get(i);
- var nextIn = nextOut.getSym();
- if (firstIn === null) { firstIn = nextIn; }
- if (prevOut !== null) { nextIn.setNext(prevOut); }
- prevOut = nextOut;
- }
- firstIn.setNext(prevOut);
- };
- DirectedEdgeStar.prototype.computeDepths = function computeDepths () {
- var this$1 = this;
- if (arguments.length === 1) {
- var de = arguments[0];
- var edgeIndex = this.findIndex(de);
- // const label = de.getLabel()
- var startDepth = de.getDepth(Position.LEFT);
- var targetLastDepth = de.getDepth(Position.RIGHT);
- var nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);
- var lastDepth = this.computeDepths(0, edgeIndex, nextDepth);
- if (lastDepth !== targetLastDepth) { throw new TopologyException('depth mismatch at ' + de.getCoordinate()) }
- } else if (arguments.length === 3) {
- var startIndex = arguments[0];
- var endIndex = arguments[1];
- var startDepth$1 = arguments[2];
- var currDepth = startDepth$1;
- for (var i = startIndex; i < endIndex; i++) {
- var nextDe = this$1._edgeList.get(i);
- // const label = nextDe.getLabel()
- nextDe.setEdgeDepths(Position.RIGHT, currDepth);
- currDepth = nextDe.getDepth(Position.LEFT);
- }
- return currDepth
- }
- };
- DirectedEdgeStar.prototype.mergeSymLabels = function mergeSymLabels () {
- for (var it = this.iterator(); it.hasNext();) {
- var de = it.next();
- var label = de.getLabel();
- label.merge(de.getSym().getLabel());
- }
- };
- DirectedEdgeStar.prototype.linkMinimalDirectedEdges = function linkMinimalDirectedEdges (er) {
- var this$1 = this;
- var firstOut = null;
- var incoming = null;
- var state = this._SCANNING_FOR_INCOMING;
- for (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {
- var nextOut = this$1._resultAreaEdgeList.get(i);
- var nextIn = nextOut.getSym();
- if (firstOut === null && nextOut.getEdgeRing() === er) { firstOut = nextOut; }
- switch (state) {
- case this$1._SCANNING_FOR_INCOMING:
- if (nextIn.getEdgeRing() !== er) { continue }
- incoming = nextIn;
- state = this$1._LINKING_TO_OUTGOING;
- break
- case this$1._LINKING_TO_OUTGOING:
- if (nextOut.getEdgeRing() !== er) { continue }
- incoming.setNextMin(nextOut);
- state = this$1._SCANNING_FOR_INCOMING;
- break
- default:
- }
- }
- if (state === this._LINKING_TO_OUTGOING) {
- Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge');
- Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge');
- incoming.setNextMin(firstOut);
- }
- };
- DirectedEdgeStar.prototype.getOutgoingDegree = function getOutgoingDegree () {
- if (arguments.length === 0) {
- var degree = 0;
- for (var it = this.iterator(); it.hasNext();) {
- var de = it.next();
- if (de.isInResult()) { degree++; }
- }
- return degree
- } else if (arguments.length === 1) {
- var er = arguments[0];
- var degree$1 = 0;
- for (var it$1 = this.iterator(); it$1.hasNext();) {
- var de$1 = it$1.next();
- if (de$1.getEdgeRing() === er) { degree$1++; }
- }
- return degree$1
- }
- };
- DirectedEdgeStar.prototype.getLabel = function getLabel () {
- return this._label
- };
- DirectedEdgeStar.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
- var startLoc = Location.NONE;
- for (var it = this.iterator(); it.hasNext();) {
- var nextOut = it.next();
- var nextIn = nextOut.getSym();
- if (!nextOut.isLineEdge()) {
- if (nextOut.isInResult()) {
- startLoc = Location.INTERIOR;
- break
- }
- if (nextIn.isInResult()) {
- startLoc = Location.EXTERIOR;
- break
- }
- }
- }
- if (startLoc === Location.NONE) { return null }
- var currLoc = startLoc;
- for (var it$1 = this.iterator(); it$1.hasNext();) {
- var nextOut$1 = it$1.next();
- var nextIn$1 = nextOut$1.getSym();
- if (nextOut$1.isLineEdge()) {
- nextOut$1.getEdge().setCovered(currLoc === Location.INTERIOR);
- } else {
- if (nextOut$1.isInResult()) { currLoc = Location.EXTERIOR; }
- if (nextIn$1.isInResult()) { currLoc = Location.INTERIOR; }
- }
- }
- };
- DirectedEdgeStar.prototype.computeLabelling = function computeLabelling (geom) {
- var this$1 = this;
- EdgeEndStar$$1.prototype.computeLabelling.call(this, geom);
- this._label = new Label(Location.NONE);
- for (var it = this.iterator(); it.hasNext();) {
- var ee = it.next();
- var e = ee.getEdge();
- var eLabel = e.getLabel();
- for (var i = 0; i < 2; i++) {
- var eLoc = eLabel.getLocation(i);
- if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) { this$1._label.setLocation(i, Location.INTERIOR); }
- }
- }
- };
- DirectedEdgeStar.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- DirectedEdgeStar.prototype.getClass = function getClass () {
- return DirectedEdgeStar
- };
- return DirectedEdgeStar;
- }(EdgeEndStar));
- var OverlayNodeFactory = (function (NodeFactory$$1) {
- function OverlayNodeFactory () {
- NodeFactory$$1.apply(this, arguments);
- }
- if ( NodeFactory$$1 ) OverlayNodeFactory.__proto__ = NodeFactory$$1;
- OverlayNodeFactory.prototype = Object.create( NodeFactory$$1 && NodeFactory$$1.prototype );
- OverlayNodeFactory.prototype.constructor = OverlayNodeFactory;
- OverlayNodeFactory.prototype.createNode = function createNode (coord) {
- return new Node(coord, new DirectedEdgeStar())
- };
- OverlayNodeFactory.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OverlayNodeFactory.prototype.getClass = function getClass () {
- return OverlayNodeFactory
- };
- return OverlayNodeFactory;
- }(NodeFactory));
- var OrientedCoordinateArray = function OrientedCoordinateArray () {
- this._pts = null;
- this._orientation = null;
- var pts = arguments[0];
- this._pts = pts;
- this._orientation = OrientedCoordinateArray.orientation(pts);
- };
- OrientedCoordinateArray.prototype.compareTo = function compareTo (o1) {
- var oca = o1;
- var comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);
- return comp
- };
- OrientedCoordinateArray.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- OrientedCoordinateArray.prototype.getClass = function getClass () {
- return OrientedCoordinateArray
- };
- OrientedCoordinateArray.orientation = function orientation (pts) {
- return CoordinateArrays.increasingDirection(pts) === 1
- };
- OrientedCoordinateArray.compareOriented = function compareOriented (pts1, orientation1, pts2, orientation2) {
- var dir1 = orientation1 ? 1 : -1;
- var dir2 = orientation2 ? 1 : -1;
- var limit1 = orientation1 ? pts1.length : -1;
- var limit2 = orientation2 ? pts2.length : -1;
- var i1 = orientation1 ? 0 : pts1.length - 1;
- var i2 = orientation2 ? 0 : pts2.length - 1;
- // const comp = 0
- while (true) {
- var compPt = pts1[i1].compareTo(pts2[i2]);
- if (compPt !== 0) { return compPt }
- i1 += dir1;
- i2 += dir2;
- var done1 = i1 === limit1;
- var done2 = i2 === limit2;
- if (done1 && !done2) { return -1 }
- if (!done1 && done2) { return 1 }
- if (done1 && done2) { return 0 }
- }
- };
- var EdgeList = function EdgeList () {
- this._edges = new ArrayList();
- this._ocaMap = new TreeMap();
- };
- EdgeList.prototype.print = function print (out) {
- var this$1 = this;
- out.print('MULTILINESTRING ( ');
- for (var j = 0; j < this._edges.size(); j++) {
- var e = this$1._edges.get(j);
- if (j > 0) { out.print(','); }
- out.print('(');
- var pts = e.getCoordinates();
- for (var i = 0; i < pts.length; i++) {
- if (i > 0) { out.print(','); }
- out.print(pts[i].x + ' ' + pts[i].y);
- }
- out.println(')');
- }
- out.print(') ');
- };
- EdgeList.prototype.addAll = function addAll (edgeColl) {
- var this$1 = this;
- for (var i = edgeColl.iterator(); i.hasNext();) {
- this$1.add(i.next());
- }
- };
- EdgeList.prototype.findEdgeIndex = function findEdgeIndex (e) {
- var this$1 = this;
- for (var i = 0; i < this._edges.size(); i++) {
- if (this$1._edges.get(i).equals(e)) { return i }
- }
- return -1
- };
- EdgeList.prototype.iterator = function iterator () {
- return this._edges.iterator()
- };
- EdgeList.prototype.getEdges = function getEdges () {
- return this._edges
- };
- EdgeList.prototype.get = function get (i) {
- return this._edges.get(i)
- };
- EdgeList.prototype.findEqualEdge = function findEqualEdge (e) {
- var oca = new OrientedCoordinateArray(e.getCoordinates());
- var matchEdge = this._ocaMap.get(oca);
- return matchEdge
- };
- EdgeList.prototype.add = function add (e) {
- this._edges.add(e);
- var oca = new OrientedCoordinateArray(e.getCoordinates());
- this._ocaMap.put(oca, e);
- };
- EdgeList.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- EdgeList.prototype.getClass = function getClass () {
- return EdgeList
- };
- var SegmentIntersector = function SegmentIntersector () {};
- SegmentIntersector.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {};
- SegmentIntersector.prototype.isDone = function isDone () {};
- SegmentIntersector.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SegmentIntersector.prototype.getClass = function getClass () {
- return SegmentIntersector
- };
- var IntersectionAdder = function IntersectionAdder () {
- this._hasIntersection = false;
- this._hasProper = false;
- this._hasProperInterior = false;
- this._hasInterior = false;
- this._properIntersectionPoint = null;
- this._li = null;
- this._isSelfIntersection = null;
- this.numIntersections = 0;
- this.numInteriorIntersections = 0;
- this.numProperIntersections = 0;
- this.numTests = 0;
- var li = arguments[0];
- this._li = li;
- };
- IntersectionAdder.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
- if (e0 === e1) {
- if (this._li.getIntersectionNum() === 1) {
- if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) { return true }
- if (e0.isClosed()) {
- var maxSegIndex = e0.size() - 1;
- if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
- (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
- return true
- }
- }
- }
- }
- return false
- };
- IntersectionAdder.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
- return this._properIntersectionPoint
- };
- IntersectionAdder.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
- return this._hasProperInterior
- };
- IntersectionAdder.prototype.getLineIntersector = function getLineIntersector () {
- return this._li
- };
- IntersectionAdder.prototype.hasProperIntersection = function hasProperIntersection () {
- return this._hasProper
- };
- IntersectionAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
- if (e0 === e1 && segIndex0 === segIndex1) { return null }
- this.numTests++;
- var p00 = e0.getCoordinates()[segIndex0];
- var p01 = e0.getCoordinates()[segIndex0 + 1];
- var p10 = e1.getCoordinates()[segIndex1];
- var p11 = e1.getCoordinates()[segIndex1 + 1];
- this._li.computeIntersection(p00, p01, p10, p11);
- if (this._li.hasIntersection()) {
- this.numIntersections++;
- if (this._li.isInteriorIntersection()) {
- this.numInteriorIntersections++;
- this._hasInterior = true;
- }
- if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
- this._hasIntersection = true;
- e0.addIntersections(this._li, segIndex0, 0);
- e1.addIntersections(this._li, segIndex1, 1);
- if (this._li.isProper()) {
- this.numProperIntersections++;
- this._hasProper = true;
- this._hasProperInterior = true;
- }
- }
- }
- };
- IntersectionAdder.prototype.hasIntersection = function hasIntersection () {
- return this._hasIntersection
- };
- IntersectionAdder.prototype.isDone = function isDone () {
- return false
- };
- IntersectionAdder.prototype.hasInteriorIntersection = function hasInteriorIntersection () {
- return this._hasInterior
- };
- IntersectionAdder.prototype.interfaces_ = function interfaces_ () {
- return [SegmentIntersector]
- };
- IntersectionAdder.prototype.getClass = function getClass () {
- return IntersectionAdder
- };
- IntersectionAdder.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
- return Math.abs(i1 - i2) === 1
- };
- var EdgeIntersection = function EdgeIntersection () {
- this.coord = null;
- this.segmentIndex = null;
- this.dist = null;
- var coord = arguments[0];
- var segmentIndex = arguments[1];
- var dist = arguments[2];
- this.coord = new Coordinate(coord);
- this.segmentIndex = segmentIndex;
- this.dist = dist;
- };
- EdgeIntersection.prototype.getSegmentIndex = function getSegmentIndex () {
- return this.segmentIndex
- };
- EdgeIntersection.prototype.getCoordinate = function getCoordinate () {
- return this.coord
- };
- EdgeIntersection.prototype.print = function print (out) {
- out.print(this.coord);
- out.print(' seg # = ' + this.segmentIndex);
- out.println(' dist = ' + this.dist);
- };
- EdgeIntersection.prototype.compareTo = function compareTo (obj) {
- var other = obj;
- return this.compare(other.segmentIndex, other.dist)
- };
- EdgeIntersection.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
- if (this.segmentIndex === 0 && this.dist === 0.0) { return true }
- if (this.segmentIndex === maxSegmentIndex) { return true }
- return false
- };
- EdgeIntersection.prototype.toString = function toString () {
- return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist
- };
- EdgeIntersection.prototype.getDistance = function getDistance () {
- return this.dist
- };
- EdgeIntersection.prototype.compare = function compare (segmentIndex, dist) {
- if (this.segmentIndex < segmentIndex) { return -1 }
- if (this.segmentIndex > segmentIndex) { return 1 }
- if (this.dist < dist) { return -1 }
- if (this.dist > dist) { return 1 }
- return 0
- };
- EdgeIntersection.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- EdgeIntersection.prototype.getClass = function getClass () {
- return EdgeIntersection
- };
- var EdgeIntersectionList = function EdgeIntersectionList () {
- this._nodeMap = new TreeMap();
- this.edge = null;
- var edge = arguments[0];
- this.edge = edge;
- };
- EdgeIntersectionList.prototype.print = function print (out) {
- out.println('Intersections:');
- for (var it = this.iterator(); it.hasNext();) {
- var ei = it.next();
- ei.print(out);
- }
- };
- EdgeIntersectionList.prototype.iterator = function iterator () {
- return this._nodeMap.values().iterator()
- };
- EdgeIntersectionList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
- var this$1 = this;
- this.addEndpoints();
- var it = this.iterator();
- var eiPrev = it.next();
- while (it.hasNext()) {
- var ei = it.next();
- var newEdge = this$1.createSplitEdge(eiPrev, ei);
- edgeList.add(newEdge);
- eiPrev = ei;
- }
- };
- EdgeIntersectionList.prototype.addEndpoints = function addEndpoints () {
- var maxSegIndex = this.edge.pts.length - 1;
- this.add(this.edge.pts[0], 0, 0.0);
- this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0);
- };
- EdgeIntersectionList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
- var this$1 = this;
- var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
- var lastSegStartPt = this.edge.pts[ei1.segmentIndex];
- var useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt);
- if (!useIntPt1) {
- npts--;
- }
- var pts = new Array(npts).fill(null);
- var ipt = 0;
- pts[ipt++] = new Coordinate(ei0.coord);
- for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
- pts[ipt++] = this$1.edge.pts[i];
- }
- if (useIntPt1) { pts[ipt] = ei1.coord; }
- return new Edge(pts, new Label(this.edge._label))
- };
- EdgeIntersectionList.prototype.add = function add (intPt, segmentIndex, dist) {
- var eiNew = new EdgeIntersection(intPt, segmentIndex, dist);
- var ei = this._nodeMap.get(eiNew);
- if (ei !== null) {
- return ei
- }
- this._nodeMap.put(eiNew, eiNew);
- return eiNew
- };
- EdgeIntersectionList.prototype.isIntersection = function isIntersection (pt) {
- for (var it = this.iterator(); it.hasNext();) {
- var ei = it.next();
- if (ei.coord.equals(pt)) { return true }
- }
- return false
- };
- EdgeIntersectionList.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- EdgeIntersectionList.prototype.getClass = function getClass () {
- return EdgeIntersectionList
- };
- var MonotoneChainIndexer = function MonotoneChainIndexer () {};
- MonotoneChainIndexer.prototype.getChainStartIndices = function getChainStartIndices (pts) {
- var this$1 = this;
- var start = 0;
- var startIndexList = new ArrayList();
- startIndexList.add(new Integer(start));
- do {
- var last = this$1.findChainEnd(pts, start);
- startIndexList.add(new Integer(last));
- start = last;
- } while (start < pts.length - 1)
- var startIndex = MonotoneChainIndexer.toIntArray(startIndexList);
- return startIndex
- };
- MonotoneChainIndexer.prototype.findChainEnd = function findChainEnd (pts, start) {
- var chainQuad = Quadrant.quadrant(pts[start], pts[start + 1]);
- var last = start + 1;
- while (last < pts.length) {
- var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
- if (quad !== chainQuad) { break }
- last++;
- }
- return last - 1
- };
- MonotoneChainIndexer.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChainIndexer.prototype.getClass = function getClass () {
- return MonotoneChainIndexer
- };
- MonotoneChainIndexer.toIntArray = function toIntArray (list) {
- var array = new Array(list.size()).fill(null);
- for (var i = 0; i < array.length; i++) {
- array[i] = list.get(i).intValue();
- }
- return array
- };
- var MonotoneChainEdge = function MonotoneChainEdge () {
- this.e = null;
- this.pts = null;
- this.startIndex = null;
- this.env1 = new Envelope();
- this.env2 = new Envelope();
- var e = arguments[0];
- this.e = e;
- this.pts = e.getCoordinates();
- var mcb = new MonotoneChainIndexer();
- this.startIndex = mcb.getChainStartIndices(this.pts);
- };
- MonotoneChainEdge.prototype.getCoordinates = function getCoordinates () {
- return this.pts
- };
- MonotoneChainEdge.prototype.getMaxX = function getMaxX (chainIndex) {
- var x1 = this.pts[this.startIndex[chainIndex]].x;
- var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
- return x1 > x2 ? x1 : x2
- };
- MonotoneChainEdge.prototype.getMinX = function getMinX (chainIndex) {
- var x1 = this.pts[this.startIndex[chainIndex]].x;
- var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
- return x1 < x2 ? x1 : x2
- };
- MonotoneChainEdge.prototype.computeIntersectsForChain = function computeIntersectsForChain () {
- if (arguments.length === 4) {
- var chainIndex0 = arguments[0];
- var mce = arguments[1];
- var chainIndex1 = arguments[2];
- var si = arguments[3];
- this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);
- } else if (arguments.length === 6) {
- var start0 = arguments[0];
- var end0 = arguments[1];
- var mce$1 = arguments[2];
- var start1 = arguments[3];
- var end1 = arguments[4];
- var ei = arguments[5];
- var p00 = this.pts[start0];
- var p01 = this.pts[end0];
- var p10 = mce$1.pts[start1];
- var p11 = mce$1.pts[end1];
- if (end0 - start0 === 1 && end1 - start1 === 1) {
- ei.addIntersections(this.e, start0, mce$1.e, start1);
- return null
- }
- this.env1.init(p00, p01);
- this.env2.init(p10, p11);
- if (!this.env1.intersects(this.env2)) { return null }
- var mid0 = Math.trunc((start0 + end0) / 2);
- var mid1 = Math.trunc((start1 + end1) / 2);
- if (start0 < mid0) {
- if (start1 < mid1) { this.computeIntersectsForChain(start0, mid0, mce$1, start1, mid1, ei); }
- if (mid1 < end1) { this.computeIntersectsForChain(start0, mid0, mce$1, mid1, end1, ei); }
- }
- if (mid0 < end0) {
- if (start1 < mid1) { this.computeIntersectsForChain(mid0, end0, mce$1, start1, mid1, ei); }
- if (mid1 < end1) { this.computeIntersectsForChain(mid0, end0, mce$1, mid1, end1, ei); }
- }
- }
- };
- MonotoneChainEdge.prototype.getStartIndexes = function getStartIndexes () {
- return this.startIndex
- };
- MonotoneChainEdge.prototype.computeIntersects = function computeIntersects (mce, si) {
- var this$1 = this;
- for (var i = 0; i < this.startIndex.length - 1; i++) {
- for (var j = 0; j < mce.startIndex.length - 1; j++) {
- this$1.computeIntersectsForChain(i, mce, j, si);
- }
- }
- };
- MonotoneChainEdge.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChainEdge.prototype.getClass = function getClass () {
- return MonotoneChainEdge
- };
- var Depth = function Depth () {
- var this$1 = this;
- this._depth = Array(2).fill().map(function () { return Array(3); });
- for (var i = 0; i < 2; i++) {
- for (var j = 0; j < 3; j++) {
- this$1._depth[i][j] = Depth.NULL_VALUE;
- }
- }
- };
- var staticAccessors$31 = { NULL_VALUE: { configurable: true } };
- Depth.prototype.getDepth = function getDepth (geomIndex, posIndex) {
- return this._depth[geomIndex][posIndex]
- };
- Depth.prototype.setDepth = function setDepth (geomIndex, posIndex, depthValue) {
- this._depth[geomIndex][posIndex] = depthValue;
- };
- Depth.prototype.isNull = function isNull () {
- var this$1 = this;
- if (arguments.length === 0) {
- for (var i = 0; i < 2; i++) {
- for (var j = 0; j < 3; j++) {
- if (this$1._depth[i][j] !== Depth.NULL_VALUE) { return false }
- }
- }
- return true
- } else if (arguments.length === 1) {
- var geomIndex = arguments[0];
- return this._depth[geomIndex][1] === Depth.NULL_VALUE
- } else if (arguments.length === 2) {
- var geomIndex$1 = arguments[0];
- var posIndex = arguments[1];
- return this._depth[geomIndex$1][posIndex] === Depth.NULL_VALUE
- }
- };
- Depth.prototype.normalize = function normalize () {
- var this$1 = this;
- for (var i = 0; i < 2; i++) {
- if (!this$1.isNull(i)) {
- var minDepth = this$1._depth[i][1];
- if (this$1._depth[i][2] < minDepth) { minDepth = this$1._depth[i][2]; }
- if (minDepth < 0) { minDepth = 0; }
- for (var j = 1; j < 3; j++) {
- var newValue = 0;
- if (this$1._depth[i][j] > minDepth) { newValue = 1; }
- this$1._depth[i][j] = newValue;
- }
- }
- }
- };
- Depth.prototype.getDelta = function getDelta (geomIndex) {
- return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]
- };
- Depth.prototype.getLocation = function getLocation (geomIndex, posIndex) {
- if (this._depth[geomIndex][posIndex] <= 0) { return Location.EXTERIOR }
- return Location.INTERIOR
- };
- Depth.prototype.toString = function toString () {
- return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]
- };
- Depth.prototype.add = function add () {
- var this$1 = this;
- if (arguments.length === 1) {
- var lbl = arguments[0];
- for (var i = 0; i < 2; i++) {
- for (var j = 1; j < 3; j++) {
- var loc = lbl.getLocation(i, j);
- if (loc === Location.EXTERIOR || loc === Location.INTERIOR) {
- if (this$1.isNull(i, j)) {
- this$1._depth[i][j] = Depth.depthAtLocation(loc);
- } else { this$1._depth[i][j] += Depth.depthAtLocation(loc); }
- }
- }
- }
- } else if (arguments.length === 3) {
- var geomIndex = arguments[0];
- var posIndex = arguments[1];
- var location = arguments[2];
- if (location === Location.INTERIOR) { this._depth[geomIndex][posIndex]++; }
- }
- };
- Depth.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Depth.prototype.getClass = function getClass () {
- return Depth
- };
- Depth.depthAtLocation = function depthAtLocation (location) {
- if (location === Location.EXTERIOR) { return 0 }
- if (location === Location.INTERIOR) { return 1 }
- return Depth.NULL_VALUE
- };
- staticAccessors$31.NULL_VALUE.get = function () { return -1 };
- Object.defineProperties( Depth, staticAccessors$31 );
- var Edge = (function (GraphComponent$$1) {
- function Edge () {
- GraphComponent$$1.call(this);
- this.pts = null;
- this._env = null;
- this.eiList = new EdgeIntersectionList(this);
- this._name = null;
- this._mce = null;
- this._isIsolated = true;
- this._depth = new Depth();
- this._depthDelta = 0;
- if (arguments.length === 1) {
- var pts = arguments[0];
- Edge.call(this, pts, null);
- } else if (arguments.length === 2) {
- var pts$1 = arguments[0];
- var label = arguments[1];
- this.pts = pts$1;
- this._label = label;
- }
- }
- if ( GraphComponent$$1 ) Edge.__proto__ = GraphComponent$$1;
- Edge.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
- Edge.prototype.constructor = Edge;
- Edge.prototype.getDepth = function getDepth () {
- return this._depth
- };
- Edge.prototype.getCollapsedEdge = function getCollapsedEdge () {
- var newPts = new Array(2).fill(null);
- newPts[0] = this.pts[0];
- newPts[1] = this.pts[1];
- var newe = new Edge(newPts, Label.toLineLabel(this._label));
- return newe
- };
- Edge.prototype.isIsolated = function isIsolated () {
- return this._isIsolated
- };
- Edge.prototype.getCoordinates = function getCoordinates () {
- return this.pts
- };
- Edge.prototype.setIsolated = function setIsolated (isIsolated) {
- this._isIsolated = isIsolated;
- };
- Edge.prototype.setName = function setName (name) {
- this._name = name;
- };
- Edge.prototype.equals = function equals (o) {
- var this$1 = this;
- if (!(o instanceof Edge)) { return false }
- var e = o;
- if (this.pts.length !== e.pts.length) { return false }
- var isEqualForward = true;
- var isEqualReverse = true;
- var iRev = this.pts.length;
- for (var i = 0; i < this.pts.length; i++) {
- if (!this$1.pts[i].equals2D(e.pts[i])) {
- isEqualForward = false;
- }
- if (!this$1.pts[i].equals2D(e.pts[--iRev])) {
- isEqualReverse = false;
- }
- if (!isEqualForward && !isEqualReverse) { return false }
- }
- return true
- };
- Edge.prototype.getCoordinate = function getCoordinate () {
- if (arguments.length === 0) {
- if (this.pts.length > 0) { return this.pts[0] }
- return null
- } else if (arguments.length === 1) {
- var i = arguments[0];
- return this.pts[i]
- }
- };
- Edge.prototype.print = function print (out) {
- var this$1 = this;
- out.print('edge ' + this._name + ': ');
- out.print('LINESTRING (');
- for (var i = 0; i < this.pts.length; i++) {
- if (i > 0) { out.print(','); }
- out.print(this$1.pts[i].x + ' ' + this$1.pts[i].y);
- }
- out.print(') ' + this._label + ' ' + this._depthDelta);
- };
- Edge.prototype.computeIM = function computeIM (im) {
- Edge.updateIM(this._label, im);
- };
- Edge.prototype.isCollapsed = function isCollapsed () {
- if (!this._label.isArea()) { return false }
- if (this.pts.length !== 3) { return false }
- if (this.pts[0].equals(this.pts[2])) { return true }
- return false
- };
- Edge.prototype.isClosed = function isClosed () {
- return this.pts[0].equals(this.pts[this.pts.length - 1])
- };
- Edge.prototype.getMaximumSegmentIndex = function getMaximumSegmentIndex () {
- return this.pts.length - 1
- };
- Edge.prototype.getDepthDelta = function getDepthDelta () {
- return this._depthDelta
- };
- Edge.prototype.getNumPoints = function getNumPoints () {
- return this.pts.length
- };
- Edge.prototype.printReverse = function printReverse (out) {
- var this$1 = this;
- out.print('edge ' + this._name + ': ');
- for (var i = this.pts.length - 1; i >= 0; i--) {
- out.print(this$1.pts[i] + ' ');
- }
- out.println('');
- };
- Edge.prototype.getMonotoneChainEdge = function getMonotoneChainEdge () {
- if (this._mce === null) { this._mce = new MonotoneChainEdge(this); }
- return this._mce
- };
- Edge.prototype.getEnvelope = function getEnvelope () {
- var this$1 = this;
- if (this._env === null) {
- this._env = new Envelope();
- for (var i = 0; i < this.pts.length; i++) {
- this$1._env.expandToInclude(this$1.pts[i]);
- }
- }
- return this._env
- };
- Edge.prototype.addIntersection = function addIntersection (li, segmentIndex, geomIndex, intIndex) {
- var intPt = new Coordinate(li.getIntersection(intIndex));
- var normalizedSegmentIndex = segmentIndex;
- var dist = li.getEdgeDistance(geomIndex, intIndex);
- var nextSegIndex = normalizedSegmentIndex + 1;
- if (nextSegIndex < this.pts.length) {
- var nextPt = this.pts[nextSegIndex];
- if (intPt.equals2D(nextPt)) {
- normalizedSegmentIndex = nextSegIndex;
- dist = 0.0;
- }
- }
- this.eiList.add(intPt, normalizedSegmentIndex, dist);
- };
- Edge.prototype.toString = function toString () {
- var this$1 = this;
- var buf = new StringBuffer();
- buf.append('edge ' + this._name + ': ');
- buf.append('LINESTRING (');
- for (var i = 0; i < this.pts.length; i++) {
- if (i > 0) { buf.append(','); }
- buf.append(this$1.pts[i].x + ' ' + this$1.pts[i].y);
- }
- buf.append(') ' + this._label + ' ' + this._depthDelta);
- return buf.toString()
- };
- Edge.prototype.isPointwiseEqual = function isPointwiseEqual (e) {
- var this$1 = this;
- if (this.pts.length !== e.pts.length) { return false }
- for (var i = 0; i < this.pts.length; i++) {
- if (!this$1.pts[i].equals2D(e.pts[i])) {
- return false
- }
- }
- return true
- };
- Edge.prototype.setDepthDelta = function setDepthDelta (depthDelta) {
- this._depthDelta = depthDelta;
- };
- Edge.prototype.getEdgeIntersectionList = function getEdgeIntersectionList () {
- return this.eiList
- };
- Edge.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
- var this$1 = this;
- for (var i = 0; i < li.getIntersectionNum(); i++) {
- this$1.addIntersection(li, segmentIndex, geomIndex, i);
- }
- };
- Edge.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- Edge.prototype.getClass = function getClass () {
- return Edge
- };
- Edge.updateIM = function updateIM () {
- if (arguments.length === 2) {
- var label = arguments[0];
- var im = arguments[1];
- im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1);
- if (label.isArea()) {
- im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2);
- im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2);
- }
- } else { return GraphComponent$$1.prototype.updateIM.apply(this, arguments) }
- };
- return Edge;
- }(GraphComponent));
- var BufferBuilder = function BufferBuilder (bufParams) {
- this._workingPrecisionModel = null;
- this._workingNoder = null;
- this._geomFact = null;
- this._graph = null;
- this._edgeList = new EdgeList();
- this._bufParams = bufParams || null;
- };
- BufferBuilder.prototype.setWorkingPrecisionModel = function setWorkingPrecisionModel (pm) {
- this._workingPrecisionModel = pm;
- };
- BufferBuilder.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
- var existingEdge = this._edgeList.findEqualEdge(e);
- if (existingEdge !== null) {
- var existingLabel = existingEdge.getLabel();
- var labelToMerge = e.getLabel();
- if (!existingEdge.isPointwiseEqual(e)) {
- labelToMerge = new Label(e.getLabel());
- labelToMerge.flip();
- }
- existingLabel.merge(labelToMerge);
- var mergeDelta = BufferBuilder.depthDelta(labelToMerge);
- var existingDelta = existingEdge.getDepthDelta();
- var newDelta = existingDelta + mergeDelta;
- existingEdge.setDepthDelta(newDelta);
- } else {
- this._edgeList.add(e);
- e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));
- }
- };
- BufferBuilder.prototype.buildSubgraphs = function buildSubgraphs (subgraphList, polyBuilder) {
- var processedGraphs = new ArrayList();
- for (var i = subgraphList.iterator(); i.hasNext();) {
- var subgraph = i.next();
- var p = subgraph.getRightmostCoordinate();
- var locater = new SubgraphDepthLocater(processedGraphs);
- var outsideDepth = locater.getDepth(p);
- subgraph.computeDepth(outsideDepth);
- subgraph.findResultEdges();
- processedGraphs.add(subgraph);
- polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());
- }
- };
- BufferBuilder.prototype.createSubgraphs = function createSubgraphs (graph) {
- var subgraphList = new ArrayList();
- for (var i = graph.getNodes().iterator(); i.hasNext();) {
- var node = i.next();
- if (!node.isVisited()) {
- var subgraph = new BufferSubgraph();
- subgraph.create(node);
- subgraphList.add(subgraph);
- }
- }
- Collections.sort(subgraphList, Collections.reverseOrder());
- return subgraphList
- };
- BufferBuilder.prototype.createEmptyResultGeometry = function createEmptyResultGeometry () {
- var emptyGeom = this._geomFact.createPolygon();
- return emptyGeom
- };
- BufferBuilder.prototype.getNoder = function getNoder (precisionModel) {
- if (this._workingNoder !== null) { return this._workingNoder }
- var noder = new MCIndexNoder();
- var li = new RobustLineIntersector();
- li.setPrecisionModel(precisionModel);
- noder.setSegmentIntersector(new IntersectionAdder(li));
- return noder
- };
- BufferBuilder.prototype.buffer = function buffer (g, distance) {
- var precisionModel = this._workingPrecisionModel;
- if (precisionModel === null) { precisionModel = g.getPrecisionModel(); }
- this._geomFact = g.getFactory();
- var curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);
- var curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);
- var bufferSegStrList = curveSetBuilder.getCurves();
- if (bufferSegStrList.size() <= 0) {
- return this.createEmptyResultGeometry()
- }
- this.computeNodedEdges(bufferSegStrList, precisionModel);
- this._graph = new PlanarGraph(new OverlayNodeFactory());
- this._graph.addEdges(this._edgeList.getEdges());
- var subgraphList = this.createSubgraphs(this._graph);
- var polyBuilder = new PolygonBuilder(this._geomFact);
- this.buildSubgraphs(subgraphList, polyBuilder);
- var resultPolyList = polyBuilder.getPolygons();
- if (resultPolyList.size() <= 0) {
- return this.createEmptyResultGeometry()
- }
- var resultGeom = this._geomFact.buildGeometry(resultPolyList);
- return resultGeom
- };
- BufferBuilder.prototype.computeNodedEdges = function computeNodedEdges (bufferSegStrList, precisionModel) {
- var this$1 = this;
- var noder = this.getNoder(precisionModel);
- noder.computeNodes(bufferSegStrList);
- var nodedSegStrings = noder.getNodedSubstrings();
- for (var i = nodedSegStrings.iterator(); i.hasNext();) {
- var segStr = i.next();
- var pts = segStr.getCoordinates();
- if (pts.length === 2 && pts[0].equals2D(pts[1])) { continue }
- var oldLabel = segStr.getData();
- var edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));
- this$1.insertUniqueEdge(edge);
- }
- };
- BufferBuilder.prototype.setNoder = function setNoder (noder) {
- this._workingNoder = noder;
- };
- BufferBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferBuilder.prototype.getClass = function getClass () {
- return BufferBuilder
- };
- BufferBuilder.depthDelta = function depthDelta (label) {
- var lLoc = label.getLocation(0, Position.LEFT);
- var rLoc = label.getLocation(0, Position.RIGHT);
- if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) { return 1; } else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) { return -1 }
- return 0
- };
- BufferBuilder.convertSegStrings = function convertSegStrings (it) {
- var fact = new GeometryFactory();
- var lines = new ArrayList();
- while (it.hasNext()) {
- var ss = it.next();
- var line = fact.createLineString(ss.getCoordinates());
- lines.add(line);
- }
- return fact.buildGeometry(lines)
- };
- var ScaledNoder = function ScaledNoder () {
- this._noder = null;
- this._scaleFactor = null;
- this._offsetX = null;
- this._offsetY = null;
- this._isScaled = false;
- if (arguments.length === 2) {
- var noder = arguments[0];
- var scaleFactor = arguments[1];
- this._noder = noder;
- this._scaleFactor = scaleFactor;
- this._offsetX = 0.0;
- this._offsetY = 0.0;
- this._isScaled = !this.isIntegerPrecision();
- } else if (arguments.length === 4) {
- var noder$1 = arguments[0];
- var scaleFactor$1 = arguments[1];
- var offsetX = arguments[2];
- var offsetY = arguments[3];
- this._noder = noder$1;
- this._scaleFactor = scaleFactor$1;
- this._offsetX = offsetX;
- this._offsetY = offsetY;
- this._isScaled = !this.isIntegerPrecision();
- }
- };
- ScaledNoder.prototype.rescale = function rescale () {
- var this$1 = this;
- if (hasInterface(arguments[0], Collection)) {
- var segStrings = arguments[0];
- for (var i = segStrings.iterator(); i.hasNext();) {
- var ss = i.next();
- this$1.rescale(ss.getCoordinates());
- }
- } else if (arguments[0] instanceof Array) {
- var pts = arguments[0];
- // let p0 = null
- // let p1 = null
- // if (pts.length === 2) {
- // p0 = new Coordinate(pts[0])
- // p1 = new Coordinate(pts[1])
- // }
- for (var i$1 = 0; i$1 < pts.length; i$1++) {
- pts[i$1].x = pts[i$1].x / this$1._scaleFactor + this$1._offsetX;
- pts[i$1].y = pts[i$1].y / this$1._scaleFactor + this$1._offsetY;
- }
- if (pts.length === 2 && pts[0].equals2D(pts[1])) {
- System.out.println(pts);
- }
- }
- };
- ScaledNoder.prototype.scale = function scale () {
- var this$1 = this;
- if (hasInterface(arguments[0], Collection)) {
- var segStrings = arguments[0];
- var nodedSegmentStrings = new ArrayList();
- for (var i = segStrings.iterator(); i.hasNext();) {
- var ss = i.next();
- nodedSegmentStrings.add(new NodedSegmentString(this$1.scale(ss.getCoordinates()), ss.getData()));
- }
- return nodedSegmentStrings
- } else if (arguments[0] instanceof Array) {
- var pts = arguments[0];
- var roundPts = new Array(pts.length).fill(null);
- for (var i$1 = 0; i$1 < pts.length; i$1++) {
- roundPts[i$1] = new Coordinate(Math.round((pts[i$1].x - this$1._offsetX) * this$1._scaleFactor), Math.round((pts[i$1].y - this$1._offsetY) * this$1._scaleFactor), pts[i$1].z);
- }
- var roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);
- return roundPtsNoDup
- }
- };
- ScaledNoder.prototype.isIntegerPrecision = function isIntegerPrecision () {
- return this._scaleFactor === 1.0
- };
- ScaledNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
- var splitSS = this._noder.getNodedSubstrings();
- if (this._isScaled) { this.rescale(splitSS); }
- return splitSS
- };
- ScaledNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
- var intSegStrings = inputSegStrings;
- if (this._isScaled) { intSegStrings = this.scale(inputSegStrings); }
- this._noder.computeNodes(intSegStrings);
- };
- ScaledNoder.prototype.interfaces_ = function interfaces_ () {
- return [Noder]
- };
- ScaledNoder.prototype.getClass = function getClass () {
- return ScaledNoder
- };
- var NodingValidator = function NodingValidator () {
- this._li = new RobustLineIntersector();
- this._segStrings = null;
- var segStrings = arguments[0];
- this._segStrings = segStrings;
- };
- var staticAccessors$33 = { fact: { configurable: true } };
- NodingValidator.prototype.checkEndPtVertexIntersections = function checkEndPtVertexIntersections () {
- var this$1 = this;
- if (arguments.length === 0) {
- for (var i = this._segStrings.iterator(); i.hasNext();) {
- var ss = i.next();
- var pts = ss.getCoordinates();
- this$1.checkEndPtVertexIntersections(pts[0], this$1._segStrings);
- this$1.checkEndPtVertexIntersections(pts[pts.length - 1], this$1._segStrings);
- }
- } else if (arguments.length === 2) {
- var testPt = arguments[0];
- var segStrings = arguments[1];
- for (var i$1 = segStrings.iterator(); i$1.hasNext();) {
- var ss$1 = i$1.next();
- var pts$1 = ss$1.getCoordinates();
- for (var j = 1; j < pts$1.length - 1; j++) {
- if (pts$1[j].equals(testPt)) { throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt) }
- }
- }
- }
- };
- NodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
- var this$1 = this;
- if (arguments.length === 0) {
- for (var i = this._segStrings.iterator(); i.hasNext();) {
- var ss0 = i.next();
- for (var j = this._segStrings.iterator(); j.hasNext();) {
- var ss1 = j.next();
- this$1.checkInteriorIntersections(ss0, ss1);
- }
- }
- } else if (arguments.length === 2) {
- var ss0$1 = arguments[0];
- var ss1$1 = arguments[1];
- var pts0 = ss0$1.getCoordinates();
- var pts1 = ss1$1.getCoordinates();
- for (var i0 = 0; i0 < pts0.length - 1; i0++) {
- for (var i1 = 0; i1 < pts1.length - 1; i1++) {
- this$1.checkInteriorIntersections(ss0$1, i0, ss1$1, i1);
- }
- }
- } else if (arguments.length === 4) {
- var e0 = arguments[0];
- var segIndex0 = arguments[1];
- var e1 = arguments[2];
- var segIndex1 = arguments[3];
- if (e0 === e1 && segIndex0 === segIndex1) { return null }
- var p00 = e0.getCoordinates()[segIndex0];
- var p01 = e0.getCoordinates()[segIndex0 + 1];
- var p10 = e1.getCoordinates()[segIndex1];
- var p11 = e1.getCoordinates()[segIndex1 + 1];
- this._li.computeIntersection(p00, p01, p10, p11);
- if (this._li.hasIntersection()) {
- if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {
- throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)
- }
- }
- }
- };
- NodingValidator.prototype.checkValid = function checkValid () {
- this.checkEndPtVertexIntersections();
- this.checkInteriorIntersections();
- this.checkCollapses();
- };
- NodingValidator.prototype.checkCollapses = function checkCollapses () {
- var this$1 = this;
- if (arguments.length === 0) {
- for (var i = this._segStrings.iterator(); i.hasNext();) {
- var ss = i.next();
- this$1.checkCollapses(ss);
- }
- } else if (arguments.length === 1) {
- var ss$1 = arguments[0];
- var pts = ss$1.getCoordinates();
- for (var i$1 = 0; i$1 < pts.length - 2; i$1++) {
- this$1.checkCollapse(pts[i$1], pts[i$1 + 1], pts[i$1 + 2]);
- }
- }
- };
- NodingValidator.prototype.hasInteriorIntersection = function hasInteriorIntersection (li, p0, p1) {
- for (var i = 0; i < li.getIntersectionNum(); i++) {
- var intPt = li.getIntersection(i);
- if (!(intPt.equals(p0) || intPt.equals(p1))) { return true }
- }
- return false
- };
- NodingValidator.prototype.checkCollapse = function checkCollapse (p0, p1, p2) {
- if (p0.equals(p2)) { throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2])) }
- };
- NodingValidator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- NodingValidator.prototype.getClass = function getClass () {
- return NodingValidator
- };
- staticAccessors$33.fact.get = function () { return new GeometryFactory() };
- Object.defineProperties( NodingValidator, staticAccessors$33 );
- var HotPixel = function HotPixel () {
- this._li = null;
- this._pt = null;
- this._originalPt = null;
- this._ptScaled = null;
- this._p0Scaled = null;
- this._p1Scaled = null;
- this._scaleFactor = null;
- this._minx = null;
- this._maxx = null;
- this._miny = null;
- this._maxy = null;
- this._corner = new Array(4).fill(null);
- this._safeEnv = null;
- var pt = arguments[0];
- var scaleFactor = arguments[1];
- var li = arguments[2];
- this._originalPt = pt;
- this._pt = pt;
- this._scaleFactor = scaleFactor;
- this._li = li;
- if (scaleFactor <= 0) { throw new IllegalArgumentException('Scale factor must be non-zero') }
- if (scaleFactor !== 1.0) {
- this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));
- this._p0Scaled = new Coordinate();
- this._p1Scaled = new Coordinate();
- }
- this.initCorners(this._pt);
- };
- var staticAccessors$34 = { SAFE_ENV_EXPANSION_FACTOR: { configurable: true } };
- HotPixel.prototype.intersectsScaled = function intersectsScaled (p0, p1) {
- var segMinx = Math.min(p0.x, p1.x);
- var segMaxx = Math.max(p0.x, p1.x);
- var segMiny = Math.min(p0.y, p1.y);
- var segMaxy = Math.max(p0.y, p1.y);
- var isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;
- if (isOutsidePixelEnv) { return false }
- var intersects = this.intersectsToleranceSquare(p0, p1);
- Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test');
- return intersects
- };
- HotPixel.prototype.initCorners = function initCorners (pt) {
- var tolerance = 0.5;
- this._minx = pt.x - tolerance;
- this._maxx = pt.x + tolerance;
- this._miny = pt.y - tolerance;
- this._maxy = pt.y + tolerance;
- this._corner[0] = new Coordinate(this._maxx, this._maxy);
- this._corner[1] = new Coordinate(this._minx, this._maxy);
- this._corner[2] = new Coordinate(this._minx, this._miny);
- this._corner[3] = new Coordinate(this._maxx, this._miny);
- };
- HotPixel.prototype.intersects = function intersects (p0, p1) {
- if (this._scaleFactor === 1.0) { return this.intersectsScaled(p0, p1) }
- this.copyScaled(p0, this._p0Scaled);
- this.copyScaled(p1, this._p1Scaled);
- return this.intersectsScaled(this._p0Scaled, this._p1Scaled)
- };
- HotPixel.prototype.scale = function scale (val) {
- return Math.round(val * this._scaleFactor)
- };
- HotPixel.prototype.getCoordinate = function getCoordinate () {
- return this._originalPt
- };
- HotPixel.prototype.copyScaled = function copyScaled (p, pScaled) {
- pScaled.x = this.scale(p.x);
- pScaled.y = this.scale(p.y);
- };
- HotPixel.prototype.getSafeEnvelope = function getSafeEnvelope () {
- if (this._safeEnv === null) {
- var safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;
- this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);
- }
- return this._safeEnv
- };
- HotPixel.prototype.intersectsPixelClosure = function intersectsPixelClosure (p0, p1) {
- this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
- if (this._li.hasIntersection()) { return true }
- this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
- if (this._li.hasIntersection()) { return true }
- this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
- if (this._li.hasIntersection()) { return true }
- this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
- if (this._li.hasIntersection()) { return true }
- return false
- };
- HotPixel.prototype.intersectsToleranceSquare = function intersectsToleranceSquare (p0, p1) {
- var intersectsLeft = false;
- var intersectsBottom = false;
- this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
- if (this._li.isProper()) { return true }
- this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
- if (this._li.isProper()) { return true }
- if (this._li.hasIntersection()) { intersectsLeft = true; }
- this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
- if (this._li.isProper()) { return true }
- if (this._li.hasIntersection()) { intersectsBottom = true; }
- this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
- if (this._li.isProper()) { return true }
- if (intersectsLeft && intersectsBottom) { return true }
- if (p0.equals(this._pt)) { return true }
- if (p1.equals(this._pt)) { return true }
- return false
- };
- HotPixel.prototype.addSnappedNode = function addSnappedNode (segStr, segIndex) {
- var p0 = segStr.getCoordinate(segIndex);
- var p1 = segStr.getCoordinate(segIndex + 1);
- if (this.intersects(p0, p1)) {
- segStr.addIntersection(this.getCoordinate(), segIndex);
- return true
- }
- return false
- };
- HotPixel.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- HotPixel.prototype.getClass = function getClass () {
- return HotPixel
- };
- staticAccessors$34.SAFE_ENV_EXPANSION_FACTOR.get = function () { return 0.75 };
- Object.defineProperties( HotPixel, staticAccessors$34 );
- var MonotoneChainSelectAction = function MonotoneChainSelectAction () {
- this.tempEnv1 = new Envelope();
- this.selectedSegment = new LineSegment();
- };
- MonotoneChainSelectAction.prototype.select = function select () {
- if (arguments.length === 1) {
- // const seg = arguments[0]
- } else if (arguments.length === 2) {
- var mc = arguments[0];
- var startIndex = arguments[1];
- mc.getLineSegment(startIndex, this.selectedSegment);
- this.select(this.selectedSegment);
- }
- };
- MonotoneChainSelectAction.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChainSelectAction.prototype.getClass = function getClass () {
- return MonotoneChainSelectAction
- };
- var MCIndexPointSnapper = function MCIndexPointSnapper () {
- this._index = null;
- var index = arguments[0];
- this._index = index;
- };
- var staticAccessors$35 = { HotPixelSnapAction: { configurable: true } };
- MCIndexPointSnapper.prototype.snap = function snap () {
- if (arguments.length === 1) {
- var hotPixel = arguments[0];
- return this.snap(hotPixel, null, -1)
- } else if (arguments.length === 3) {
- var hotPixel$1 = arguments[0];
- var parentEdge = arguments[1];
- var hotPixelVertexIndex = arguments[2];
- var pixelEnv = hotPixel$1.getSafeEnvelope();
- var hotPixelSnapAction = new HotPixelSnapAction(hotPixel$1, parentEdge, hotPixelVertexIndex);
- this._index.query(pixelEnv, {
- interfaces_: function () {
- return [ItemVisitor]
- },
- visitItem: function (item) {
- var testChain = item;
- testChain.select(pixelEnv, hotPixelSnapAction);
- }
- });
- return hotPixelSnapAction.isNodeAdded()
- }
- };
- MCIndexPointSnapper.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MCIndexPointSnapper.prototype.getClass = function getClass () {
- return MCIndexPointSnapper
- };
- staticAccessors$35.HotPixelSnapAction.get = function () { return HotPixelSnapAction };
- Object.defineProperties( MCIndexPointSnapper, staticAccessors$35 );
- var HotPixelSnapAction = (function (MonotoneChainSelectAction$$1) {
- function HotPixelSnapAction () {
- MonotoneChainSelectAction$$1.call(this);
- this._hotPixel = null;
- this._parentEdge = null;
- this._hotPixelVertexIndex = null;
- this._isNodeAdded = false;
- var hotPixel = arguments[0];
- var parentEdge = arguments[1];
- var hotPixelVertexIndex = arguments[2];
- this._hotPixel = hotPixel;
- this._parentEdge = parentEdge;
- this._hotPixelVertexIndex = hotPixelVertexIndex;
- }
- if ( MonotoneChainSelectAction$$1 ) HotPixelSnapAction.__proto__ = MonotoneChainSelectAction$$1;
- HotPixelSnapAction.prototype = Object.create( MonotoneChainSelectAction$$1 && MonotoneChainSelectAction$$1.prototype );
- HotPixelSnapAction.prototype.constructor = HotPixelSnapAction;
- HotPixelSnapAction.prototype.isNodeAdded = function isNodeAdded () {
- return this._isNodeAdded
- };
- HotPixelSnapAction.prototype.select = function select () {
- if (arguments.length === 2) {
- var mc = arguments[0];
- var startIndex = arguments[1];
- var ss = mc.getContext();
- if (this._parentEdge !== null) {
- if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) { return null }
- }
- this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);
- } else { return MonotoneChainSelectAction$$1.prototype.select.apply(this, arguments) }
- };
- HotPixelSnapAction.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- HotPixelSnapAction.prototype.getClass = function getClass () {
- return HotPixelSnapAction
- };
- return HotPixelSnapAction;
- }(MonotoneChainSelectAction));
- var InteriorIntersectionFinderAdder = function InteriorIntersectionFinderAdder () {
- this._li = null;
- this._interiorIntersections = null;
- var li = arguments[0];
- this._li = li;
- this._interiorIntersections = new ArrayList();
- };
- InteriorIntersectionFinderAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
- var this$1 = this;
- if (e0 === e1 && segIndex0 === segIndex1) { return null }
- var p00 = e0.getCoordinates()[segIndex0];
- var p01 = e0.getCoordinates()[segIndex0 + 1];
- var p10 = e1.getCoordinates()[segIndex1];
- var p11 = e1.getCoordinates()[segIndex1 + 1];
- this._li.computeIntersection(p00, p01, p10, p11);
- if (this._li.hasIntersection()) {
- if (this._li.isInteriorIntersection()) {
- for (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {
- this$1._interiorIntersections.add(this$1._li.getIntersection(intIndex));
- }
- e0.addIntersections(this._li, segIndex0, 0);
- e1.addIntersections(this._li, segIndex1, 1);
- }
- }
- };
- InteriorIntersectionFinderAdder.prototype.isDone = function isDone () {
- return false
- };
- InteriorIntersectionFinderAdder.prototype.getInteriorIntersections = function getInteriorIntersections () {
- return this._interiorIntersections
- };
- InteriorIntersectionFinderAdder.prototype.interfaces_ = function interfaces_ () {
- return [SegmentIntersector]
- };
- InteriorIntersectionFinderAdder.prototype.getClass = function getClass () {
- return InteriorIntersectionFinderAdder
- };
- var MCIndexSnapRounder = function MCIndexSnapRounder () {
- this._pm = null;
- this._li = null;
- this._scaleFactor = null;
- this._noder = null;
- this._pointSnapper = null;
- this._nodedSegStrings = null;
- var pm = arguments[0];
- this._pm = pm;
- this._li = new RobustLineIntersector();
- this._li.setPrecisionModel(pm);
- this._scaleFactor = pm.getScale();
- };
- MCIndexSnapRounder.prototype.checkCorrectness = function checkCorrectness (inputSegmentStrings) {
- var resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);
- var nv = new NodingValidator(resultSegStrings);
- try {
- nv.checkValid();
- } catch (ex) {
- if (ex instanceof Exception) {
- ex.printStackTrace();
- } else { throw ex }
- } finally {}
- };
- MCIndexSnapRounder.prototype.getNodedSubstrings = function getNodedSubstrings () {
- return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
- };
- MCIndexSnapRounder.prototype.snapRound = function snapRound (segStrings, li) {
- var intersections = this.findInteriorIntersections(segStrings, li);
- this.computeIntersectionSnaps(intersections);
- this.computeVertexSnaps(segStrings);
- };
- MCIndexSnapRounder.prototype.findInteriorIntersections = function findInteriorIntersections (segStrings, li) {
- var intFinderAdder = new InteriorIntersectionFinderAdder(li);
- this._noder.setSegmentIntersector(intFinderAdder);
- this._noder.computeNodes(segStrings);
- return intFinderAdder.getInteriorIntersections()
- };
- MCIndexSnapRounder.prototype.computeVertexSnaps = function computeVertexSnaps () {
- var this$1 = this;
- if (hasInterface(arguments[0], Collection)) {
- var edges = arguments[0];
- for (var i0 = edges.iterator(); i0.hasNext();) {
- var edge0 = i0.next();
- this$1.computeVertexSnaps(edge0);
- }
- } else if (arguments[0] instanceof NodedSegmentString) {
- var e = arguments[0];
- var pts0 = e.getCoordinates();
- for (var i = 0; i < pts0.length; i++) {
- var hotPixel = new HotPixel(pts0[i], this$1._scaleFactor, this$1._li);
- var isNodeAdded = this$1._pointSnapper.snap(hotPixel, e, i);
- if (isNodeAdded) {
- e.addIntersection(pts0[i], i);
- }
- }
- }
- };
- MCIndexSnapRounder.prototype.computeNodes = function computeNodes (inputSegmentStrings) {
- this._nodedSegStrings = inputSegmentStrings;
- this._noder = new MCIndexNoder();
- this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());
- this.snapRound(inputSegmentStrings, this._li);
- };
- MCIndexSnapRounder.prototype.computeIntersectionSnaps = function computeIntersectionSnaps (snapPts) {
- var this$1 = this;
- for (var it = snapPts.iterator(); it.hasNext();) {
- var snapPt = it.next();
- var hotPixel = new HotPixel(snapPt, this$1._scaleFactor, this$1._li);
- this$1._pointSnapper.snap(hotPixel);
- }
- };
- MCIndexSnapRounder.prototype.interfaces_ = function interfaces_ () {
- return [Noder]
- };
- MCIndexSnapRounder.prototype.getClass = function getClass () {
- return MCIndexSnapRounder
- };
- var BufferOp = function BufferOp () {
- this._argGeom = null;
- this._distance = null;
- this._bufParams = new BufferParameters();
- this._resultGeometry = null;
- this._saveException = null;
- if (arguments.length === 1) {
- var g = arguments[0];
- this._argGeom = g;
- } else if (arguments.length === 2) {
- var g$1 = arguments[0];
- var bufParams = arguments[1];
- this._argGeom = g$1;
- this._bufParams = bufParams;
- }
- };
- var staticAccessors$32 = { CAP_ROUND: { configurable: true },CAP_BUTT: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },MAX_PRECISION_DIGITS: { configurable: true } };
- BufferOp.prototype.bufferFixedPrecision = function bufferFixedPrecision (fixedPM) {
- var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());
- var bufBuilder = new BufferBuilder(this._bufParams);
- bufBuilder.setWorkingPrecisionModel(fixedPM);
- bufBuilder.setNoder(noder);
- this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
- };
- BufferOp.prototype.bufferReducedPrecision = function bufferReducedPrecision () {
- var this$1 = this;
- if (arguments.length === 0) {
- for (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {
- try {
- this$1.bufferReducedPrecision(precDigits);
- } catch (ex) {
- if (ex instanceof TopologyException) {
- this$1._saveException = ex;
- } else { throw ex }
- } finally {}
- if (this$1._resultGeometry !== null) { return null }
- }
- throw this._saveException
- } else if (arguments.length === 1) {
- var precisionDigits = arguments[0];
- var sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);
- var fixedPM = new PrecisionModel(sizeBasedScaleFactor);
- this.bufferFixedPrecision(fixedPM);
- }
- };
- BufferOp.prototype.computeGeometry = function computeGeometry () {
- this.bufferOriginalPrecision();
- if (this._resultGeometry !== null) { return null }
- var argPM = this._argGeom.getFactory().getPrecisionModel();
- if (argPM.getType() === PrecisionModel.FIXED) { this.bufferFixedPrecision(argPM); } else { this.bufferReducedPrecision(); }
- };
- BufferOp.prototype.setQuadrantSegments = function setQuadrantSegments (quadrantSegments) {
- this._bufParams.setQuadrantSegments(quadrantSegments);
- };
- BufferOp.prototype.bufferOriginalPrecision = function bufferOriginalPrecision () {
- try {
- var bufBuilder = new BufferBuilder(this._bufParams);
- this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
- } catch (ex) {
- if (ex instanceof RuntimeException) {
- this._saveException = ex;
- } else { throw ex }
- } finally {}
- };
- BufferOp.prototype.getResultGeometry = function getResultGeometry (distance) {
- this._distance = distance;
- this.computeGeometry();
- return this._resultGeometry
- };
- BufferOp.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
- this._bufParams.setEndCapStyle(endCapStyle);
- };
- BufferOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferOp.prototype.getClass = function getClass () {
- return BufferOp
- };
- BufferOp.bufferOp = function bufferOp () {
- if (arguments.length === 2) {
- var g = arguments[0];
- var distance = arguments[1];
- var gBuf = new BufferOp(g);
- var geomBuf = gBuf.getResultGeometry(distance);
- return geomBuf
- } else if (arguments.length === 3) {
- if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
- var g$1 = arguments[0];
- var distance$1 = arguments[1];
- var quadrantSegments = arguments[2];
- var bufOp = new BufferOp(g$1);
- bufOp.setQuadrantSegments(quadrantSegments);
- var geomBuf$1 = bufOp.getResultGeometry(distance$1);
- return geomBuf$1
- } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
- var g$2 = arguments[0];
- var distance$2 = arguments[1];
- var params = arguments[2];
- var bufOp$1 = new BufferOp(g$2, params);
- var geomBuf$2 = bufOp$1.getResultGeometry(distance$2);
- return geomBuf$2
- }
- } else if (arguments.length === 4) {
- var g$3 = arguments[0];
- var distance$3 = arguments[1];
- var quadrantSegments$1 = arguments[2];
- var endCapStyle = arguments[3];
- var bufOp$2 = new BufferOp(g$3);
- bufOp$2.setQuadrantSegments(quadrantSegments$1);
- bufOp$2.setEndCapStyle(endCapStyle);
- var geomBuf$3 = bufOp$2.getResultGeometry(distance$3);
- return geomBuf$3
- }
- };
- BufferOp.precisionScaleFactor = function precisionScaleFactor (g, distance, maxPrecisionDigits) {
- var env = g.getEnvelopeInternal();
- var envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));
- var expandByDistance = distance > 0.0 ? distance : 0.0;
- var bufEnvMax = envMax + 2 * expandByDistance;
- var bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);
- var minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;
- var scaleFactor = Math.pow(10.0, minUnitLog10);
- return scaleFactor
- };
- staticAccessors$32.CAP_ROUND.get = function () { return BufferParameters.CAP_ROUND };
- staticAccessors$32.CAP_BUTT.get = function () { return BufferParameters.CAP_FLAT };
- staticAccessors$32.CAP_FLAT.get = function () { return BufferParameters.CAP_FLAT };
- staticAccessors$32.CAP_SQUARE.get = function () { return BufferParameters.CAP_SQUARE };
- staticAccessors$32.MAX_PRECISION_DIGITS.get = function () { return 12 };
- Object.defineProperties( BufferOp, staticAccessors$32 );
- var PointPairDistance = function PointPairDistance () {
- this._pt = [new Coordinate(), new Coordinate()];
- this._distance = Double.NaN;
- this._isNull = true;
- };
- PointPairDistance.prototype.getCoordinates = function getCoordinates () {
- return this._pt
- };
- PointPairDistance.prototype.getCoordinate = function getCoordinate (i) {
- return this._pt[i]
- };
- PointPairDistance.prototype.setMinimum = function setMinimum () {
- if (arguments.length === 1) {
- var ptDist = arguments[0];
- this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- if (this._isNull) {
- this.initialize(p0, p1);
- return null
- }
- var dist = p0.distance(p1);
- if (dist < this._distance) { this.initialize(p0, p1, dist); }
- }
- };
- PointPairDistance.prototype.initialize = function initialize () {
- if (arguments.length === 0) {
- this._isNull = true;
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- this._pt[0].setCoordinate(p0);
- this._pt[1].setCoordinate(p1);
- this._distance = p0.distance(p1);
- this._isNull = false;
- } else if (arguments.length === 3) {
- var p0$1 = arguments[0];
- var p1$1 = arguments[1];
- var distance = arguments[2];
- this._pt[0].setCoordinate(p0$1);
- this._pt[1].setCoordinate(p1$1);
- this._distance = distance;
- this._isNull = false;
- }
- };
- PointPairDistance.prototype.getDistance = function getDistance () {
- return this._distance
- };
- PointPairDistance.prototype.setMaximum = function setMaximum () {
- if (arguments.length === 1) {
- var ptDist = arguments[0];
- this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- if (this._isNull) {
- this.initialize(p0, p1);
- return null
- }
- var dist = p0.distance(p1);
- if (dist > this._distance) { this.initialize(p0, p1, dist); }
- }
- };
- PointPairDistance.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PointPairDistance.prototype.getClass = function getClass () {
- return PointPairDistance
- };
- var DistanceToPointFinder = function DistanceToPointFinder () {};
- DistanceToPointFinder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- DistanceToPointFinder.prototype.getClass = function getClass () {
- return DistanceToPointFinder
- };
- DistanceToPointFinder.computeDistance = function computeDistance () {
- if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
- var line = arguments[0];
- var pt = arguments[1];
- var ptDist = arguments[2];
- var coords = line.getCoordinates();
- var tempSegment = new LineSegment();
- for (var i = 0; i < coords.length - 1; i++) {
- tempSegment.setCoordinates(coords[i], coords[i + 1]);
- var closestPt = tempSegment.closestPoint(pt);
- ptDist.setMinimum(closestPt, pt);
- }
- } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
- var poly = arguments[0];
- var pt$1 = arguments[1];
- var ptDist$1 = arguments[2];
- DistanceToPointFinder.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
- for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
- DistanceToPointFinder.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
- }
- } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
- var geom = arguments[0];
- var pt$2 = arguments[1];
- var ptDist$2 = arguments[2];
- if (geom instanceof LineString) {
- DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
- } else if (geom instanceof Polygon) {
- DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
- } else if (geom instanceof GeometryCollection) {
- var gc = geom;
- for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
- var g = gc.getGeometryN(i$2);
- DistanceToPointFinder.computeDistance(g, pt$2, ptDist$2);
- }
- } else {
- ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
- }
- } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
- var segment = arguments[0];
- var pt$3 = arguments[1];
- var ptDist$3 = arguments[2];
- var closestPt$1 = segment.closestPoint(pt$3);
- ptDist$3.setMinimum(closestPt$1, pt$3);
- }
- };
- var BufferCurveMaximumDistanceFinder = function BufferCurveMaximumDistanceFinder (inputGeom) {
- this._maxPtDist = new PointPairDistance();
- this._inputGeom = inputGeom || null;
- };
- var staticAccessors$36 = { MaxPointDistanceFilter: { configurable: true },MaxMidpointDistanceFilter: { configurable: true } };
- BufferCurveMaximumDistanceFinder.prototype.computeMaxMidpointDistance = function computeMaxMidpointDistance (curve) {
- var distFilter = new MaxMidpointDistanceFilter(this._inputGeom);
- curve.apply(distFilter);
- this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
- };
- BufferCurveMaximumDistanceFinder.prototype.computeMaxVertexDistance = function computeMaxVertexDistance (curve) {
- var distFilter = new MaxPointDistanceFilter(this._inputGeom);
- curve.apply(distFilter);
- this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
- };
- BufferCurveMaximumDistanceFinder.prototype.findDistance = function findDistance (bufferCurve) {
- this.computeMaxVertexDistance(bufferCurve);
- this.computeMaxMidpointDistance(bufferCurve);
- return this._maxPtDist.getDistance()
- };
- BufferCurveMaximumDistanceFinder.prototype.getDistancePoints = function getDistancePoints () {
- return this._maxPtDist
- };
- BufferCurveMaximumDistanceFinder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferCurveMaximumDistanceFinder.prototype.getClass = function getClass () {
- return BufferCurveMaximumDistanceFinder
- };
- staticAccessors$36.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter };
- staticAccessors$36.MaxMidpointDistanceFilter.get = function () { return MaxMidpointDistanceFilter };
- Object.defineProperties( BufferCurveMaximumDistanceFinder, staticAccessors$36 );
- var MaxPointDistanceFilter = function MaxPointDistanceFilter (geom) {
- this._maxPtDist = new PointPairDistance();
- this._minPtDist = new PointPairDistance();
- this._geom = geom || null;
- };
- MaxPointDistanceFilter.prototype.filter = function filter (pt) {
- this._minPtDist.initialize();
- DistanceToPointFinder.computeDistance(this._geom, pt, this._minPtDist);
- this._maxPtDist.setMaximum(this._minPtDist);
- };
- MaxPointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
- return this._maxPtDist
- };
- MaxPointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateFilter]
- };
- MaxPointDistanceFilter.prototype.getClass = function getClass () {
- return MaxPointDistanceFilter
- };
- var MaxMidpointDistanceFilter = function MaxMidpointDistanceFilter (geom) {
- this._maxPtDist = new PointPairDistance();
- this._minPtDist = new PointPairDistance();
- this._geom = geom || null;
- };
- MaxMidpointDistanceFilter.prototype.filter = function filter (seq, index) {
- if (index === 0) { return null }
- var p0 = seq.getCoordinate(index - 1);
- var p1 = seq.getCoordinate(index);
- var midPt = new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2);
- this._minPtDist.initialize();
- DistanceToPointFinder.computeDistance(this._geom, midPt, this._minPtDist);
- this._maxPtDist.setMaximum(this._minPtDist);
- };
- MaxMidpointDistanceFilter.prototype.isDone = function isDone () {
- return false
- };
- MaxMidpointDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
- return false
- };
- MaxMidpointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
- return this._maxPtDist
- };
- MaxMidpointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateSequenceFilter]
- };
- MaxMidpointDistanceFilter.prototype.getClass = function getClass () {
- return MaxMidpointDistanceFilter
- };
- var PolygonExtracter = function PolygonExtracter (comps) {
- this._comps = comps || null;
- };
- PolygonExtracter.prototype.filter = function filter (geom) {
- if (geom instanceof Polygon) { this._comps.add(geom); }
- };
- PolygonExtracter.prototype.interfaces_ = function interfaces_ () {
- return [GeometryFilter]
- };
- PolygonExtracter.prototype.getClass = function getClass () {
- return PolygonExtracter
- };
- PolygonExtracter.getPolygons = function getPolygons () {
- if (arguments.length === 1) {
- var geom = arguments[0];
- return PolygonExtracter.getPolygons(geom, new ArrayList())
- } else if (arguments.length === 2) {
- var geom$1 = arguments[0];
- var list = arguments[1];
- if (geom$1 instanceof Polygon) {
- list.add(geom$1);
- } else if (geom$1 instanceof GeometryCollection) {
- geom$1.apply(new PolygonExtracter(list));
- }
- return list
- }
- };
- var LinearComponentExtracter = function LinearComponentExtracter () {
- this._lines = null;
- this._isForcedToLineString = false;
- if (arguments.length === 1) {
- var lines = arguments[0];
- this._lines = lines;
- } else if (arguments.length === 2) {
- var lines$1 = arguments[0];
- var isForcedToLineString = arguments[1];
- this._lines = lines$1;
- this._isForcedToLineString = isForcedToLineString;
- }
- };
- LinearComponentExtracter.prototype.filter = function filter (geom) {
- if (this._isForcedToLineString && geom instanceof LinearRing) {
- var line = geom.getFactory().createLineString(geom.getCoordinateSequence());
- this._lines.add(line);
- return null
- }
- if (geom instanceof LineString) { this._lines.add(geom); }
- };
- LinearComponentExtracter.prototype.setForceToLineString = function setForceToLineString (isForcedToLineString) {
- this._isForcedToLineString = isForcedToLineString;
- };
- LinearComponentExtracter.prototype.interfaces_ = function interfaces_ () {
- return [GeometryComponentFilter]
- };
- LinearComponentExtracter.prototype.getClass = function getClass () {
- return LinearComponentExtracter
- };
- LinearComponentExtracter.getGeometry = function getGeometry () {
- if (arguments.length === 1) {
- var geom = arguments[0];
- return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))
- } else if (arguments.length === 2) {
- var geom$1 = arguments[0];
- var forceToLineString = arguments[1];
- return geom$1.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom$1, forceToLineString))
- }
- };
- LinearComponentExtracter.getLines = function getLines () {
- if (arguments.length === 1) {
- var geom = arguments[0];
- return LinearComponentExtracter.getLines(geom, false)
- } else if (arguments.length === 2) {
- if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {
- var geoms = arguments[0];
- var lines$1 = arguments[1];
- for (var i = geoms.iterator(); i.hasNext();) {
- var g = i.next();
- LinearComponentExtracter.getLines(g, lines$1);
- }
- return lines$1
- } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {
- var geom$1 = arguments[0];
- var forceToLineString = arguments[1];
- var lines = new ArrayList();
- geom$1.apply(new LinearComponentExtracter(lines, forceToLineString));
- return lines
- } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {
- var geom$2 = arguments[0];
- var lines$2 = arguments[1];
- if (geom$2 instanceof LineString) {
- lines$2.add(geom$2);
- } else {
- geom$2.apply(new LinearComponentExtracter(lines$2));
- }
- return lines$2
- }
- } else if (arguments.length === 3) {
- if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {
- var geoms$1 = arguments[0];
- var lines$3 = arguments[1];
- var forceToLineString$1 = arguments[2];
- for (var i$1 = geoms$1.iterator(); i$1.hasNext();) {
- var g$1 = i$1.next();
- LinearComponentExtracter.getLines(g$1, lines$3, forceToLineString$1);
- }
- return lines$3
- } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {
- var geom$3 = arguments[0];
- var lines$4 = arguments[1];
- var forceToLineString$2 = arguments[2];
- geom$3.apply(new LinearComponentExtracter(lines$4, forceToLineString$2));
- return lines$4
- }
- }
- };
- var PointLocator = function PointLocator () {
- this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
- this._isIn = null;
- this._numBoundaries = null;
- if (arguments.length === 0) {} else if (arguments.length === 1) {
- var boundaryRule = arguments[0];
- if (boundaryRule === null) { throw new IllegalArgumentException('Rule must be non-null') }
- this._boundaryRule = boundaryRule;
- }
- };
- PointLocator.prototype.locateInternal = function locateInternal () {
- var this$1 = this;
- if (arguments[0] instanceof Coordinate && arguments[1] instanceof Polygon) {
- var p = arguments[0];
- var poly = arguments[1];
- if (poly.isEmpty()) { return Location.EXTERIOR }
- var shell = poly.getExteriorRing();
- var shellLoc = this.locateInPolygonRing(p, shell);
- if (shellLoc === Location.EXTERIOR) { return Location.EXTERIOR }
- if (shellLoc === Location.BOUNDARY) { return Location.BOUNDARY }
- for (var i = 0; i < poly.getNumInteriorRing(); i++) {
- var hole = poly.getInteriorRingN(i);
- var holeLoc = this$1.locateInPolygonRing(p, hole);
- if (holeLoc === Location.INTERIOR) { return Location.EXTERIOR }
- if (holeLoc === Location.BOUNDARY) { return Location.BOUNDARY }
- }
- return Location.INTERIOR
- } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof LineString) {
- var p$1 = arguments[0];
- var l = arguments[1];
- if (!l.getEnvelopeInternal().intersects(p$1)) { return Location.EXTERIOR }
- var pt = l.getCoordinates();
- if (!l.isClosed()) {
- if (p$1.equals(pt[0]) || p$1.equals(pt[pt.length - 1])) {
- return Location.BOUNDARY
- }
- }
- if (CGAlgorithms.isOnLine(p$1, pt)) { return Location.INTERIOR }
- return Location.EXTERIOR
- } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Point) {
- var p$2 = arguments[0];
- var pt$1 = arguments[1];
- var ptCoord = pt$1.getCoordinate();
- if (ptCoord.equals2D(p$2)) { return Location.INTERIOR }
- return Location.EXTERIOR
- }
- };
- PointLocator.prototype.locateInPolygonRing = function locateInPolygonRing (p, ring) {
- if (!ring.getEnvelopeInternal().intersects(p)) { return Location.EXTERIOR }
- return CGAlgorithms.locatePointInRing(p, ring.getCoordinates())
- };
- PointLocator.prototype.intersects = function intersects (p, geom) {
- return this.locate(p, geom) !== Location.EXTERIOR
- };
- PointLocator.prototype.updateLocationInfo = function updateLocationInfo (loc) {
- if (loc === Location.INTERIOR) { this._isIn = true; }
- if (loc === Location.BOUNDARY) { this._numBoundaries++; }
- };
- PointLocator.prototype.computeLocation = function computeLocation (p, geom) {
- var this$1 = this;
- if (geom instanceof Point) {
- this.updateLocationInfo(this.locateInternal(p, geom));
- }
- if (geom instanceof LineString) {
- this.updateLocationInfo(this.locateInternal(p, geom));
- } else if (geom instanceof Polygon) {
- this.updateLocationInfo(this.locateInternal(p, geom));
- } else if (geom instanceof MultiLineString) {
- var ml = geom;
- for (var i = 0; i < ml.getNumGeometries(); i++) {
- var l = ml.getGeometryN(i);
- this$1.updateLocationInfo(this$1.locateInternal(p, l));
- }
- } else if (geom instanceof MultiPolygon) {
- var mpoly = geom;
- for (var i$1 = 0; i$1 < mpoly.getNumGeometries(); i$1++) {
- var poly = mpoly.getGeometryN(i$1);
- this$1.updateLocationInfo(this$1.locateInternal(p, poly));
- }
- } else if (geom instanceof GeometryCollection) {
- var geomi = new GeometryCollectionIterator(geom);
- while (geomi.hasNext()) {
- var g2 = geomi.next();
- if (g2 !== geom) { this$1.computeLocation(p, g2); }
- }
- }
- };
- PointLocator.prototype.locate = function locate (p, geom) {
- if (geom.isEmpty()) { return Location.EXTERIOR }
- if (geom instanceof LineString) {
- return this.locateInternal(p, geom)
- } else if (geom instanceof Polygon) {
- return this.locateInternal(p, geom)
- }
- this._isIn = false;
- this._numBoundaries = 0;
- this.computeLocation(p, geom);
- if (this._boundaryRule.isInBoundary(this._numBoundaries)) { return Location.BOUNDARY }
- if (this._numBoundaries > 0 || this._isIn) { return Location.INTERIOR }
- return Location.EXTERIOR
- };
- PointLocator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PointLocator.prototype.getClass = function getClass () {
- return PointLocator
- };
- var GeometryLocation = function GeometryLocation () {
- this._component = null;
- this._segIndex = null;
- this._pt = null;
- if (arguments.length === 2) {
- var component = arguments[0];
- var pt = arguments[1];
- GeometryLocation.call(this, component, GeometryLocation.INSIDE_AREA, pt);
- } else if (arguments.length === 3) {
- var component$1 = arguments[0];
- var segIndex = arguments[1];
- var pt$1 = arguments[2];
- this._component = component$1;
- this._segIndex = segIndex;
- this._pt = pt$1;
- }
- };
- var staticAccessors$38 = { INSIDE_AREA: { configurable: true } };
- GeometryLocation.prototype.isInsideArea = function isInsideArea () {
- return this._segIndex === GeometryLocation.INSIDE_AREA
- };
- GeometryLocation.prototype.getCoordinate = function getCoordinate () {
- return this._pt
- };
- GeometryLocation.prototype.getGeometryComponent = function getGeometryComponent () {
- return this._component
- };
- GeometryLocation.prototype.getSegmentIndex = function getSegmentIndex () {
- return this._segIndex
- };
- GeometryLocation.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryLocation.prototype.getClass = function getClass () {
- return GeometryLocation
- };
- staticAccessors$38.INSIDE_AREA.get = function () { return -1 };
- Object.defineProperties( GeometryLocation, staticAccessors$38 );
- var PointExtracter = function PointExtracter (pts) {
- this._pts = pts || null;
- };
- PointExtracter.prototype.filter = function filter (geom) {
- if (geom instanceof Point) { this._pts.add(geom); }
- };
- PointExtracter.prototype.interfaces_ = function interfaces_ () {
- return [GeometryFilter]
- };
- PointExtracter.prototype.getClass = function getClass () {
- return PointExtracter
- };
- PointExtracter.getPoints = function getPoints () {
- if (arguments.length === 1) {
- var geom = arguments[0];
- if (geom instanceof Point) {
- return Collections.singletonList(geom)
- }
- return PointExtracter.getPoints(geom, new ArrayList())
- } else if (arguments.length === 2) {
- var geom$1 = arguments[0];
- var list = arguments[1];
- if (geom$1 instanceof Point) {
- list.add(geom$1);
- } else if (geom$1 instanceof GeometryCollection) {
- geom$1.apply(new PointExtracter(list));
- }
- return list
- }
- };
- var ConnectedElementLocationFilter = function ConnectedElementLocationFilter () {
- this._locations = null;
- var locations = arguments[0];
- this._locations = locations;
- };
- ConnectedElementLocationFilter.prototype.filter = function filter (geom) {
- if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) { this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate())); }
- };
- ConnectedElementLocationFilter.prototype.interfaces_ = function interfaces_ () {
- return [GeometryFilter]
- };
- ConnectedElementLocationFilter.prototype.getClass = function getClass () {
- return ConnectedElementLocationFilter
- };
- ConnectedElementLocationFilter.getLocations = function getLocations (geom) {
- var locations = new ArrayList();
- geom.apply(new ConnectedElementLocationFilter(locations));
- return locations
- };
- var DistanceOp = function DistanceOp () {
- this._geom = null;
- this._terminateDistance = 0.0;
- this._ptLocator = new PointLocator();
- this._minDistanceLocation = null;
- this._minDistance = Double.MAX_VALUE;
- if (arguments.length === 2) {
- var g0 = arguments[0];
- var g1 = arguments[1];
- this._geom = [g0, g1];
- this._terminateDistance = 0.0;
- } else if (arguments.length === 3) {
- var g0$1 = arguments[0];
- var g1$1 = arguments[1];
- var terminateDistance = arguments[2];
- this._geom = new Array(2).fill(null);
- this._geom[0] = g0$1;
- this._geom[1] = g1$1;
- this._terminateDistance = terminateDistance;
- }
- };
- DistanceOp.prototype.computeContainmentDistance = function computeContainmentDistance () {
- var this$1 = this;
- if (arguments.length === 0) {
- var locPtPoly = new Array(2).fill(null);
- this.computeContainmentDistance(0, locPtPoly);
- if (this._minDistance <= this._terminateDistance) { return null }
- this.computeContainmentDistance(1, locPtPoly);
- } else if (arguments.length === 2) {
- var polyGeomIndex = arguments[0];
- var locPtPoly$1 = arguments[1];
- var locationsIndex = 1 - polyGeomIndex;
- var polys = PolygonExtracter.getPolygons(this._geom[polyGeomIndex]);
- if (polys.size() > 0) {
- var insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);
- this.computeContainmentDistance(insideLocs, polys, locPtPoly$1);
- if (this._minDistance <= this._terminateDistance) {
- this._minDistanceLocation[locationsIndex] = locPtPoly$1[0];
- this._minDistanceLocation[polyGeomIndex] = locPtPoly$1[1];
- return null
- }
- }
- } else if (arguments.length === 3) {
- if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
- var locs = arguments[0];
- var polys$1 = arguments[1];
- var locPtPoly$2 = arguments[2];
- for (var i = 0; i < locs.size(); i++) {
- var loc = locs.get(i);
- for (var j = 0; j < polys$1.size(); j++) {
- this$1.computeContainmentDistance(loc, polys$1.get(j), locPtPoly$2);
- if (this$1._minDistance <= this$1._terminateDistance) { return null }
- }
- }
- } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {
- var ptLoc = arguments[0];
- var poly = arguments[1];
- var locPtPoly$3 = arguments[2];
- var pt = ptLoc.getCoordinate();
- if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {
- this._minDistance = 0.0;
- locPtPoly$3[0] = ptLoc;
- locPtPoly$3[1] = new GeometryLocation(poly, pt);
- return null
- }
- }
- }
- };
- DistanceOp.prototype.computeMinDistanceLinesPoints = function computeMinDistanceLinesPoints (lines, points, locGeom) {
- var this$1 = this;
- for (var i = 0; i < lines.size(); i++) {
- var line = lines.get(i);
- for (var j = 0; j < points.size(); j++) {
- var pt = points.get(j);
- this$1.computeMinDistance(line, pt, locGeom);
- if (this$1._minDistance <= this$1._terminateDistance) { return null }
- }
- }
- };
- DistanceOp.prototype.computeFacetDistance = function computeFacetDistance () {
- var locGeom = new Array(2).fill(null);
- var lines0 = LinearComponentExtracter.getLines(this._geom[0]);
- var lines1 = LinearComponentExtracter.getLines(this._geom[1]);
- var pts0 = PointExtracter.getPoints(this._geom[0]);
- var pts1 = PointExtracter.getPoints(this._geom[1]);
- this.computeMinDistanceLines(lines0, lines1, locGeom);
- this.updateMinDistance(locGeom, false);
- if (this._minDistance <= this._terminateDistance) { return null }
- locGeom[0] = null;
- locGeom[1] = null;
- this.computeMinDistanceLinesPoints(lines0, pts1, locGeom);
- this.updateMinDistance(locGeom, false);
- if (this._minDistance <= this._terminateDistance) { return null }
- locGeom[0] = null;
- locGeom[1] = null;
- this.computeMinDistanceLinesPoints(lines1, pts0, locGeom);
- this.updateMinDistance(locGeom, true);
- if (this._minDistance <= this._terminateDistance) { return null }
- locGeom[0] = null;
- locGeom[1] = null;
- this.computeMinDistancePoints(pts0, pts1, locGeom);
- this.updateMinDistance(locGeom, false);
- };
- DistanceOp.prototype.nearestLocations = function nearestLocations () {
- this.computeMinDistance();
- return this._minDistanceLocation
- };
- DistanceOp.prototype.updateMinDistance = function updateMinDistance (locGeom, flip) {
- if (locGeom[0] === null) { return null }
- if (flip) {
- this._minDistanceLocation[0] = locGeom[1];
- this._minDistanceLocation[1] = locGeom[0];
- } else {
- this._minDistanceLocation[0] = locGeom[0];
- this._minDistanceLocation[1] = locGeom[1];
- }
- };
- DistanceOp.prototype.nearestPoints = function nearestPoints () {
- this.computeMinDistance();
- var nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];
- return nearestPts
- };
- DistanceOp.prototype.computeMinDistance = function computeMinDistance () {
- var this$1 = this;
- if (arguments.length === 0) {
- if (this._minDistanceLocation !== null) { return null }
- this._minDistanceLocation = new Array(2).fill(null);
- this.computeContainmentDistance();
- if (this._minDistance <= this._terminateDistance) { return null }
- this.computeFacetDistance();
- } else if (arguments.length === 3) {
- if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {
- var line = arguments[0];
- var pt = arguments[1];
- var locGeom = arguments[2];
- if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) { return null }
- var coord0 = line.getCoordinates();
- var coord = pt.getCoordinate();
- for (var i = 0; i < coord0.length - 1; i++) {
- var dist = CGAlgorithms.distancePointLine(coord, coord0[i], coord0[i + 1]);
- if (dist < this$1._minDistance) {
- this$1._minDistance = dist;
- var seg = new LineSegment(coord0[i], coord0[i + 1]);
- var segClosestPoint = seg.closestPoint(coord);
- locGeom[0] = new GeometryLocation(line, i, segClosestPoint);
- locGeom[1] = new GeometryLocation(pt, 0, coord);
- }
- if (this$1._minDistance <= this$1._terminateDistance) { return null }
- }
- } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {
- var line0 = arguments[0];
- var line1 = arguments[1];
- var locGeom$1 = arguments[2];
- if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) { return null }
- var coord0$1 = line0.getCoordinates();
- var coord1 = line1.getCoordinates();
- for (var i$1 = 0; i$1 < coord0$1.length - 1; i$1++) {
- for (var j = 0; j < coord1.length - 1; j++) {
- var dist$1 = CGAlgorithms.distanceLineLine(coord0$1[i$1], coord0$1[i$1 + 1], coord1[j], coord1[j + 1]);
- if (dist$1 < this$1._minDistance) {
- this$1._minDistance = dist$1;
- var seg0 = new LineSegment(coord0$1[i$1], coord0$1[i$1 + 1]);
- var seg1 = new LineSegment(coord1[j], coord1[j + 1]);
- var closestPt = seg0.closestPoints(seg1);
- locGeom$1[0] = new GeometryLocation(line0, i$1, closestPt[0]);
- locGeom$1[1] = new GeometryLocation(line1, j, closestPt[1]);
- }
- if (this$1._minDistance <= this$1._terminateDistance) { return null }
- }
- }
- }
- }
- };
- DistanceOp.prototype.computeMinDistancePoints = function computeMinDistancePoints (points0, points1, locGeom) {
- var this$1 = this;
- for (var i = 0; i < points0.size(); i++) {
- var pt0 = points0.get(i);
- for (var j = 0; j < points1.size(); j++) {
- var pt1 = points1.get(j);
- var dist = pt0.getCoordinate().distance(pt1.getCoordinate());
- if (dist < this$1._minDistance) {
- this$1._minDistance = dist;
- locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());
- locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());
- }
- if (this$1._minDistance <= this$1._terminateDistance) { return null }
- }
- }
- };
- DistanceOp.prototype.distance = function distance () {
- if (this._geom[0] === null || this._geom[1] === null) { throw new IllegalArgumentException('null geometries are not supported') }
- if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) { return 0.0 }
- this.computeMinDistance();
- return this._minDistance
- };
- DistanceOp.prototype.computeMinDistanceLines = function computeMinDistanceLines (lines0, lines1, locGeom) {
- var this$1 = this;
- for (var i = 0; i < lines0.size(); i++) {
- var line0 = lines0.get(i);
- for (var j = 0; j < lines1.size(); j++) {
- var line1 = lines1.get(j);
- this$1.computeMinDistance(line0, line1, locGeom);
- if (this$1._minDistance <= this$1._terminateDistance) { return null }
- }
- }
- };
- DistanceOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- DistanceOp.prototype.getClass = function getClass () {
- return DistanceOp
- };
- DistanceOp.distance = function distance (g0, g1) {
- var distOp = new DistanceOp(g0, g1);
- return distOp.distance()
- };
- DistanceOp.isWithinDistance = function isWithinDistance (g0, g1, distance) {
- var distOp = new DistanceOp(g0, g1, distance);
- return distOp.distance() <= distance
- };
- DistanceOp.nearestPoints = function nearestPoints (g0, g1) {
- var distOp = new DistanceOp(g0, g1);
- return distOp.nearestPoints()
- };
- var PointPairDistance$2 = function PointPairDistance () {
- this._pt = [new Coordinate(), new Coordinate()];
- this._distance = Double.NaN;
- this._isNull = true;
- };
- PointPairDistance$2.prototype.getCoordinates = function getCoordinates () {
- return this._pt
- };
- PointPairDistance$2.prototype.getCoordinate = function getCoordinate (i) {
- return this._pt[i]
- };
- PointPairDistance$2.prototype.setMinimum = function setMinimum () {
- if (arguments.length === 1) {
- var ptDist = arguments[0];
- this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- if (this._isNull) {
- this.initialize(p0, p1);
- return null
- }
- var dist = p0.distance(p1);
- if (dist < this._distance) { this.initialize(p0, p1, dist); }
- }
- };
- PointPairDistance$2.prototype.initialize = function initialize () {
- if (arguments.length === 0) {
- this._isNull = true;
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- this._pt[0].setCoordinate(p0);
- this._pt[1].setCoordinate(p1);
- this._distance = p0.distance(p1);
- this._isNull = false;
- } else if (arguments.length === 3) {
- var p0$1 = arguments[0];
- var p1$1 = arguments[1];
- var distance = arguments[2];
- this._pt[0].setCoordinate(p0$1);
- this._pt[1].setCoordinate(p1$1);
- this._distance = distance;
- this._isNull = false;
- }
- };
- PointPairDistance$2.prototype.toString = function toString () {
- return WKTWriter.toLineString(this._pt[0], this._pt[1])
- };
- PointPairDistance$2.prototype.getDistance = function getDistance () {
- return this._distance
- };
- PointPairDistance$2.prototype.setMaximum = function setMaximum () {
- if (arguments.length === 1) {
- var ptDist = arguments[0];
- this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
- } else if (arguments.length === 2) {
- var p0 = arguments[0];
- var p1 = arguments[1];
- if (this._isNull) {
- this.initialize(p0, p1);
- return null
- }
- var dist = p0.distance(p1);
- if (dist > this._distance) { this.initialize(p0, p1, dist); }
- }
- };
- PointPairDistance$2.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PointPairDistance$2.prototype.getClass = function getClass () {
- return PointPairDistance$2
- };
- var DistanceToPoint = function DistanceToPoint () {};
- DistanceToPoint.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- DistanceToPoint.prototype.getClass = function getClass () {
- return DistanceToPoint
- };
- DistanceToPoint.computeDistance = function computeDistance () {
- if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
- var line = arguments[0];
- var pt = arguments[1];
- var ptDist = arguments[2];
- var tempSegment = new LineSegment();
- var coords = line.getCoordinates();
- for (var i = 0; i < coords.length - 1; i++) {
- tempSegment.setCoordinates(coords[i], coords[i + 1]);
- var closestPt = tempSegment.closestPoint(pt);
- ptDist.setMinimum(closestPt, pt);
- }
- } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
- var poly = arguments[0];
- var pt$1 = arguments[1];
- var ptDist$1 = arguments[2];
- DistanceToPoint.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
- for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
- DistanceToPoint.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
- }
- } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
- var geom = arguments[0];
- var pt$2 = arguments[1];
- var ptDist$2 = arguments[2];
- if (geom instanceof LineString) {
- DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
- } else if (geom instanceof Polygon) {
- DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
- } else if (geom instanceof GeometryCollection) {
- var gc = geom;
- for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
- var g = gc.getGeometryN(i$2);
- DistanceToPoint.computeDistance(g, pt$2, ptDist$2);
- }
- } else {
- ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
- }
- } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
- var segment = arguments[0];
- var pt$3 = arguments[1];
- var ptDist$3 = arguments[2];
- var closestPt$1 = segment.closestPoint(pt$3);
- ptDist$3.setMinimum(closestPt$1, pt$3);
- }
- };
- var DiscreteHausdorffDistance = function DiscreteHausdorffDistance () {
- this._g0 = null;
- this._g1 = null;
- this._ptDist = new PointPairDistance$2();
- this._densifyFrac = 0.0;
- var g0 = arguments[0];
- var g1 = arguments[1];
- this._g0 = g0;
- this._g1 = g1;
- };
- var staticAccessors$39 = { MaxPointDistanceFilter: { configurable: true },MaxDensifiedByFractionDistanceFilter: { configurable: true } };
- DiscreteHausdorffDistance.prototype.getCoordinates = function getCoordinates () {
- return this._ptDist.getCoordinates()
- };
- DiscreteHausdorffDistance.prototype.setDensifyFraction = function setDensifyFraction (densifyFrac) {
- if (densifyFrac > 1.0 || densifyFrac <= 0.0) { throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]') }
- this._densifyFrac = densifyFrac;
- };
- DiscreteHausdorffDistance.prototype.compute = function compute (g0, g1) {
- this.computeOrientedDistance(g0, g1, this._ptDist);
- this.computeOrientedDistance(g1, g0, this._ptDist);
- };
- DiscreteHausdorffDistance.prototype.distance = function distance () {
- this.compute(this._g0, this._g1);
- return this._ptDist.getDistance()
- };
- DiscreteHausdorffDistance.prototype.computeOrientedDistance = function computeOrientedDistance (discreteGeom, geom, ptDist) {
- var distFilter = new MaxPointDistanceFilter$1(geom);
- discreteGeom.apply(distFilter);
- ptDist.setMaximum(distFilter.getMaxPointDistance());
- if (this._densifyFrac > 0) {
- var fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac);
- discreteGeom.apply(fracFilter);
- ptDist.setMaximum(fracFilter.getMaxPointDistance());
- }
- };
- DiscreteHausdorffDistance.prototype.orientedDistance = function orientedDistance () {
- this.computeOrientedDistance(this._g0, this._g1, this._ptDist);
- return this._ptDist.getDistance()
- };
- DiscreteHausdorffDistance.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- DiscreteHausdorffDistance.prototype.getClass = function getClass () {
- return DiscreteHausdorffDistance
- };
- DiscreteHausdorffDistance.distance = function distance () {
- if (arguments.length === 2) {
- var g0 = arguments[0];
- var g1 = arguments[1];
- var dist = new DiscreteHausdorffDistance(g0, g1);
- return dist.distance()
- } else if (arguments.length === 3) {
- var g0$1 = arguments[0];
- var g1$1 = arguments[1];
- var densifyFrac = arguments[2];
- var dist$1 = new DiscreteHausdorffDistance(g0$1, g1$1);
- dist$1.setDensifyFraction(densifyFrac);
- return dist$1.distance()
- }
- };
- staticAccessors$39.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter$1 };
- staticAccessors$39.MaxDensifiedByFractionDistanceFilter.get = function () { return MaxDensifiedByFractionDistanceFilter };
- Object.defineProperties( DiscreteHausdorffDistance, staticAccessors$39 );
- var MaxPointDistanceFilter$1 = function MaxPointDistanceFilter () {
- this._maxPtDist = new PointPairDistance$2();
- this._minPtDist = new PointPairDistance$2();
- this._euclideanDist = new DistanceToPoint();
- this._geom = null;
- var geom = arguments[0];
- this._geom = geom;
- };
- MaxPointDistanceFilter$1.prototype.filter = function filter (pt) {
- this._minPtDist.initialize();
- DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist);
- this._maxPtDist.setMaximum(this._minPtDist);
- };
- MaxPointDistanceFilter$1.prototype.getMaxPointDistance = function getMaxPointDistance () {
- return this._maxPtDist
- };
- MaxPointDistanceFilter$1.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateFilter]
- };
- MaxPointDistanceFilter$1.prototype.getClass = function getClass () {
- return MaxPointDistanceFilter$1
- };
- var MaxDensifiedByFractionDistanceFilter = function MaxDensifiedByFractionDistanceFilter () {
- this._maxPtDist = new PointPairDistance$2();
- this._minPtDist = new PointPairDistance$2();
- this._geom = null;
- this._numSubSegs = 0;
- var geom = arguments[0];
- var fraction = arguments[1];
- this._geom = geom;
- this._numSubSegs = Math.trunc(Math.round(1.0 / fraction));
- };
- MaxDensifiedByFractionDistanceFilter.prototype.filter = function filter (seq, index) {
- var this$1 = this;
- if (index === 0) { return null }
- var p0 = seq.getCoordinate(index - 1);
- var p1 = seq.getCoordinate(index);
- var delx = (p1.x - p0.x) / this._numSubSegs;
- var dely = (p1.y - p0.y) / this._numSubSegs;
- for (var i = 0; i < this._numSubSegs; i++) {
- var x = p0.x + i * delx;
- var y = p0.y + i * dely;
- var pt = new Coordinate(x, y);
- this$1._minPtDist.initialize();
- DistanceToPoint.computeDistance(this$1._geom, pt, this$1._minPtDist);
- this$1._maxPtDist.setMaximum(this$1._minPtDist);
- }
- };
- MaxDensifiedByFractionDistanceFilter.prototype.isDone = function isDone () {
- return false
- };
- MaxDensifiedByFractionDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
- return false
- };
- MaxDensifiedByFractionDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
- return this._maxPtDist
- };
- MaxDensifiedByFractionDistanceFilter.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateSequenceFilter]
- };
- MaxDensifiedByFractionDistanceFilter.prototype.getClass = function getClass () {
- return MaxDensifiedByFractionDistanceFilter
- };
- var BufferDistanceValidator = function BufferDistanceValidator (input, bufDistance, result) {
- this._minValidDistance = null;
- this._maxValidDistance = null;
- this._minDistanceFound = null;
- this._maxDistanceFound = null;
- this._isValid = true;
- this._errMsg = null;
- this._errorLocation = null;
- this._errorIndicator = null;
- this._input = input || null;
- this._bufDistance = bufDistance || null;
- this._result = result || null;
- };
- var staticAccessors$37 = { VERBOSE: { configurable: true },MAX_DISTANCE_DIFF_FRAC: { configurable: true } };
- BufferDistanceValidator.prototype.checkMaximumDistance = function checkMaximumDistance (input, bufCurve, maxDist) {
- var haus = new DiscreteHausdorffDistance(bufCurve, input);
- haus.setDensifyFraction(0.25);
- this._maxDistanceFound = haus.orientedDistance();
- if (this._maxDistanceFound > maxDist) {
- this._isValid = false;
- var pts = haus.getCoordinates();
- this._errorLocation = pts[1];
- this._errorIndicator = input.getFactory().createLineString(pts);
- this._errMsg = 'Distance between buffer curve and input is too large (' + this._maxDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ')';
- }
- };
- BufferDistanceValidator.prototype.isValid = function isValid () {
- var posDistance = Math.abs(this._bufDistance);
- var distDelta = BufferDistanceValidator.MAX_DISTANCE_DIFF_FRAC * posDistance;
- this._minValidDistance = posDistance - distDelta;
- this._maxValidDistance = posDistance + distDelta;
- if (this._input.isEmpty() || this._result.isEmpty()) { return true }
- if (this._bufDistance > 0.0) {
- this.checkPositiveValid();
- } else {
- this.checkNegativeValid();
- }
- if (BufferDistanceValidator.VERBOSE) {
- System.out.println('Min Dist= ' + this._minDistanceFound + ' err= ' + (1.0 - this._minDistanceFound / this._bufDistance) + ' Max Dist= ' + this._maxDistanceFound + ' err= ' + (this._maxDistanceFound / this._bufDistance - 1.0));
- }
- return this._isValid
- };
- BufferDistanceValidator.prototype.checkNegativeValid = function checkNegativeValid () {
- if (!(this._input instanceof Polygon || this._input instanceof MultiPolygon || this._input instanceof GeometryCollection)) {
- return null
- }
- var inputCurve = this.getPolygonLines(this._input);
- this.checkMinimumDistance(inputCurve, this._result, this._minValidDistance);
- if (!this._isValid) { return null }
- this.checkMaximumDistance(inputCurve, this._result, this._maxValidDistance);
- };
- BufferDistanceValidator.prototype.getErrorIndicator = function getErrorIndicator () {
- return this._errorIndicator
- };
- BufferDistanceValidator.prototype.checkMinimumDistance = function checkMinimumDistance (g1, g2, minDist) {
- var distOp = new DistanceOp(g1, g2, minDist);
- this._minDistanceFound = distOp.distance();
- if (this._minDistanceFound < minDist) {
- this._isValid = false;
- var pts = distOp.nearestPoints();
- this._errorLocation = distOp.nearestPoints()[1];
- this._errorIndicator = g1.getFactory().createLineString(pts);
- this._errMsg = 'Distance between buffer curve and input is too small (' + this._minDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ' )';
- }
- };
- BufferDistanceValidator.prototype.checkPositiveValid = function checkPositiveValid () {
- var bufCurve = this._result.getBoundary();
- this.checkMinimumDistance(this._input, bufCurve, this._minValidDistance);
- if (!this._isValid) { return null }
- this.checkMaximumDistance(this._input, bufCurve, this._maxValidDistance);
- };
- BufferDistanceValidator.prototype.getErrorLocation = function getErrorLocation () {
- return this._errorLocation
- };
- BufferDistanceValidator.prototype.getPolygonLines = function getPolygonLines (g) {
- var lines = new ArrayList();
- var lineExtracter = new LinearComponentExtracter(lines);
- var polys = PolygonExtracter.getPolygons(g);
- for (var i = polys.iterator(); i.hasNext();) {
- var poly = i.next();
- poly.apply(lineExtracter);
- }
- return g.getFactory().buildGeometry(lines)
- };
- BufferDistanceValidator.prototype.getErrorMessage = function getErrorMessage () {
- return this._errMsg
- };
- BufferDistanceValidator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferDistanceValidator.prototype.getClass = function getClass () {
- return BufferDistanceValidator
- };
- staticAccessors$37.VERBOSE.get = function () { return false };
- staticAccessors$37.MAX_DISTANCE_DIFF_FRAC.get = function () { return 0.012 };
- Object.defineProperties( BufferDistanceValidator, staticAccessors$37 );
- var BufferResultValidator = function BufferResultValidator (input, distance, result) {
- this._isValid = true;
- this._errorMsg = null;
- this._errorLocation = null;
- this._errorIndicator = null;
- this._input = input || null;
- this._distance = distance || null;
- this._result = result || null;
- };
- var staticAccessors$40 = { VERBOSE: { configurable: true },MAX_ENV_DIFF_FRAC: { configurable: true } };
- BufferResultValidator.prototype.isValid = function isValid () {
- this.checkPolygonal();
- if (!this._isValid) { return this._isValid }
- this.checkExpectedEmpty();
- if (!this._isValid) { return this._isValid }
- this.checkEnvelope();
- if (!this._isValid) { return this._isValid }
- this.checkArea();
- if (!this._isValid) { return this._isValid }
- this.checkDistance();
- return this._isValid
- };
- BufferResultValidator.prototype.checkEnvelope = function checkEnvelope () {
- if (this._distance < 0.0) { return null }
- var padding = this._distance * BufferResultValidator.MAX_ENV_DIFF_FRAC;
- if (padding === 0.0) { padding = 0.001; }
- var expectedEnv = new Envelope(this._input.getEnvelopeInternal());
- expectedEnv.expandBy(this._distance);
- var bufEnv = new Envelope(this._result.getEnvelopeInternal());
- bufEnv.expandBy(padding);
- if (!bufEnv.contains(expectedEnv)) {
- this._isValid = false;
- this._errorMsg = 'Buffer envelope is incorrect';
- this._errorIndicator = this._input.getFactory().toGeometry(bufEnv);
- }
- this.report('Envelope');
- };
- BufferResultValidator.prototype.checkDistance = function checkDistance () {
- var distValid = new BufferDistanceValidator(this._input, this._distance, this._result);
- if (!distValid.isValid()) {
- this._isValid = false;
- this._errorMsg = distValid.getErrorMessage();
- this._errorLocation = distValid.getErrorLocation();
- this._errorIndicator = distValid.getErrorIndicator();
- }
- this.report('Distance');
- };
- BufferResultValidator.prototype.checkArea = function checkArea () {
- var inputArea = this._input.getArea();
- var resultArea = this._result.getArea();
- if (this._distance > 0.0 && inputArea > resultArea) {
- this._isValid = false;
- this._errorMsg = 'Area of positive buffer is smaller than input';
- this._errorIndicator = this._result;
- }
- if (this._distance < 0.0 && inputArea < resultArea) {
- this._isValid = false;
- this._errorMsg = 'Area of negative buffer is larger than input';
- this._errorIndicator = this._result;
- }
- this.report('Area');
- };
- BufferResultValidator.prototype.checkPolygonal = function checkPolygonal () {
- if (!(this._result instanceof Polygon || this._result instanceof MultiPolygon)) { this._isValid = false; }
- this._errorMsg = 'Result is not polygonal';
- this._errorIndicator = this._result;
- this.report('Polygonal');
- };
- BufferResultValidator.prototype.getErrorIndicator = function getErrorIndicator () {
- return this._errorIndicator
- };
- BufferResultValidator.prototype.getErrorLocation = function getErrorLocation () {
- return this._errorLocation
- };
- BufferResultValidator.prototype.checkExpectedEmpty = function checkExpectedEmpty () {
- if (this._input.getDimension() >= 2) { return null }
- if (this._distance > 0.0) { return null }
- if (!this._result.isEmpty()) {
- this._isValid = false;
- this._errorMsg = 'Result is non-empty';
- this._errorIndicator = this._result;
- }
- this.report('ExpectedEmpty');
- };
- BufferResultValidator.prototype.report = function report (checkName) {
- if (!BufferResultValidator.VERBOSE) { return null }
- System.out.println('Check ' + checkName + ': ' + (this._isValid ? 'passed' : 'FAILED'));
- };
- BufferResultValidator.prototype.getErrorMessage = function getErrorMessage () {
- return this._errorMsg
- };
- BufferResultValidator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- BufferResultValidator.prototype.getClass = function getClass () {
- return BufferResultValidator
- };
- BufferResultValidator.isValidMsg = function isValidMsg (g, distance, result) {
- var validator = new BufferResultValidator(g, distance, result);
- if (!validator.isValid()) { return validator.getErrorMessage() }
- return null
- };
- BufferResultValidator.isValid = function isValid (g, distance, result) {
- var validator = new BufferResultValidator(g, distance, result);
- if (validator.isValid()) { return true }
- return false
- };
- staticAccessors$40.VERBOSE.get = function () { return false };
- staticAccessors$40.MAX_ENV_DIFF_FRAC.get = function () { return 0.012 };
- Object.defineProperties( BufferResultValidator, staticAccessors$40 );
- // operation.buffer
- var BasicSegmentString = function BasicSegmentString () {
- this._pts = null;
- this._data = null;
- var pts = arguments[0];
- var data = arguments[1];
- this._pts = pts;
- this._data = data;
- };
- BasicSegmentString.prototype.getCoordinates = function getCoordinates () {
- return this._pts
- };
- BasicSegmentString.prototype.size = function size () {
- return this._pts.length
- };
- BasicSegmentString.prototype.getCoordinate = function getCoordinate (i) {
- return this._pts[i]
- };
- BasicSegmentString.prototype.isClosed = function isClosed () {
- return this._pts[0].equals(this._pts[this._pts.length - 1])
- };
- BasicSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
- if (index === this._pts.length - 1) { return -1 }
- return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))
- };
- BasicSegmentString.prototype.setData = function setData (data) {
- this._data = data;
- };
- BasicSegmentString.prototype.getData = function getData () {
- return this._data
- };
- BasicSegmentString.prototype.toString = function toString () {
- return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
- };
- BasicSegmentString.prototype.interfaces_ = function interfaces_ () {
- return [SegmentString]
- };
- BasicSegmentString.prototype.getClass = function getClass () {
- return BasicSegmentString
- };
- var InteriorIntersectionFinder = function InteriorIntersectionFinder () {
- this._findAllIntersections = false;
- this._isCheckEndSegmentsOnly = false;
- this._li = null;
- this._interiorIntersection = null;
- this._intSegments = null;
- this._intersections = new ArrayList();
- this._intersectionCount = 0;
- this._keepIntersections = true;
- var li = arguments[0];
- this._li = li;
- this._interiorIntersection = null;
- };
- InteriorIntersectionFinder.prototype.getInteriorIntersection = function getInteriorIntersection () {
- return this._interiorIntersection
- };
- InteriorIntersectionFinder.prototype.setCheckEndSegmentsOnly = function setCheckEndSegmentsOnly (isCheckEndSegmentsOnly) {
- this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;
- };
- InteriorIntersectionFinder.prototype.getIntersectionSegments = function getIntersectionSegments () {
- return this._intSegments
- };
- InteriorIntersectionFinder.prototype.count = function count () {
- return this._intersectionCount
- };
- InteriorIntersectionFinder.prototype.getIntersections = function getIntersections () {
- return this._intersections
- };
- InteriorIntersectionFinder.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
- this._findAllIntersections = findAllIntersections;
- };
- InteriorIntersectionFinder.prototype.setKeepIntersections = function setKeepIntersections (keepIntersections) {
- this._keepIntersections = keepIntersections;
- };
- InteriorIntersectionFinder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
- if (!this._findAllIntersections && this.hasIntersection()) { return null }
- if (e0 === e1 && segIndex0 === segIndex1) { return null }
- if (this._isCheckEndSegmentsOnly) {
- var isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);
- if (!isEndSegPresent) { return null }
- }
- var p00 = e0.getCoordinates()[segIndex0];
- var p01 = e0.getCoordinates()[segIndex0 + 1];
- var p10 = e1.getCoordinates()[segIndex1];
- var p11 = e1.getCoordinates()[segIndex1 + 1];
- this._li.computeIntersection(p00, p01, p10, p11);
- if (this._li.hasIntersection()) {
- if (this._li.isInteriorIntersection()) {
- this._intSegments = new Array(4).fill(null);
- this._intSegments[0] = p00;
- this._intSegments[1] = p01;
- this._intSegments[2] = p10;
- this._intSegments[3] = p11;
- this._interiorIntersection = this._li.getIntersection(0);
- if (this._keepIntersections) { this._intersections.add(this._interiorIntersection); }
- this._intersectionCount++;
- }
- }
- };
- InteriorIntersectionFinder.prototype.isEndSegment = function isEndSegment (segStr, index) {
- if (index === 0) { return true }
- if (index >= segStr.size() - 2) { return true }
- return false
- };
- InteriorIntersectionFinder.prototype.hasIntersection = function hasIntersection () {
- return this._interiorIntersection !== null
- };
- InteriorIntersectionFinder.prototype.isDone = function isDone () {
- if (this._findAllIntersections) { return false }
- return this._interiorIntersection !== null
- };
- InteriorIntersectionFinder.prototype.interfaces_ = function interfaces_ () {
- return [SegmentIntersector]
- };
- InteriorIntersectionFinder.prototype.getClass = function getClass () {
- return InteriorIntersectionFinder
- };
- InteriorIntersectionFinder.createAllIntersectionsFinder = function createAllIntersectionsFinder (li) {
- var finder = new InteriorIntersectionFinder(li);
- finder.setFindAllIntersections(true);
- return finder
- };
- InteriorIntersectionFinder.createAnyIntersectionFinder = function createAnyIntersectionFinder (li) {
- return new InteriorIntersectionFinder(li)
- };
- InteriorIntersectionFinder.createIntersectionCounter = function createIntersectionCounter (li) {
- var finder = new InteriorIntersectionFinder(li);
- finder.setFindAllIntersections(true);
- finder.setKeepIntersections(false);
- return finder
- };
- var FastNodingValidator = function FastNodingValidator () {
- this._li = new RobustLineIntersector();
- this._segStrings = null;
- this._findAllIntersections = false;
- this._segInt = null;
- this._isValid = true;
- var segStrings = arguments[0];
- this._segStrings = segStrings;
- };
- FastNodingValidator.prototype.execute = function execute () {
- if (this._segInt !== null) { return null }
- this.checkInteriorIntersections();
- };
- FastNodingValidator.prototype.getIntersections = function getIntersections () {
- return this._segInt.getIntersections()
- };
- FastNodingValidator.prototype.isValid = function isValid () {
- this.execute();
- return this._isValid
- };
- FastNodingValidator.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
- this._findAllIntersections = findAllIntersections;
- };
- FastNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
- this._isValid = true;
- this._segInt = new InteriorIntersectionFinder(this._li);
- this._segInt.setFindAllIntersections(this._findAllIntersections);
- var noder = new MCIndexNoder();
- noder.setSegmentIntersector(this._segInt);
- noder.computeNodes(this._segStrings);
- if (this._segInt.hasIntersection()) {
- this._isValid = false;
- return null
- }
- };
- FastNodingValidator.prototype.checkValid = function checkValid () {
- this.execute();
- if (!this._isValid) { throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }
- };
- FastNodingValidator.prototype.getErrorMessage = function getErrorMessage () {
- if (this._isValid) { return 'no intersections found' }
- var intSegs = this._segInt.getIntersectionSegments();
- return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])
- };
- FastNodingValidator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- FastNodingValidator.prototype.getClass = function getClass () {
- return FastNodingValidator
- };
- FastNodingValidator.computeIntersections = function computeIntersections (segStrings) {
- var nv = new FastNodingValidator(segStrings);
- nv.setFindAllIntersections(true);
- nv.isValid();
- return nv.getIntersections()
- };
- var EdgeNodingValidator = function EdgeNodingValidator () {
- this._nv = null;
- var edges = arguments[0];
- this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));
- };
- EdgeNodingValidator.prototype.checkValid = function checkValid () {
- this._nv.checkValid();
- };
- EdgeNodingValidator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- EdgeNodingValidator.prototype.getClass = function getClass () {
- return EdgeNodingValidator
- };
- EdgeNodingValidator.toSegmentStrings = function toSegmentStrings (edges) {
- var segStrings = new ArrayList();
- for (var i = edges.iterator(); i.hasNext();) {
- var e = i.next();
- segStrings.add(new BasicSegmentString(e.getCoordinates(), e));
- }
- return segStrings
- };
- EdgeNodingValidator.checkValid = function checkValid (edges) {
- var validator = new EdgeNodingValidator(edges);
- validator.checkValid();
- };
- var GeometryCollectionMapper = function GeometryCollectionMapper (mapOp) {
- this._mapOp = mapOp;
- };
- GeometryCollectionMapper.prototype.map = function map (gc) {
- var this$1 = this;
- var mapped = new ArrayList();
- for (var i = 0; i < gc.getNumGeometries(); i++) {
- var g = this$1._mapOp.map(gc.getGeometryN(i));
- if (!g.isEmpty()) { mapped.add(g); }
- }
- return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))
- };
- GeometryCollectionMapper.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryCollectionMapper.prototype.getClass = function getClass () {
- return GeometryCollectionMapper
- };
- GeometryCollectionMapper.map = function map (gc, op) {
- var mapper = new GeometryCollectionMapper(op);
- return mapper.map(gc)
- };
- var LineBuilder = function LineBuilder () {
- this._op = null;
- this._geometryFactory = null;
- this._ptLocator = null;
- this._lineEdgesList = new ArrayList();
- this._resultLineList = new ArrayList();
- var op = arguments[0];
- var geometryFactory = arguments[1];
- var ptLocator = arguments[2];
- this._op = op;
- this._geometryFactory = geometryFactory;
- this._ptLocator = ptLocator;
- };
- LineBuilder.prototype.collectLines = function collectLines (opCode) {
- var this$1 = this;
- for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
- var de = it.next();
- this$1.collectLineEdge(de, opCode, this$1._lineEdgesList);
- this$1.collectBoundaryTouchEdge(de, opCode, this$1._lineEdgesList);
- }
- };
- LineBuilder.prototype.labelIsolatedLine = function labelIsolatedLine (e, targetIndex) {
- var loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));
- e.getLabel().setLocation(targetIndex, loc);
- };
- LineBuilder.prototype.build = function build (opCode) {
- this.findCoveredLineEdges();
- this.collectLines(opCode);
- this.buildLines(opCode);
- return this._resultLineList
- };
- LineBuilder.prototype.collectLineEdge = function collectLineEdge (de, opCode, edges) {
- var label = de.getLabel();
- var e = de.getEdge();
- if (de.isLineEdge()) {
- if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {
- edges.add(e);
- de.setVisitedEdge(true);
- }
- }
- };
- LineBuilder.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
- var this$1 = this;
- for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- node.getEdges().findCoveredLineEdges();
- }
- for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
- var de = it.next();
- var e = de.getEdge();
- if (de.isLineEdge() && !e.isCoveredSet()) {
- var isCovered = this$1._op.isCoveredByA(de.getCoordinate());
- e.setCovered(isCovered);
- }
- }
- };
- LineBuilder.prototype.labelIsolatedLines = function labelIsolatedLines (edgesList) {
- var this$1 = this;
- for (var it = edgesList.iterator(); it.hasNext();) {
- var e = it.next();
- var label = e.getLabel();
- if (e.isIsolated()) {
- if (label.isNull(0)) { this$1.labelIsolatedLine(e, 0); } else { this$1.labelIsolatedLine(e, 1); }
- }
- }
- };
- LineBuilder.prototype.buildLines = function buildLines (opCode) {
- var this$1 = this;
- for (var it = this._lineEdgesList.iterator(); it.hasNext();) {
- var e = it.next();
- // const label = e.getLabel()
- var line = this$1._geometryFactory.createLineString(e.getCoordinates());
- this$1._resultLineList.add(line);
- e.setInResult(true);
- }
- };
- LineBuilder.prototype.collectBoundaryTouchEdge = function collectBoundaryTouchEdge (de, opCode, edges) {
- var label = de.getLabel();
- if (de.isLineEdge()) { return null }
- if (de.isVisited()) { return null }
- if (de.isInteriorAreaEdge()) { return null }
- if (de.getEdge().isInResult()) { return null }
- Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());
- if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {
- edges.add(de.getEdge());
- de.setVisitedEdge(true);
- }
- };
- LineBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- LineBuilder.prototype.getClass = function getClass () {
- return LineBuilder
- };
- var PointBuilder = function PointBuilder () {
- this._op = null;
- this._geometryFactory = null;
- this._resultPointList = new ArrayList();
- var op = arguments[0];
- var geometryFactory = arguments[1];
- // const ptLocator = arguments[2]
- this._op = op;
- this._geometryFactory = geometryFactory;
- };
- PointBuilder.prototype.filterCoveredNodeToPoint = function filterCoveredNodeToPoint (n) {
- var coord = n.getCoordinate();
- if (!this._op.isCoveredByLA(coord)) {
- var pt = this._geometryFactory.createPoint(coord);
- this._resultPointList.add(pt);
- }
- };
- PointBuilder.prototype.extractNonCoveredResultNodes = function extractNonCoveredResultNodes (opCode) {
- var this$1 = this;
- for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
- var n = nodeit.next();
- if (n.isInResult()) { continue }
- if (n.isIncidentEdgeInResult()) { continue }
- if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {
- var label = n.getLabel();
- if (OverlayOp.isResultOfOp(label, opCode)) {
- this$1.filterCoveredNodeToPoint(n);
- }
- }
- }
- };
- PointBuilder.prototype.build = function build (opCode) {
- this.extractNonCoveredResultNodes(opCode);
- return this._resultPointList
- };
- PointBuilder.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- PointBuilder.prototype.getClass = function getClass () {
- return PointBuilder
- };
- var GeometryTransformer = function GeometryTransformer () {
- this._inputGeom = null;
- this._factory = null;
- this._pruneEmptyGeometry = true;
- this._preserveGeometryCollectionType = true;
- this._preserveCollections = false;
- this._preserveType = false;
- };
- GeometryTransformer.prototype.transformPoint = function transformPoint (geom, parent) {
- return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))
- };
- GeometryTransformer.prototype.transformPolygon = function transformPolygon (geom, parent) {
- var this$1 = this;
- var isAllValidLinearRings = true;
- var shell = this.transformLinearRing(geom.getExteriorRing(), geom);
- if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) { isAllValidLinearRings = false; }
- var holes = new ArrayList();
- for (var i = 0; i < geom.getNumInteriorRing(); i++) {
- var hole = this$1.transformLinearRing(geom.getInteriorRingN(i), geom);
- if (hole === null || hole.isEmpty()) {
- continue
- }
- if (!(hole instanceof LinearRing)) { isAllValidLinearRings = false; }
- holes.add(hole);
- }
- if (isAllValidLinearRings) { return this._factory.createPolygon(shell, holes.toArray([])); } else {
- var components = new ArrayList();
- if (shell !== null) { components.add(shell); }
- components.addAll(holes);
- return this._factory.buildGeometry(components)
- }
- };
- GeometryTransformer.prototype.createCoordinateSequence = function createCoordinateSequence (coords) {
- return this._factory.getCoordinateSequenceFactory().create(coords)
- };
- GeometryTransformer.prototype.getInputGeometry = function getInputGeometry () {
- return this._inputGeom
- };
- GeometryTransformer.prototype.transformMultiLineString = function transformMultiLineString (geom, parent) {
- var this$1 = this;
- var transGeomList = new ArrayList();
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var transformGeom = this$1.transformLineString(geom.getGeometryN(i), geom);
- if (transformGeom === null) { continue }
- if (transformGeom.isEmpty()) { continue }
- transGeomList.add(transformGeom);
- }
- return this._factory.buildGeometry(transGeomList)
- };
- GeometryTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
- return this.copy(coords)
- };
- GeometryTransformer.prototype.transformLineString = function transformLineString (geom, parent) {
- return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))
- };
- GeometryTransformer.prototype.transformMultiPoint = function transformMultiPoint (geom, parent) {
- var this$1 = this;
- var transGeomList = new ArrayList();
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var transformGeom = this$1.transformPoint(geom.getGeometryN(i), geom);
- if (transformGeom === null) { continue }
- if (transformGeom.isEmpty()) { continue }
- transGeomList.add(transformGeom);
- }
- return this._factory.buildGeometry(transGeomList)
- };
- GeometryTransformer.prototype.transformMultiPolygon = function transformMultiPolygon (geom, parent) {
- var this$1 = this;
- var transGeomList = new ArrayList();
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var transformGeom = this$1.transformPolygon(geom.getGeometryN(i), geom);
- if (transformGeom === null) { continue }
- if (transformGeom.isEmpty()) { continue }
- transGeomList.add(transformGeom);
- }
- return this._factory.buildGeometry(transGeomList)
- };
- GeometryTransformer.prototype.copy = function copy (seq) {
- return seq.copy()
- };
- GeometryTransformer.prototype.transformGeometryCollection = function transformGeometryCollection (geom, parent) {
- var this$1 = this;
- var transGeomList = new ArrayList();
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var transformGeom = this$1.transform(geom.getGeometryN(i));
- if (transformGeom === null) { continue }
- if (this$1._pruneEmptyGeometry && transformGeom.isEmpty()) { continue }
- transGeomList.add(transformGeom);
- }
- if (this._preserveGeometryCollectionType) { return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList)) }
- return this._factory.buildGeometry(transGeomList)
- };
- GeometryTransformer.prototype.transform = function transform (inputGeom) {
- this._inputGeom = inputGeom;
- this._factory = inputGeom.getFactory();
- if (inputGeom instanceof Point) { return this.transformPoint(inputGeom, null) }
- if (inputGeom instanceof MultiPoint) { return this.transformMultiPoint(inputGeom, null) }
- if (inputGeom instanceof LinearRing) { return this.transformLinearRing(inputGeom, null) }
- if (inputGeom instanceof LineString) { return this.transformLineString(inputGeom, null) }
- if (inputGeom instanceof MultiLineString) { return this.transformMultiLineString(inputGeom, null) }
- if (inputGeom instanceof Polygon) { return this.transformPolygon(inputGeom, null) }
- if (inputGeom instanceof MultiPolygon) { return this.transformMultiPolygon(inputGeom, null) }
- if (inputGeom instanceof GeometryCollection) { return this.transformGeometryCollection(inputGeom, null) }
- throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getClass().getName())
- };
- GeometryTransformer.prototype.transformLinearRing = function transformLinearRing (geom, parent) {
- var seq = this.transformCoordinates(geom.getCoordinateSequence(), geom);
- if (seq === null) { return this._factory.createLinearRing(null) }
- var seqSize = seq.size();
- if (seqSize > 0 && seqSize < 4 && !this._preserveType) { return this._factory.createLineString(seq) }
- return this._factory.createLinearRing(seq)
- };
- GeometryTransformer.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryTransformer.prototype.getClass = function getClass () {
- return GeometryTransformer
- };
- var LineStringSnapper = function LineStringSnapper () {
- this._snapTolerance = 0.0;
- this._srcPts = null;
- this._seg = new LineSegment();
- this._allowSnappingToSourceVertices = false;
- this._isClosed = false;
- if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {
- var srcLine = arguments[0];
- var snapTolerance = arguments[1];
- LineStringSnapper.call(this, srcLine.getCoordinates(), snapTolerance);
- } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {
- var srcPts = arguments[0];
- var snapTolerance$1 = arguments[1];
- this._srcPts = srcPts;
- this._isClosed = LineStringSnapper.isClosed(srcPts);
- this._snapTolerance = snapTolerance$1;
- }
- };
- LineStringSnapper.prototype.snapVertices = function snapVertices (srcCoords, snapPts) {
- var this$1 = this;
- var end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();
- for (var i = 0; i < end; i++) {
- var srcPt = srcCoords.get(i);
- var snapVert = this$1.findSnapForVertex(srcPt, snapPts);
- if (snapVert !== null) {
- srcCoords.set(i, new Coordinate(snapVert));
- if (i === 0 && this$1._isClosed) { srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert)); }
- }
- }
- };
- LineStringSnapper.prototype.findSnapForVertex = function findSnapForVertex (pt, snapPts) {
- var this$1 = this;
- for (var i = 0; i < snapPts.length; i++) {
- if (pt.equals2D(snapPts[i])) { return null }
- if (pt.distance(snapPts[i]) < this$1._snapTolerance) { return snapPts[i] }
- }
- return null
- };
- LineStringSnapper.prototype.snapTo = function snapTo (snapPts) {
- var coordList = new CoordinateList(this._srcPts);
- this.snapVertices(coordList, snapPts);
- this.snapSegments(coordList, snapPts);
- var newPts = coordList.toCoordinateArray();
- return newPts
- };
- LineStringSnapper.prototype.snapSegments = function snapSegments (srcCoords, snapPts) {
- var this$1 = this;
- if (snapPts.length === 0) { return null }
- var distinctPtCount = snapPts.length;
- if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) { distinctPtCount = snapPts.length - 1; }
- for (var i = 0; i < distinctPtCount; i++) {
- var snapPt = snapPts[i];
- var index = this$1.findSegmentIndexToSnap(snapPt, srcCoords);
- if (index >= 0) {
- srcCoords.add(index + 1, new Coordinate(snapPt), false);
- }
- }
- };
- LineStringSnapper.prototype.findSegmentIndexToSnap = function findSegmentIndexToSnap (snapPt, srcCoords) {
- var this$1 = this;
- var minDist = Double.MAX_VALUE;
- var snapIndex = -1;
- for (var i = 0; i < srcCoords.size() - 1; i++) {
- this$1._seg.p0 = srcCoords.get(i);
- this$1._seg.p1 = srcCoords.get(i + 1);
- if (this$1._seg.p0.equals2D(snapPt) || this$1._seg.p1.equals2D(snapPt)) {
- if (this$1._allowSnappingToSourceVertices) { continue; } else { return -1 }
- }
- var dist = this$1._seg.distance(snapPt);
- if (dist < this$1._snapTolerance && dist < minDist) {
- minDist = dist;
- snapIndex = i;
- }
- }
- return snapIndex
- };
- LineStringSnapper.prototype.setAllowSnappingToSourceVertices = function setAllowSnappingToSourceVertices (allowSnappingToSourceVertices) {
- this._allowSnappingToSourceVertices = allowSnappingToSourceVertices;
- };
- LineStringSnapper.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- LineStringSnapper.prototype.getClass = function getClass () {
- return LineStringSnapper
- };
- LineStringSnapper.isClosed = function isClosed (pts) {
- if (pts.length <= 1) { return false }
- return pts[0].equals2D(pts[pts.length - 1])
- };
- var GeometrySnapper = function GeometrySnapper (srcGeom) {
- this._srcGeom = srcGeom || null;
- };
- var staticAccessors$41 = { SNAP_PRECISION_FACTOR: { configurable: true } };
- GeometrySnapper.prototype.snapTo = function snapTo (snapGeom, snapTolerance) {
- var snapPts = this.extractTargetCoordinates(snapGeom);
- var snapTrans = new SnapTransformer(snapTolerance, snapPts);
- return snapTrans.transform(this._srcGeom)
- };
- GeometrySnapper.prototype.snapToSelf = function snapToSelf (snapTolerance, cleanResult) {
- var snapPts = this.extractTargetCoordinates(this._srcGeom);
- var snapTrans = new SnapTransformer(snapTolerance, snapPts, true);
- var snappedGeom = snapTrans.transform(this._srcGeom);
- var result = snappedGeom;
- if (cleanResult && hasInterface(result, Polygonal)) {
- result = snappedGeom.buffer(0);
- }
- return result
- };
- GeometrySnapper.prototype.computeSnapTolerance = function computeSnapTolerance (ringPts) {
- var minSegLen = this.computeMinimumSegmentLength(ringPts);
- var snapTol = minSegLen / 10;
- return snapTol
- };
- GeometrySnapper.prototype.extractTargetCoordinates = function extractTargetCoordinates (g) {
- var ptSet = new TreeSet();
- var pts = g.getCoordinates();
- for (var i = 0; i < pts.length; i++) {
- ptSet.add(pts[i]);
- }
- return ptSet.toArray(new Array(0).fill(null))
- };
- GeometrySnapper.prototype.computeMinimumSegmentLength = function computeMinimumSegmentLength (pts) {
- var minSegLen = Double.MAX_VALUE;
- for (var i = 0; i < pts.length - 1; i++) {
- var segLen = pts[i].distance(pts[i + 1]);
- if (segLen < minSegLen) { minSegLen = segLen; }
- }
- return minSegLen
- };
- GeometrySnapper.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometrySnapper.prototype.getClass = function getClass () {
- return GeometrySnapper
- };
- GeometrySnapper.snap = function snap (g0, g1, snapTolerance) {
- var snapGeom = new Array(2).fill(null);
- var snapper0 = new GeometrySnapper(g0);
- snapGeom[0] = snapper0.snapTo(g1, snapTolerance);
- var snapper1 = new GeometrySnapper(g1);
- snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);
- return snapGeom
- };
- GeometrySnapper.computeOverlaySnapTolerance = function computeOverlaySnapTolerance () {
- if (arguments.length === 1) {
- var g = arguments[0];
- var snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);
- var pm = g.getPrecisionModel();
- if (pm.getType() === PrecisionModel.FIXED) {
- var fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;
- if (fixedSnapTol > snapTolerance) { snapTolerance = fixedSnapTol; }
- }
- return snapTolerance
- } else if (arguments.length === 2) {
- var g0 = arguments[0];
- var g1 = arguments[1];
- return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))
- }
- };
- GeometrySnapper.computeSizeBasedSnapTolerance = function computeSizeBasedSnapTolerance (g) {
- var env = g.getEnvelopeInternal();
- var minDimension = Math.min(env.getHeight(), env.getWidth());
- var snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;
- return snapTol
- };
- GeometrySnapper.snapToSelf = function snapToSelf (geom, snapTolerance, cleanResult) {
- var snapper0 = new GeometrySnapper(geom);
- return snapper0.snapToSelf(snapTolerance, cleanResult)
- };
- staticAccessors$41.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 };
- Object.defineProperties( GeometrySnapper, staticAccessors$41 );
- var SnapTransformer = (function (GeometryTransformer$$1) {
- function SnapTransformer (snapTolerance, snapPts, isSelfSnap) {
- GeometryTransformer$$1.call(this);
- this._snapTolerance = snapTolerance || null;
- this._snapPts = snapPts || null;
- this._isSelfSnap = (isSelfSnap !== undefined) ? isSelfSnap : false;
- }
- if ( GeometryTransformer$$1 ) SnapTransformer.__proto__ = GeometryTransformer$$1;
- SnapTransformer.prototype = Object.create( GeometryTransformer$$1 && GeometryTransformer$$1.prototype );
- SnapTransformer.prototype.constructor = SnapTransformer;
- SnapTransformer.prototype.snapLine = function snapLine (srcPts, snapPts) {
- var snapper = new LineStringSnapper(srcPts, this._snapTolerance);
- snapper.setAllowSnappingToSourceVertices(this._isSelfSnap);
- return snapper.snapTo(snapPts)
- };
- SnapTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
- var srcPts = coords.toCoordinateArray();
- var newPts = this.snapLine(srcPts, this._snapPts);
- return this._factory.getCoordinateSequenceFactory().create(newPts)
- };
- SnapTransformer.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SnapTransformer.prototype.getClass = function getClass () {
- return SnapTransformer
- };
- return SnapTransformer;
- }(GeometryTransformer));
- var CommonBits = function CommonBits () {
- this._isFirst = true;
- this._commonMantissaBitsCount = 53;
- this._commonBits = 0;
- this._commonSignExp = null;
- };
- CommonBits.prototype.getCommon = function getCommon () {
- return Double.longBitsToDouble(this._commonBits)
- };
- CommonBits.prototype.add = function add (num) {
- var numBits = Double.doubleToLongBits(num);
- if (this._isFirst) {
- this._commonBits = numBits;
- this._commonSignExp = CommonBits.signExpBits(this._commonBits);
- this._isFirst = false;
- return null
- }
- var numSignExp = CommonBits.signExpBits(numBits);
- if (numSignExp !== this._commonSignExp) {
- this._commonBits = 0;
- return null
- }
- this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);
- this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));
- };
- CommonBits.prototype.toString = function toString () {
- if (arguments.length === 1) {
- var bits = arguments[0];
- var x = Double.longBitsToDouble(bits);
- var numStr = Double.toBinaryString(bits);
- var padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr;
- var bitStr = padStr.substring(padStr.length - 64);
- var str = bitStr.substring(0, 1) + ' ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]';
- return str
- }
- };
- CommonBits.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CommonBits.prototype.getClass = function getClass () {
- return CommonBits
- };
- CommonBits.getBit = function getBit (bits, i) {
- var mask = 1 << i;
- return (bits & mask) !== 0 ? 1 : 0
- };
- CommonBits.signExpBits = function signExpBits (num) {
- return num >> 52
- };
- CommonBits.zeroLowerBits = function zeroLowerBits (bits, nBits) {
- var invMask = (1 << nBits) - 1;
- var mask = ~invMask;
- var zeroed = bits & mask;
- return zeroed
- };
- CommonBits.numCommonMostSigMantissaBits = function numCommonMostSigMantissaBits (num1, num2) {
- var count = 0;
- for (var i = 52; i >= 0; i--) {
- if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) { return count }
- count++;
- }
- return 52
- };
- var CommonBitsRemover = function CommonBitsRemover () {
- this._commonCoord = null;
- this._ccFilter = new CommonCoordinateFilter();
- };
- var staticAccessors$42 = { CommonCoordinateFilter: { configurable: true },Translater: { configurable: true } };
- CommonBitsRemover.prototype.addCommonBits = function addCommonBits (geom) {
- var trans = new Translater(this._commonCoord);
- geom.apply(trans);
- geom.geometryChanged();
- };
- CommonBitsRemover.prototype.removeCommonBits = function removeCommonBits (geom) {
- if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) { return geom }
- var invCoord = new Coordinate(this._commonCoord);
- invCoord.x = -invCoord.x;
- invCoord.y = -invCoord.y;
- var trans = new Translater(invCoord);
- geom.apply(trans);
- geom.geometryChanged();
- return geom
- };
- CommonBitsRemover.prototype.getCommonCoordinate = function getCommonCoordinate () {
- return this._commonCoord
- };
- CommonBitsRemover.prototype.add = function add (geom) {
- geom.apply(this._ccFilter);
- this._commonCoord = this._ccFilter.getCommonCoordinate();
- };
- CommonBitsRemover.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CommonBitsRemover.prototype.getClass = function getClass () {
- return CommonBitsRemover
- };
- staticAccessors$42.CommonCoordinateFilter.get = function () { return CommonCoordinateFilter };
- staticAccessors$42.Translater.get = function () { return Translater };
- Object.defineProperties( CommonBitsRemover, staticAccessors$42 );
- var CommonCoordinateFilter = function CommonCoordinateFilter () {
- this._commonBitsX = new CommonBits();
- this._commonBitsY = new CommonBits();
- };
- CommonCoordinateFilter.prototype.filter = function filter (coord) {
- this._commonBitsX.add(coord.x);
- this._commonBitsY.add(coord.y);
- };
- CommonCoordinateFilter.prototype.getCommonCoordinate = function getCommonCoordinate () {
- return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())
- };
- CommonCoordinateFilter.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateFilter]
- };
- CommonCoordinateFilter.prototype.getClass = function getClass () {
- return CommonCoordinateFilter
- };
- var Translater = function Translater () {
- this.trans = null;
- var trans = arguments[0];
- this.trans = trans;
- };
- Translater.prototype.filter = function filter (seq, i) {
- var xp = seq.getOrdinate(i, 0) + this.trans.x;
- var yp = seq.getOrdinate(i, 1) + this.trans.y;
- seq.setOrdinate(i, 0, xp);
- seq.setOrdinate(i, 1, yp);
- };
- Translater.prototype.isDone = function isDone () {
- return false
- };
- Translater.prototype.isGeometryChanged = function isGeometryChanged () {
- return true
- };
- Translater.prototype.interfaces_ = function interfaces_ () {
- return [CoordinateSequenceFilter]
- };
- Translater.prototype.getClass = function getClass () {
- return Translater
- };
- var SnapOverlayOp = function SnapOverlayOp (g1, g2) {
- this._geom = new Array(2).fill(null);
- this._snapTolerance = null;
- this._cbr = null;
- this._geom[0] = g1;
- this._geom[1] = g2;
- this.computeSnapTolerance();
- };
- SnapOverlayOp.prototype.selfSnap = function selfSnap (geom) {
- var snapper0 = new GeometrySnapper(geom);
- var snapGeom = snapper0.snapTo(geom, this._snapTolerance);
- return snapGeom
- };
- SnapOverlayOp.prototype.removeCommonBits = function removeCommonBits (geom) {
- this._cbr = new CommonBitsRemover();
- this._cbr.add(geom[0]);
- this._cbr.add(geom[1]);
- var remGeom = new Array(2).fill(null);
- remGeom[0] = this._cbr.removeCommonBits(geom[0].copy());
- remGeom[1] = this._cbr.removeCommonBits(geom[1].copy());
- return remGeom
- };
- SnapOverlayOp.prototype.prepareResult = function prepareResult (geom) {
- this._cbr.addCommonBits(geom);
- return geom
- };
- SnapOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
- var prepGeom = this.snap(this._geom);
- var result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);
- return this.prepareResult(result)
- };
- SnapOverlayOp.prototype.checkValid = function checkValid (g) {
- if (!g.isValid()) {
- System.out.println('Snapped geometry is invalid');
- }
- };
- SnapOverlayOp.prototype.computeSnapTolerance = function computeSnapTolerance () {
- this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);
- };
- SnapOverlayOp.prototype.snap = function snap (geom) {
- var remGeom = this.removeCommonBits(geom);
- var snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);
- return snapGeom
- };
- SnapOverlayOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SnapOverlayOp.prototype.getClass = function getClass () {
- return SnapOverlayOp
- };
- SnapOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
- var op = new SnapOverlayOp(g0, g1);
- return op.getResultGeometry(opCode)
- };
- SnapOverlayOp.union = function union (g0, g1) {
- return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
- };
- SnapOverlayOp.intersection = function intersection (g0, g1) {
- return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
- };
- SnapOverlayOp.symDifference = function symDifference (g0, g1) {
- return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
- };
- SnapOverlayOp.difference = function difference (g0, g1) {
- return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
- };
- var SnapIfNeededOverlayOp = function SnapIfNeededOverlayOp (g1, g2) {
- this._geom = new Array(2).fill(null);
- this._geom[0] = g1;
- this._geom[1] = g2;
- };
- SnapIfNeededOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
- var result = null;
- var isSuccess = false;
- var savedException = null;
- try {
- result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
- var isValid = true;
- if (isValid) { isSuccess = true; }
- } catch (ex) {
- if (ex instanceof RuntimeException) {
- savedException = ex;
- } else { throw ex }
- } finally {}
- if (!isSuccess) {
- try {
- result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
- } catch (ex) {
- if (ex instanceof RuntimeException) {
- throw savedException
- } else { throw ex }
- } finally {}
- }
- return result
- };
- SnapIfNeededOverlayOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SnapIfNeededOverlayOp.prototype.getClass = function getClass () {
- return SnapIfNeededOverlayOp
- };
- SnapIfNeededOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
- var op = new SnapIfNeededOverlayOp(g0, g1);
- return op.getResultGeometry(opCode)
- };
- SnapIfNeededOverlayOp.union = function union (g0, g1) {
- return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
- };
- SnapIfNeededOverlayOp.intersection = function intersection (g0, g1) {
- return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
- };
- SnapIfNeededOverlayOp.symDifference = function symDifference (g0, g1) {
- return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
- };
- SnapIfNeededOverlayOp.difference = function difference (g0, g1) {
- return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
- };
- var MonotoneChain$2 = function MonotoneChain () {
- this.mce = null;
- this.chainIndex = null;
- var mce = arguments[0];
- var chainIndex = arguments[1];
- this.mce = mce;
- this.chainIndex = chainIndex;
- };
- MonotoneChain$2.prototype.computeIntersections = function computeIntersections (mc, si) {
- this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si);
- };
- MonotoneChain$2.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- MonotoneChain$2.prototype.getClass = function getClass () {
- return MonotoneChain$2
- };
- var SweepLineEvent = function SweepLineEvent () {
- this._label = null;
- this._xValue = null;
- this._eventType = null;
- this._insertEvent = null;
- this._deleteEventIndex = null;
- this._obj = null;
- if (arguments.length === 2) {
- var x = arguments[0];
- var insertEvent = arguments[1];
- this._eventType = SweepLineEvent.DELETE;
- this._xValue = x;
- this._insertEvent = insertEvent;
- } else if (arguments.length === 3) {
- var label = arguments[0];
- var x$1 = arguments[1];
- var obj = arguments[2];
- this._eventType = SweepLineEvent.INSERT;
- this._label = label;
- this._xValue = x$1;
- this._obj = obj;
- }
- };
- var staticAccessors$43 = { INSERT: { configurable: true },DELETE: { configurable: true } };
- SweepLineEvent.prototype.isDelete = function isDelete () {
- return this._eventType === SweepLineEvent.DELETE
- };
- SweepLineEvent.prototype.setDeleteEventIndex = function setDeleteEventIndex (deleteEventIndex) {
- this._deleteEventIndex = deleteEventIndex;
- };
- SweepLineEvent.prototype.getObject = function getObject () {
- return this._obj
- };
- SweepLineEvent.prototype.compareTo = function compareTo (o) {
- var pe = o;
- if (this._xValue < pe._xValue) { return -1 }
- if (this._xValue > pe._xValue) { return 1 }
- if (this._eventType < pe._eventType) { return -1 }
- if (this._eventType > pe._eventType) { return 1 }
- return 0
- };
- SweepLineEvent.prototype.getInsertEvent = function getInsertEvent () {
- return this._insertEvent
- };
- SweepLineEvent.prototype.isInsert = function isInsert () {
- return this._eventType === SweepLineEvent.INSERT
- };
- SweepLineEvent.prototype.isSameLabel = function isSameLabel (ev) {
- if (this._label === null) { return false }
- return this._label === ev._label
- };
- SweepLineEvent.prototype.getDeleteEventIndex = function getDeleteEventIndex () {
- return this._deleteEventIndex
- };
- SweepLineEvent.prototype.interfaces_ = function interfaces_ () {
- return [Comparable]
- };
- SweepLineEvent.prototype.getClass = function getClass () {
- return SweepLineEvent
- };
- staticAccessors$43.INSERT.get = function () { return 1 };
- staticAccessors$43.DELETE.get = function () { return 2 };
- Object.defineProperties( SweepLineEvent, staticAccessors$43 );
- var EdgeSetIntersector = function EdgeSetIntersector () {};
- EdgeSetIntersector.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- EdgeSetIntersector.prototype.getClass = function getClass () {
- return EdgeSetIntersector
- };
- var SegmentIntersector$2 = function SegmentIntersector () {
- this._hasIntersection = false;
- this._hasProper = false;
- this._hasProperInterior = false;
- this._properIntersectionPoint = null;
- this._li = null;
- this._includeProper = null;
- this._recordIsolated = null;
- this._isSelfIntersection = null;
- this._numIntersections = 0;
- this.numTests = 0;
- this._bdyNodes = null;
- this._isDone = false;
- this._isDoneWhenProperInt = false;
- var li = arguments[0];
- var includeProper = arguments[1];
- var recordIsolated = arguments[2];
- this._li = li;
- this._includeProper = includeProper;
- this._recordIsolated = recordIsolated;
- };
- SegmentIntersector$2.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
- if (e0 === e1) {
- if (this._li.getIntersectionNum() === 1) {
- if (SegmentIntersector$2.isAdjacentSegments(segIndex0, segIndex1)) { return true }
- if (e0.isClosed()) {
- var maxSegIndex = e0.getNumPoints() - 1;
- if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
- (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
- return true
- }
- }
- }
- }
- return false
- };
- SegmentIntersector$2.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
- return this._properIntersectionPoint
- };
- SegmentIntersector$2.prototype.setIsDoneIfProperInt = function setIsDoneIfProperInt (isDoneWhenProperInt) {
- this._isDoneWhenProperInt = isDoneWhenProperInt;
- };
- SegmentIntersector$2.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
- return this._hasProperInterior
- };
- SegmentIntersector$2.prototype.isBoundaryPointInternal = function isBoundaryPointInternal (li, bdyNodes) {
- for (var i = bdyNodes.iterator(); i.hasNext();) {
- var node = i.next();
- var pt = node.getCoordinate();
- if (li.isIntersection(pt)) { return true }
- }
- return false
- };
- SegmentIntersector$2.prototype.hasProperIntersection = function hasProperIntersection () {
- return this._hasProper
- };
- SegmentIntersector$2.prototype.hasIntersection = function hasIntersection () {
- return this._hasIntersection
- };
- SegmentIntersector$2.prototype.isDone = function isDone () {
- return this._isDone
- };
- SegmentIntersector$2.prototype.isBoundaryPoint = function isBoundaryPoint (li, bdyNodes) {
- if (bdyNodes === null) { return false }
- if (this.isBoundaryPointInternal(li, bdyNodes[0])) { return true }
- if (this.isBoundaryPointInternal(li, bdyNodes[1])) { return true }
- return false
- };
- SegmentIntersector$2.prototype.setBoundaryNodes = function setBoundaryNodes (bdyNodes0, bdyNodes1) {
- this._bdyNodes = new Array(2).fill(null);
- this._bdyNodes[0] = bdyNodes0;
- this._bdyNodes[1] = bdyNodes1;
- };
- SegmentIntersector$2.prototype.addIntersections = function addIntersections (e0, segIndex0, e1, segIndex1) {
- if (e0 === e1 && segIndex0 === segIndex1) { return null }
- this.numTests++;
- var p00 = e0.getCoordinates()[segIndex0];
- var p01 = e0.getCoordinates()[segIndex0 + 1];
- var p10 = e1.getCoordinates()[segIndex1];
- var p11 = e1.getCoordinates()[segIndex1 + 1];
- this._li.computeIntersection(p00, p01, p10, p11);
- if (this._li.hasIntersection()) {
- if (this._recordIsolated) {
- e0.setIsolated(false);
- e1.setIsolated(false);
- }
- this._numIntersections++;
- if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
- this._hasIntersection = true;
- if (this._includeProper || !this._li.isProper()) {
- e0.addIntersections(this._li, segIndex0, 0);
- e1.addIntersections(this._li, segIndex1, 1);
- }
- if (this._li.isProper()) {
- this._properIntersectionPoint = this._li.getIntersection(0).copy();
- this._hasProper = true;
- if (this._isDoneWhenProperInt) {
- this._isDone = true;
- }
- if (!this.isBoundaryPoint(this._li, this._bdyNodes)) { this._hasProperInterior = true; }
- }
- }
- }
- };
- SegmentIntersector$2.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SegmentIntersector$2.prototype.getClass = function getClass () {
- return SegmentIntersector$2
- };
- SegmentIntersector$2.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
- return Math.abs(i1 - i2) === 1
- };
- var SimpleMCSweepLineIntersector = (function (EdgeSetIntersector$$1) {
- function SimpleMCSweepLineIntersector () {
- EdgeSetIntersector$$1.call(this);
- this.events = new ArrayList();
- this.nOverlaps = null;
- }
- if ( EdgeSetIntersector$$1 ) SimpleMCSweepLineIntersector.__proto__ = EdgeSetIntersector$$1;
- SimpleMCSweepLineIntersector.prototype = Object.create( EdgeSetIntersector$$1 && EdgeSetIntersector$$1.prototype );
- SimpleMCSweepLineIntersector.prototype.constructor = SimpleMCSweepLineIntersector;
- SimpleMCSweepLineIntersector.prototype.prepareEvents = function prepareEvents () {
- var this$1 = this;
- Collections.sort(this.events);
- for (var i = 0; i < this.events.size(); i++) {
- var ev = this$1.events.get(i);
- if (ev.isDelete()) {
- ev.getInsertEvent().setDeleteEventIndex(i);
- }
- }
- };
- SimpleMCSweepLineIntersector.prototype.computeIntersections = function computeIntersections () {
- var this$1 = this;
- if (arguments.length === 1) {
- var si = arguments[0];
- this.nOverlaps = 0;
- this.prepareEvents();
- for (var i = 0; i < this.events.size(); i++) {
- var ev = this$1.events.get(i);
- if (ev.isInsert()) {
- this$1.processOverlaps(i, ev.getDeleteEventIndex(), ev, si);
- }
- if (si.isDone()) {
- break
- }
- }
- } else if (arguments.length === 3) {
- if (arguments[2] instanceof SegmentIntersector$2 && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
- var edges0 = arguments[0];
- var edges1 = arguments[1];
- var si$1 = arguments[2];
- this.addEdges(edges0, edges0);
- this.addEdges(edges1, edges1);
- this.computeIntersections(si$1);
- } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector$2)) {
- var edges = arguments[0];
- var si$2 = arguments[1];
- var testAllSegments = arguments[2];
- if (testAllSegments) { this.addEdges(edges, null); } else { this.addEdges(edges); }
- this.computeIntersections(si$2);
- }
- }
- };
- SimpleMCSweepLineIntersector.prototype.addEdge = function addEdge (edge, edgeSet) {
- var this$1 = this;
- var mce = edge.getMonotoneChainEdge();
- var startIndex = mce.getStartIndexes();
- for (var i = 0; i < startIndex.length - 1; i++) {
- var mc = new MonotoneChain$2(mce, i);
- var insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc);
- this$1.events.add(insertEvent);
- this$1.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent));
- }
- };
- SimpleMCSweepLineIntersector.prototype.processOverlaps = function processOverlaps (start, end, ev0, si) {
- var this$1 = this;
- var mc0 = ev0.getObject();
- for (var i = start; i < end; i++) {
- var ev1 = this$1.events.get(i);
- if (ev1.isInsert()) {
- var mc1 = ev1.getObject();
- if (!ev0.isSameLabel(ev1)) {
- mc0.computeIntersections(mc1, si);
- this$1.nOverlaps++;
- }
- }
- }
- };
- SimpleMCSweepLineIntersector.prototype.addEdges = function addEdges () {
- var this$1 = this;
- if (arguments.length === 1) {
- var edges = arguments[0];
- for (var i = edges.iterator(); i.hasNext();) {
- var edge = i.next();
- this$1.addEdge(edge, edge);
- }
- } else if (arguments.length === 2) {
- var edges$1 = arguments[0];
- var edgeSet = arguments[1];
- for (var i$1 = edges$1.iterator(); i$1.hasNext();) {
- var edge$1 = i$1.next();
- this$1.addEdge(edge$1, edgeSet);
- }
- }
- };
- SimpleMCSweepLineIntersector.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SimpleMCSweepLineIntersector.prototype.getClass = function getClass () {
- return SimpleMCSweepLineIntersector
- };
- return SimpleMCSweepLineIntersector;
- }(EdgeSetIntersector));
- var IntervalRTreeNode = function IntervalRTreeNode () {
- this._min = Double.POSITIVE_INFINITY;
- this._max = Double.NEGATIVE_INFINITY;
- };
- var staticAccessors$45 = { NodeComparator: { configurable: true } };
- IntervalRTreeNode.prototype.getMin = function getMin () {
- return this._min
- };
- IntervalRTreeNode.prototype.intersects = function intersects (queryMin, queryMax) {
- if (this._min > queryMax || this._max < queryMin) { return false }
- return true
- };
- IntervalRTreeNode.prototype.getMax = function getMax () {
- return this._max
- };
- IntervalRTreeNode.prototype.toString = function toString () {
- return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))
- };
- IntervalRTreeNode.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- IntervalRTreeNode.prototype.getClass = function getClass () {
- return IntervalRTreeNode
- };
- staticAccessors$45.NodeComparator.get = function () { return NodeComparator };
- Object.defineProperties( IntervalRTreeNode, staticAccessors$45 );
- var NodeComparator = function NodeComparator () {};
- NodeComparator.prototype.compare = function compare (o1, o2) {
- var n1 = o1;
- var n2 = o2;
- var mid1 = (n1._min + n1._max) / 2;
- var mid2 = (n2._min + n2._max) / 2;
- if (mid1 < mid2) { return -1 }
- if (mid1 > mid2) { return 1 }
- return 0
- };
- NodeComparator.prototype.interfaces_ = function interfaces_ () {
- return [Comparator]
- };
- NodeComparator.prototype.getClass = function getClass () {
- return NodeComparator
- };
- var IntervalRTreeLeafNode = (function (IntervalRTreeNode$$1) {
- function IntervalRTreeLeafNode () {
- IntervalRTreeNode$$1.call(this);
- this._item = null;
- var min = arguments[0];
- var max = arguments[1];
- var item = arguments[2];
- this._min = min;
- this._max = max;
- this._item = item;
- }
- if ( IntervalRTreeNode$$1 ) IntervalRTreeLeafNode.__proto__ = IntervalRTreeNode$$1;
- IntervalRTreeLeafNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
- IntervalRTreeLeafNode.prototype.constructor = IntervalRTreeLeafNode;
- IntervalRTreeLeafNode.prototype.query = function query (queryMin, queryMax, visitor) {
- if (!this.intersects(queryMin, queryMax)) { return null }
- visitor.visitItem(this._item);
- };
- IntervalRTreeLeafNode.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- IntervalRTreeLeafNode.prototype.getClass = function getClass () {
- return IntervalRTreeLeafNode
- };
- return IntervalRTreeLeafNode;
- }(IntervalRTreeNode));
- var IntervalRTreeBranchNode = (function (IntervalRTreeNode$$1) {
- function IntervalRTreeBranchNode () {
- IntervalRTreeNode$$1.call(this);
- this._node1 = null;
- this._node2 = null;
- var n1 = arguments[0];
- var n2 = arguments[1];
- this._node1 = n1;
- this._node2 = n2;
- this.buildExtent(this._node1, this._node2);
- }
- if ( IntervalRTreeNode$$1 ) IntervalRTreeBranchNode.__proto__ = IntervalRTreeNode$$1;
- IntervalRTreeBranchNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
- IntervalRTreeBranchNode.prototype.constructor = IntervalRTreeBranchNode;
- IntervalRTreeBranchNode.prototype.buildExtent = function buildExtent (n1, n2) {
- this._min = Math.min(n1._min, n2._min);
- this._max = Math.max(n1._max, n2._max);
- };
- IntervalRTreeBranchNode.prototype.query = function query (queryMin, queryMax, visitor) {
- if (!this.intersects(queryMin, queryMax)) {
- return null
- }
- if (this._node1 !== null) { this._node1.query(queryMin, queryMax, visitor); }
- if (this._node2 !== null) { this._node2.query(queryMin, queryMax, visitor); }
- };
- IntervalRTreeBranchNode.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- IntervalRTreeBranchNode.prototype.getClass = function getClass () {
- return IntervalRTreeBranchNode
- };
- return IntervalRTreeBranchNode;
- }(IntervalRTreeNode));
- var SortedPackedIntervalRTree = function SortedPackedIntervalRTree () {
- this._leaves = new ArrayList();
- this._root = null;
- this._level = 0;
- };
- SortedPackedIntervalRTree.prototype.buildTree = function buildTree () {
- var this$1 = this;
- Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator());
- var src = this._leaves;
- var temp = null;
- var dest = new ArrayList();
- while (true) {
- this$1.buildLevel(src, dest);
- if (dest.size() === 1) { return dest.get(0) }
- temp = src;
- src = dest;
- dest = temp;
- }
- };
- SortedPackedIntervalRTree.prototype.insert = function insert (min, max, item) {
- if (this._root !== null) { throw new Error('Index cannot be added to once it has been queried') }
- this._leaves.add(new IntervalRTreeLeafNode(min, max, item));
- };
- SortedPackedIntervalRTree.prototype.query = function query (min, max, visitor) {
- this.init();
- this._root.query(min, max, visitor);
- };
- SortedPackedIntervalRTree.prototype.buildRoot = function buildRoot () {
- if (this._root !== null) { return null }
- this._root = this.buildTree();
- };
- SortedPackedIntervalRTree.prototype.printNode = function printNode (node) {
- System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)));
- };
- SortedPackedIntervalRTree.prototype.init = function init () {
- if (this._root !== null) { return null }
- this.buildRoot();
- };
- SortedPackedIntervalRTree.prototype.buildLevel = function buildLevel (src, dest) {
- this._level++;
- dest.clear();
- for (var i = 0; i < src.size(); i += 2) {
- var n1 = src.get(i);
- var n2 = i + 1 < src.size() ? src.get(i) : null;
- if (n2 === null) {
- dest.add(n1);
- } else {
- var node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1));
- dest.add(node);
- }
- }
- };
- SortedPackedIntervalRTree.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- SortedPackedIntervalRTree.prototype.getClass = function getClass () {
- return SortedPackedIntervalRTree
- };
- var ArrayListVisitor = function ArrayListVisitor () {
- this._items = new ArrayList();
- };
- ArrayListVisitor.prototype.visitItem = function visitItem (item) {
- this._items.add(item);
- };
- ArrayListVisitor.prototype.getItems = function getItems () {
- return this._items
- };
- ArrayListVisitor.prototype.interfaces_ = function interfaces_ () {
- return [ItemVisitor]
- };
- ArrayListVisitor.prototype.getClass = function getClass () {
- return ArrayListVisitor
- };
- var IndexedPointInAreaLocator = function IndexedPointInAreaLocator () {
- this._index = null;
- var g = arguments[0];
- if (!hasInterface(g, Polygonal)) { throw new IllegalArgumentException('Argument must be Polygonal') }
- this._index = new IntervalIndexedGeometry(g);
- };
- var staticAccessors$44 = { SegmentVisitor: { configurable: true },IntervalIndexedGeometry: { configurable: true } };
- IndexedPointInAreaLocator.prototype.locate = function locate (p) {
- var rcc = new RayCrossingCounter(p);
- var visitor = new SegmentVisitor(rcc);
- this._index.query(p.y, p.y, visitor);
- return rcc.getLocation()
- };
- IndexedPointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
- return [PointOnGeometryLocator]
- };
- IndexedPointInAreaLocator.prototype.getClass = function getClass () {
- return IndexedPointInAreaLocator
- };
- staticAccessors$44.SegmentVisitor.get = function () { return SegmentVisitor };
- staticAccessors$44.IntervalIndexedGeometry.get = function () { return IntervalIndexedGeometry };
- Object.defineProperties( IndexedPointInAreaLocator, staticAccessors$44 );
- var SegmentVisitor = function SegmentVisitor () {
- this._counter = null;
- var counter = arguments[0];
- this._counter = counter;
- };
- SegmentVisitor.prototype.visitItem = function visitItem (item) {
- var seg = item;
- this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1));
- };
- SegmentVisitor.prototype.interfaces_ = function interfaces_ () {
- return [ItemVisitor]
- };
- SegmentVisitor.prototype.getClass = function getClass () {
- return SegmentVisitor
- };
- var IntervalIndexedGeometry = function IntervalIndexedGeometry () {
- this._index = new SortedPackedIntervalRTree();
- var geom = arguments[0];
- this.init(geom);
- };
- IntervalIndexedGeometry.prototype.init = function init (geom) {
- var this$1 = this;
- var lines = LinearComponentExtracter.getLines(geom);
- for (var i = lines.iterator(); i.hasNext();) {
- var line = i.next();
- var pts = line.getCoordinates();
- this$1.addLine(pts);
- }
- };
- IntervalIndexedGeometry.prototype.addLine = function addLine (pts) {
- var this$1 = this;
- for (var i = 1; i < pts.length; i++) {
- var seg = new LineSegment(pts[i - 1], pts[i]);
- var min = Math.min(seg.p0.y, seg.p1.y);
- var max = Math.max(seg.p0.y, seg.p1.y);
- this$1._index.insert(min, max, seg);
- }
- };
- IntervalIndexedGeometry.prototype.query = function query () {
- if (arguments.length === 2) {
- var min = arguments[0];
- var max = arguments[1];
- var visitor = new ArrayListVisitor();
- this._index.query(min, max, visitor);
- return visitor.getItems()
- } else if (arguments.length === 3) {
- var min$1 = arguments[0];
- var max$1 = arguments[1];
- var visitor$1 = arguments[2];
- this._index.query(min$1, max$1, visitor$1);
- }
- };
- IntervalIndexedGeometry.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- IntervalIndexedGeometry.prototype.getClass = function getClass () {
- return IntervalIndexedGeometry
- };
- var GeometryGraph = (function (PlanarGraph$$1) {
- function GeometryGraph () {
- PlanarGraph$$1.call(this);
- this._parentGeom = null;
- this._lineEdgeMap = new HashMap();
- this._boundaryNodeRule = null;
- this._useBoundaryDeterminationRule = true;
- this._argIndex = null;
- this._boundaryNodes = null;
- this._hasTooFewPoints = false;
- this._invalidPoint = null;
- this._areaPtLocator = null;
- this._ptLocator = new PointLocator();
- if (arguments.length === 2) {
- var argIndex = arguments[0];
- var parentGeom = arguments[1];
- var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
- this._argIndex = argIndex;
- this._parentGeom = parentGeom;
- this._boundaryNodeRule = boundaryNodeRule;
- if (parentGeom !== null) {
- this.add(parentGeom);
- }
- } else if (arguments.length === 3) {
- var argIndex$1 = arguments[0];
- var parentGeom$1 = arguments[1];
- var boundaryNodeRule$1 = arguments[2];
- this._argIndex = argIndex$1;
- this._parentGeom = parentGeom$1;
- this._boundaryNodeRule = boundaryNodeRule$1;
- if (parentGeom$1 !== null) {
- this.add(parentGeom$1);
- }
- }
- }
- if ( PlanarGraph$$1 ) GeometryGraph.__proto__ = PlanarGraph$$1;
- GeometryGraph.prototype = Object.create( PlanarGraph$$1 && PlanarGraph$$1.prototype );
- GeometryGraph.prototype.constructor = GeometryGraph;
- GeometryGraph.prototype.insertBoundaryPoint = function insertBoundaryPoint (argIndex, coord) {
- var n = this._nodes.addNode(coord);
- var lbl = n.getLabel();
- var boundaryCount = 1;
- var loc = Location.NONE;
- loc = lbl.getLocation(argIndex, Position.ON);
- if (loc === Location.BOUNDARY) { boundaryCount++; }
- var newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount);
- lbl.setLocation(argIndex, newLoc);
- };
- GeometryGraph.prototype.computeSelfNodes = function computeSelfNodes () {
- if (arguments.length === 2) {
- var li = arguments[0];
- var computeRingSelfNodes = arguments[1];
- return this.computeSelfNodes(li, computeRingSelfNodes, false)
- } else if (arguments.length === 3) {
- var li$1 = arguments[0];
- var computeRingSelfNodes$1 = arguments[1];
- var isDoneIfProperInt = arguments[2];
- var si = new SegmentIntersector$2(li$1, true, false);
- si.setIsDoneIfProperInt(isDoneIfProperInt);
- var esi = this.createEdgeSetIntersector();
- var isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon;
- var computeAllSegments = computeRingSelfNodes$1 || !isRings;
- esi.computeIntersections(this._edges, si, computeAllSegments);
- this.addSelfIntersectionNodes(this._argIndex);
- return si
- }
- };
- GeometryGraph.prototype.computeSplitEdges = function computeSplitEdges (edgelist) {
- for (var i = this._edges.iterator(); i.hasNext();) {
- var e = i.next();
- e.eiList.addSplitEdges(edgelist);
- }
- };
- GeometryGraph.prototype.computeEdgeIntersections = function computeEdgeIntersections (g, li, includeProper) {
- var si = new SegmentIntersector$2(li, includeProper, true);
- si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());
- var esi = this.createEdgeSetIntersector();
- esi.computeIntersections(this._edges, g._edges, si);
- return si
- };
- GeometryGraph.prototype.getGeometry = function getGeometry () {
- return this._parentGeom
- };
- GeometryGraph.prototype.getBoundaryNodeRule = function getBoundaryNodeRule () {
- return this._boundaryNodeRule
- };
- GeometryGraph.prototype.hasTooFewPoints = function hasTooFewPoints () {
- return this._hasTooFewPoints
- };
- GeometryGraph.prototype.addPoint = function addPoint () {
- if (arguments[0] instanceof Point) {
- var p = arguments[0];
- var coord = p.getCoordinate();
- this.insertPoint(this._argIndex, coord, Location.INTERIOR);
- } else if (arguments[0] instanceof Coordinate) {
- var pt = arguments[0];
- this.insertPoint(this._argIndex, pt, Location.INTERIOR);
- }
- };
- GeometryGraph.prototype.addPolygon = function addPolygon (p) {
- var this$1 = this;
- this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR);
- for (var i = 0; i < p.getNumInteriorRing(); i++) {
- var hole = p.getInteriorRingN(i);
- this$1.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR);
- }
- };
- GeometryGraph.prototype.addEdge = function addEdge (e) {
- this.insertEdge(e);
- var coord = e.getCoordinates();
- this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
- this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY);
- };
- GeometryGraph.prototype.addLineString = function addLineString (line) {
- var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
- if (coord.length < 2) {
- this._hasTooFewPoints = true;
- this._invalidPoint = coord[0];
- return null
- }
- var e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR));
- this._lineEdgeMap.put(line, e);
- this.insertEdge(e);
- Assert.isTrue(coord.length >= 2, 'found LineString with single point');
- this.insertBoundaryPoint(this._argIndex, coord[0]);
- this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1]);
- };
- GeometryGraph.prototype.getInvalidPoint = function getInvalidPoint () {
- return this._invalidPoint
- };
- GeometryGraph.prototype.getBoundaryPoints = function getBoundaryPoints () {
- var coll = this.getBoundaryNodes();
- var pts = new Array(coll.size()).fill(null);
- var i = 0;
- for (var it = coll.iterator(); it.hasNext();) {
- var node = it.next();
- pts[i++] = node.getCoordinate().copy();
- }
- return pts
- };
- GeometryGraph.prototype.getBoundaryNodes = function getBoundaryNodes () {
- if (this._boundaryNodes === null) { this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex); }
- return this._boundaryNodes
- };
- GeometryGraph.prototype.addSelfIntersectionNode = function addSelfIntersectionNode (argIndex, coord, loc) {
- if (this.isBoundaryNode(argIndex, coord)) { return null }
- if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) { this.insertBoundaryPoint(argIndex, coord); } else { this.insertPoint(argIndex, coord, loc); }
- };
- GeometryGraph.prototype.addPolygonRing = function addPolygonRing (lr, cwLeft, cwRight) {
- if (lr.isEmpty()) { return null }
- var coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());
- if (coord.length < 4) {
- this._hasTooFewPoints = true;
- this._invalidPoint = coord[0];
- return null
- }
- var left = cwLeft;
- var right = cwRight;
- if (CGAlgorithms.isCCW(coord)) {
- left = cwRight;
- right = cwLeft;
- }
- var e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right));
- this._lineEdgeMap.put(lr, e);
- this.insertEdge(e);
- this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
- };
- GeometryGraph.prototype.insertPoint = function insertPoint (argIndex, coord, onLocation) {
- var n = this._nodes.addNode(coord);
- var lbl = n.getLabel();
- if (lbl === null) {
- n._label = new Label(argIndex, onLocation);
- } else { lbl.setLocation(argIndex, onLocation); }
- };
- GeometryGraph.prototype.createEdgeSetIntersector = function createEdgeSetIntersector () {
- return new SimpleMCSweepLineIntersector()
- };
- GeometryGraph.prototype.addSelfIntersectionNodes = function addSelfIntersectionNodes (argIndex) {
- var this$1 = this;
- for (var i = this._edges.iterator(); i.hasNext();) {
- var e = i.next();
- var eLoc = e.getLabel().getLocation(argIndex);
- for (var eiIt = e.eiList.iterator(); eiIt.hasNext();) {
- var ei = eiIt.next();
- this$1.addSelfIntersectionNode(argIndex, ei.coord, eLoc);
- }
- }
- };
- GeometryGraph.prototype.add = function add () {
- if (arguments.length === 1) {
- var g = arguments[0];
- if (g.isEmpty()) { return null }
- if (g instanceof MultiPolygon) { this._useBoundaryDeterminationRule = false; }
- if (g instanceof Polygon) { this.addPolygon(g); }
- else if (g instanceof LineString) { this.addLineString(g); }
- else if (g instanceof Point) { this.addPoint(g); }
- else if (g instanceof MultiPoint) { this.addCollection(g); }
- else if (g instanceof MultiLineString) { this.addCollection(g); }
- else if (g instanceof MultiPolygon) { this.addCollection(g); }
- else if (g instanceof GeometryCollection) { this.addCollection(g); }
- else { throw new Error(g.getClass().getName()) }
- } else { return PlanarGraph$$1.prototype.add.apply(this, arguments) }
- };
- GeometryGraph.prototype.addCollection = function addCollection (gc) {
- var this$1 = this;
- for (var i = 0; i < gc.getNumGeometries(); i++) {
- var g = gc.getGeometryN(i);
- this$1.add(g);
- }
- };
- GeometryGraph.prototype.locate = function locate (pt) {
- if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {
- if (this._areaPtLocator === null) {
- this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom);
- }
- return this._areaPtLocator.locate(pt)
- }
- return this._ptLocator.locate(pt, this._parentGeom)
- };
- GeometryGraph.prototype.findEdge = function findEdge () {
- if (arguments.length === 1) {
- var line = arguments[0];
- return this._lineEdgeMap.get(line)
- } else { return PlanarGraph$$1.prototype.findEdge.apply(this, arguments) }
- };
- GeometryGraph.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryGraph.prototype.getClass = function getClass () {
- return GeometryGraph
- };
- GeometryGraph.determineBoundary = function determineBoundary (boundaryNodeRule, boundaryCount) {
- return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR
- };
- return GeometryGraph;
- }(PlanarGraph));
- var GeometryGraphOp = function GeometryGraphOp () {
- this._li = new RobustLineIntersector();
- this._resultPrecisionModel = null;
- this._arg = null;
- if (arguments.length === 1) {
- var g0 = arguments[0];
- this.setComputationPrecision(g0.getPrecisionModel());
- this._arg = new Array(1).fill(null);
- this._arg[0] = new GeometryGraph(0, g0);
- } else if (arguments.length === 2) {
- var g0$1 = arguments[0];
- var g1 = arguments[1];
- var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
- if (g0$1.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$1.getPrecisionModel()); } else { this.setComputationPrecision(g1.getPrecisionModel()); }
- this._arg = new Array(2).fill(null);
- this._arg[0] = new GeometryGraph(0, g0$1, boundaryNodeRule);
- this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);
- } else if (arguments.length === 3) {
- var g0$2 = arguments[0];
- var g1$1 = arguments[1];
- var boundaryNodeRule$1 = arguments[2];
- if (g0$2.getPrecisionModel().compareTo(g1$1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$2.getPrecisionModel()); } else { this.setComputationPrecision(g1$1.getPrecisionModel()); }
- this._arg = new Array(2).fill(null);
- this._arg[0] = new GeometryGraph(0, g0$2, boundaryNodeRule$1);
- this._arg[1] = new GeometryGraph(1, g1$1, boundaryNodeRule$1);
- }
- };
- GeometryGraphOp.prototype.getArgGeometry = function getArgGeometry (i) {
- return this._arg[i].getGeometry()
- };
- GeometryGraphOp.prototype.setComputationPrecision = function setComputationPrecision (pm) {
- this._resultPrecisionModel = pm;
- this._li.setPrecisionModel(this._resultPrecisionModel);
- };
- GeometryGraphOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryGraphOp.prototype.getClass = function getClass () {
- return GeometryGraphOp
- };
- // operation.geometrygraph
- var GeometryMapper = function GeometryMapper () {};
- GeometryMapper.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryMapper.prototype.getClass = function getClass () {
- return GeometryMapper
- };
- GeometryMapper.map = function map () {
- if (arguments[0] instanceof Geometry && hasInterface(arguments[1], GeometryMapper.MapOp)) {
- var geom = arguments[0];
- var op = arguments[1];
- var mapped = new ArrayList();
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var g = op.map(geom.getGeometryN(i));
- if (g !== null) { mapped.add(g); }
- }
- return geom.getFactory().buildGeometry(mapped)
- } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], GeometryMapper.MapOp)) {
- var geoms = arguments[0];
- var op$1 = arguments[1];
- var mapped$1 = new ArrayList();
- for (var i$1 = geoms.iterator(); i$1.hasNext();) {
- var g$1 = i$1.next();
- var gr = op$1.map(g$1);
- if (gr !== null) { mapped$1.add(gr); }
- }
- return mapped$1
- }
- };
- GeometryMapper.MapOp = function MapOp () {};
- var OverlayOp = (function (GeometryGraphOp) {
- function OverlayOp () {
- var g0 = arguments[0];
- var g1 = arguments[1];
- GeometryGraphOp.call(this, g0, g1);
- this._ptLocator = new PointLocator();
- this._geomFact = null;
- this._resultGeom = null;
- this._graph = null;
- this._edgeList = new EdgeList();
- this._resultPolyList = new ArrayList();
- this._resultLineList = new ArrayList();
- this._resultPointList = new ArrayList();
- this._graph = new PlanarGraph(new OverlayNodeFactory());
- this._geomFact = g0.getFactory();
- }
- if ( GeometryGraphOp ) OverlayOp.__proto__ = GeometryGraphOp;
- OverlayOp.prototype = Object.create( GeometryGraphOp && GeometryGraphOp.prototype );
- OverlayOp.prototype.constructor = OverlayOp;
- OverlayOp.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
- var existingEdge = this._edgeList.findEqualEdge(e);
- if (existingEdge !== null) {
- var existingLabel = existingEdge.getLabel();
- var labelToMerge = e.getLabel();
- if (!existingEdge.isPointwiseEqual(e)) {
- labelToMerge = new Label(e.getLabel());
- labelToMerge.flip();
- }
- var depth = existingEdge.getDepth();
- if (depth.isNull()) {
- depth.add(existingLabel);
- }
- depth.add(labelToMerge);
- existingLabel.merge(labelToMerge);
- } else {
- this._edgeList.add(e);
- }
- };
- OverlayOp.prototype.getGraph = function getGraph () {
- return this._graph
- };
- OverlayOp.prototype.cancelDuplicateResultEdges = function cancelDuplicateResultEdges () {
- for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
- var de = it.next();
- var sym = de.getSym();
- if (de.isInResult() && sym.isInResult()) {
- de.setInResult(false);
- sym.setInResult(false);
- }
- }
- };
- OverlayOp.prototype.isCoveredByLA = function isCoveredByLA (coord) {
- if (this.isCovered(coord, this._resultLineList)) { return true }
- if (this.isCovered(coord, this._resultPolyList)) { return true }
- return false
- };
- OverlayOp.prototype.computeGeometry = function computeGeometry (resultPointList, resultLineList, resultPolyList, opcode) {
- var geomList = new ArrayList();
- geomList.addAll(resultPointList);
- geomList.addAll(resultLineList);
- geomList.addAll(resultPolyList);
- if (geomList.isEmpty()) { return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) }
- return this._geomFact.buildGeometry(geomList)
- };
- OverlayOp.prototype.mergeSymLabels = function mergeSymLabels () {
- for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- node.getEdges().mergeSymLabels();
- }
- };
- OverlayOp.prototype.isCovered = function isCovered (coord, geomList) {
- var this$1 = this;
- for (var it = geomList.iterator(); it.hasNext();) {
- var geom = it.next();
- var loc = this$1._ptLocator.locate(coord, geom);
- if (loc !== Location.EXTERIOR) { return true }
- }
- return false
- };
- OverlayOp.prototype.replaceCollapsedEdges = function replaceCollapsedEdges () {
- var newEdges = new ArrayList();
- for (var it = this._edgeList.iterator(); it.hasNext();) {
- var e = it.next();
- if (e.isCollapsed()) {
- it.remove();
- newEdges.add(e.getCollapsedEdge());
- }
- }
- this._edgeList.addAll(newEdges);
- };
- OverlayOp.prototype.updateNodeLabelling = function updateNodeLabelling () {
- for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- var lbl = node.getEdges().getLabel();
- node.getLabel().merge(lbl);
- }
- };
- OverlayOp.prototype.getResultGeometry = function getResultGeometry (overlayOpCode) {
- this.computeOverlay(overlayOpCode);
- return this._resultGeom
- };
- OverlayOp.prototype.insertUniqueEdges = function insertUniqueEdges (edges) {
- var this$1 = this;
- for (var i = edges.iterator(); i.hasNext();) {
- var e = i.next();
- this$1.insertUniqueEdge(e);
- }
- };
- OverlayOp.prototype.computeOverlay = function computeOverlay (opCode) {
- this.copyPoints(0);
- this.copyPoints(1);
- this._arg[0].computeSelfNodes(this._li, false);
- this._arg[1].computeSelfNodes(this._li, false);
- this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);
- var baseSplitEdges = new ArrayList();
- this._arg[0].computeSplitEdges(baseSplitEdges);
- this._arg[1].computeSplitEdges(baseSplitEdges);
- // const splitEdges = baseSplitEdges
- this.insertUniqueEdges(baseSplitEdges);
- this.computeLabelsFromDepths();
- this.replaceCollapsedEdges();
- EdgeNodingValidator.checkValid(this._edgeList.getEdges());
- this._graph.addEdges(this._edgeList.getEdges());
- this.computeLabelling();
- this.labelIncompleteNodes();
- this.findResultAreaEdges(opCode);
- this.cancelDuplicateResultEdges();
- var polyBuilder = new PolygonBuilder(this._geomFact);
- polyBuilder.add(this._graph);
- this._resultPolyList = polyBuilder.getPolygons();
- var lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);
- this._resultLineList = lineBuilder.build(opCode);
- var pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);
- this._resultPointList = pointBuilder.build(opCode);
- this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);
- };
- OverlayOp.prototype.labelIncompleteNode = function labelIncompleteNode (n, targetIndex) {
- var loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());
- n.getLabel().setLocation(targetIndex, loc);
- };
- OverlayOp.prototype.copyPoints = function copyPoints (argIndex) {
- var this$1 = this;
- for (var i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {
- var graphNode = i.next();
- var newNode = this$1._graph.addNode(graphNode.getCoordinate());
- newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));
- }
- };
- OverlayOp.prototype.findResultAreaEdges = function findResultAreaEdges (opCode) {
- for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
- var de = it.next();
- var label = de.getLabel();
- if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {
- de.setInResult(true);
- }
- }
- };
- OverlayOp.prototype.computeLabelsFromDepths = function computeLabelsFromDepths () {
- for (var it = this._edgeList.iterator(); it.hasNext();) {
- var e = it.next();
- var lbl = e.getLabel();
- var depth = e.getDepth();
- if (!depth.isNull()) {
- depth.normalize();
- for (var i = 0; i < 2; i++) {
- if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {
- if (depth.getDelta(i) === 0) {
- lbl.toLine(i);
- } else {
- Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized');
- lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));
- Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized');
- lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));
- }
- }
- }
- }
- }
- };
- OverlayOp.prototype.computeLabelling = function computeLabelling () {
- var this$1 = this;
- for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
- var node = nodeit.next();
- node.getEdges().computeLabelling(this$1._arg);
- }
- this.mergeSymLabels();
- this.updateNodeLabelling();
- };
- OverlayOp.prototype.labelIncompleteNodes = function labelIncompleteNodes () {
- var this$1 = this;
- // let nodeCount = 0
- for (var ni = this._graph.getNodes().iterator(); ni.hasNext();) {
- var n = ni.next();
- var label = n.getLabel();
- if (n.isIsolated()) {
- // nodeCount++
- if (label.isNull(0)) { this$1.labelIncompleteNode(n, 0); } else { this$1.labelIncompleteNode(n, 1); }
- }
- n.getEdges().updateLabelling(label);
- }
- };
- OverlayOp.prototype.isCoveredByA = function isCoveredByA (coord) {
- if (this.isCovered(coord, this._resultPolyList)) { return true }
- return false
- };
- OverlayOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OverlayOp.prototype.getClass = function getClass () {
- return OverlayOp
- };
- return OverlayOp;
- }(GeometryGraphOp));
- OverlayOp.overlayOp = function (geom0, geom1, opCode) {
- var gov = new OverlayOp(geom0, geom1);
- var geomOv = gov.getResultGeometry(opCode);
- return geomOv
- };
- OverlayOp.intersection = function (g, other) {
- if (g.isEmpty() || other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, g, other, g.getFactory()) }
- if (g.isGeometryCollection()) {
- var g2 = other;
- return GeometryCollectionMapper.map(g, {
- interfaces_: function () {
- return [GeometryMapper.MapOp]
- },
- map: function (g) {
- return g.intersection(g2)
- }
- })
- }
- g.checkNotGeometryCollection(g);
- g.checkNotGeometryCollection(other);
- return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.INTERSECTION)
- };
- OverlayOp.symDifference = function (g, other) {
- if (g.isEmpty() || other.isEmpty()) {
- if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, g, other, g.getFactory()) }
- if (g.isEmpty()) { return other.copy() }
- if (other.isEmpty()) { return g.copy() }
- }
- g.checkNotGeometryCollection(g);
- g.checkNotGeometryCollection(other);
- return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.SYMDIFFERENCE)
- };
- OverlayOp.resultDimension = function (opCode, g0, g1) {
- var dim0 = g0.getDimension();
- var dim1 = g1.getDimension();
- var resultDimension = -1;
- switch (opCode) {
- case OverlayOp.INTERSECTION:
- resultDimension = Math.min(dim0, dim1);
- break
- case OverlayOp.UNION:
- resultDimension = Math.max(dim0, dim1);
- break
- case OverlayOp.DIFFERENCE:
- resultDimension = dim0;
- break
- case OverlayOp.SYMDIFFERENCE:
- resultDimension = Math.max(dim0, dim1);
- break
- default:
- }
- return resultDimension
- };
- OverlayOp.createEmptyResult = function (overlayOpCode, a, b, geomFact) {
- var result = null;
- switch (OverlayOp.resultDimension(overlayOpCode, a, b)) {
- case -1:
- result = geomFact.createGeometryCollection(new Array(0).fill(null));
- break
- case 0:
- result = geomFact.createPoint();
- break
- case 1:
- result = geomFact.createLineString();
- break
- case 2:
- result = geomFact.createPolygon();
- break
- default:
- }
- return result
- };
- OverlayOp.difference = function (g, other) {
- if (g.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, g, other, g.getFactory()) }
- if (other.isEmpty()) { return g.copy() }
- g.checkNotGeometryCollection(g);
- g.checkNotGeometryCollection(other);
- return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.DIFFERENCE)
- };
- OverlayOp.isResultOfOp = function () {
- if (arguments.length === 2) {
- var label = arguments[0];
- var opCode = arguments[1];
- var loc0 = label.getLocation(0);
- var loc1 = label.getLocation(1);
- return OverlayOp.isResultOfOp(loc0, loc1, opCode)
- } else if (arguments.length === 3) {
- var loc0$1 = arguments[0];
- var loc1$1 = arguments[1];
- var overlayOpCode = arguments[2];
- if (loc0$1 === Location.BOUNDARY) { loc0$1 = Location.INTERIOR; }
- if (loc1$1 === Location.BOUNDARY) { loc1$1 = Location.INTERIOR; }
- switch (overlayOpCode) {
- case OverlayOp.INTERSECTION:
- return loc0$1 === Location.INTERIOR && loc1$1 === Location.INTERIOR
- case OverlayOp.UNION:
- return loc0$1 === Location.INTERIOR || loc1$1 === Location.INTERIOR
- case OverlayOp.DIFFERENCE:
- return loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR
- case OverlayOp.SYMDIFFERENCE:
- return (loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR) || (loc0$1 !== Location.INTERIOR && loc1$1 === Location.INTERIOR)
- default:
- }
- return false
- }
- };
- OverlayOp.INTERSECTION = 1;
- OverlayOp.UNION = 2;
- OverlayOp.DIFFERENCE = 3;
- OverlayOp.SYMDIFFERENCE = 4;
- var FuzzyPointLocator = function FuzzyPointLocator () {
- this._g = null;
- this._boundaryDistanceTolerance = null;
- this._linework = null;
- this._ptLocator = new PointLocator();
- this._seg = new LineSegment();
- var g = arguments[0];
- var boundaryDistanceTolerance = arguments[1];
- this._g = g;
- this._boundaryDistanceTolerance = boundaryDistanceTolerance;
- this._linework = this.extractLinework(g);
- };
- FuzzyPointLocator.prototype.isWithinToleranceOfBoundary = function isWithinToleranceOfBoundary (pt) {
- var this$1 = this;
- for (var i = 0; i < this._linework.getNumGeometries(); i++) {
- var line = this$1._linework.getGeometryN(i);
- var seq = line.getCoordinateSequence();
- for (var j = 0; j < seq.size() - 1; j++) {
- seq.getCoordinate(j, this$1._seg.p0);
- seq.getCoordinate(j + 1, this$1._seg.p1);
- var dist = this$1._seg.distance(pt);
- if (dist <= this$1._boundaryDistanceTolerance) { return true }
- }
- }
- return false
- };
- FuzzyPointLocator.prototype.getLocation = function getLocation (pt) {
- if (this.isWithinToleranceOfBoundary(pt)) { return Location.BOUNDARY }
- return this._ptLocator.locate(pt, this._g)
- };
- FuzzyPointLocator.prototype.extractLinework = function extractLinework (g) {
- var extracter = new PolygonalLineworkExtracter();
- g.apply(extracter);
- var linework = extracter.getLinework();
- var lines = GeometryFactory.toLineStringArray(linework);
- return g.getFactory().createMultiLineString(lines)
- };
- FuzzyPointLocator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- FuzzyPointLocator.prototype.getClass = function getClass () {
- return FuzzyPointLocator
- };
- var PolygonalLineworkExtracter = function PolygonalLineworkExtracter () {
- this._linework = null;
- this._linework = new ArrayList();
- };
- PolygonalLineworkExtracter.prototype.getLinework = function getLinework () {
- return this._linework
- };
- PolygonalLineworkExtracter.prototype.filter = function filter (g) {
- var this$1 = this;
- if (g instanceof Polygon) {
- var poly = g;
- this._linework.add(poly.getExteriorRing());
- for (var i = 0; i < poly.getNumInteriorRing(); i++) {
- this$1._linework.add(poly.getInteriorRingN(i));
- }
- }
- };
- PolygonalLineworkExtracter.prototype.interfaces_ = function interfaces_ () {
- return [GeometryFilter]
- };
- PolygonalLineworkExtracter.prototype.getClass = function getClass () {
- return PolygonalLineworkExtracter
- };
- var OffsetPointGenerator = function OffsetPointGenerator () {
- this._g = null;
- this._doLeft = true;
- this._doRight = true;
- var g = arguments[0];
- this._g = g;
- };
- OffsetPointGenerator.prototype.extractPoints = function extractPoints (line, offsetDistance, offsetPts) {
- var this$1 = this;
- var pts = line.getCoordinates();
- for (var i = 0; i < pts.length - 1; i++) {
- this$1.computeOffsetPoints(pts[i], pts[i + 1], offsetDistance, offsetPts);
- }
- };
- OffsetPointGenerator.prototype.setSidesToGenerate = function setSidesToGenerate (doLeft, doRight) {
- this._doLeft = doLeft;
- this._doRight = doRight;
- };
- OffsetPointGenerator.prototype.getPoints = function getPoints (offsetDistance) {
- var this$1 = this;
- var offsetPts = new ArrayList();
- var lines = LinearComponentExtracter.getLines(this._g);
- for (var i = lines.iterator(); i.hasNext();) {
- var line = i.next();
- this$1.extractPoints(line, offsetDistance, offsetPts);
- }
- return offsetPts
- };
- OffsetPointGenerator.prototype.computeOffsetPoints = function computeOffsetPoints (p0, p1, offsetDistance, offsetPts) {
- var dx = p1.x - p0.x;
- var dy = p1.y - p0.y;
- var len = Math.sqrt(dx * dx + dy * dy);
- var ux = offsetDistance * dx / len;
- var uy = offsetDistance * dy / len;
- var midX = (p1.x + p0.x) / 2;
- var midY = (p1.y + p0.y) / 2;
- if (this._doLeft) {
- var offsetLeft = new Coordinate(midX - uy, midY + ux);
- offsetPts.add(offsetLeft);
- }
- if (this._doRight) {
- var offsetRight = new Coordinate(midX + uy, midY - ux);
- offsetPts.add(offsetRight);
- }
- };
- OffsetPointGenerator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OffsetPointGenerator.prototype.getClass = function getClass () {
- return OffsetPointGenerator
- };
- var OverlayResultValidator = function OverlayResultValidator () {
- this._geom = null;
- this._locFinder = null;
- this._location = new Array(3).fill(null);
- this._invalidLocation = null;
- this._boundaryDistanceTolerance = OverlayResultValidator.TOLERANCE;
- this._testCoords = new ArrayList();
- var a = arguments[0];
- var b = arguments[1];
- var result = arguments[2];
- this._boundaryDistanceTolerance = OverlayResultValidator.computeBoundaryDistanceTolerance(a, b);
- this._geom = [a, b, result];
- this._locFinder = [new FuzzyPointLocator(this._geom[0], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[1], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[2], this._boundaryDistanceTolerance)];
- };
- var staticAccessors$46 = { TOLERANCE: { configurable: true } };
- OverlayResultValidator.prototype.reportResult = function reportResult (overlayOp, location, expectedInterior) {
- System.out.println('Overlay result invalid - A:' + Location.toLocationSymbol(location[0]) + ' B:' + Location.toLocationSymbol(location[1]) + ' expected:' + (expectedInterior ? 'i' : 'e') + ' actual:' + Location.toLocationSymbol(location[2]));
- };
- OverlayResultValidator.prototype.isValid = function isValid (overlayOp) {
- this.addTestPts(this._geom[0]);
- this.addTestPts(this._geom[1]);
- var isValid = this.checkValid(overlayOp);
- return isValid
- };
- OverlayResultValidator.prototype.checkValid = function checkValid () {
- var this$1 = this;
- if (arguments.length === 1) {
- var overlayOp = arguments[0];
- for (var i = 0; i < this._testCoords.size(); i++) {
- var pt = this$1._testCoords.get(i);
- if (!this$1.checkValid(overlayOp, pt)) {
- this$1._invalidLocation = pt;
- return false
- }
- }
- return true
- } else if (arguments.length === 2) {
- var overlayOp$1 = arguments[0];
- var pt$1 = arguments[1];
- this._location[0] = this._locFinder[0].getLocation(pt$1);
- this._location[1] = this._locFinder[1].getLocation(pt$1);
- this._location[2] = this._locFinder[2].getLocation(pt$1);
- if (OverlayResultValidator.hasLocation(this._location, Location.BOUNDARY)) { return true }
- return this.isValidResult(overlayOp$1, this._location)
- }
- };
- OverlayResultValidator.prototype.addTestPts = function addTestPts (g) {
- var ptGen = new OffsetPointGenerator(g);
- this._testCoords.addAll(ptGen.getPoints(5 * this._boundaryDistanceTolerance));
- };
- OverlayResultValidator.prototype.isValidResult = function isValidResult (overlayOp, location) {
- var expectedInterior = OverlayOp.isResultOfOp(location[0], location[1], overlayOp);
- var resultInInterior = location[2] === Location.INTERIOR;
- var isValid = !(expectedInterior ^ resultInInterior);
- if (!isValid) { this.reportResult(overlayOp, location, expectedInterior); }
- return isValid
- };
- OverlayResultValidator.prototype.getInvalidLocation = function getInvalidLocation () {
- return this._invalidLocation
- };
- OverlayResultValidator.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- OverlayResultValidator.prototype.getClass = function getClass () {
- return OverlayResultValidator
- };
- OverlayResultValidator.hasLocation = function hasLocation (location, loc) {
- for (var i = 0; i < 3; i++) {
- if (location[i] === loc) { return true }
- }
- return false
- };
- OverlayResultValidator.computeBoundaryDistanceTolerance = function computeBoundaryDistanceTolerance (g0, g1) {
- return Math.min(GeometrySnapper.computeSizeBasedSnapTolerance(g0), GeometrySnapper.computeSizeBasedSnapTolerance(g1))
- };
- OverlayResultValidator.isValid = function isValid (a, b, overlayOp, result) {
- var validator = new OverlayResultValidator(a, b, result);
- return validator.isValid(overlayOp)
- };
- staticAccessors$46.TOLERANCE.get = function () { return 0.000001 };
- Object.defineProperties( OverlayResultValidator, staticAccessors$46 );
- // operation.overlay
- var GeometryCombiner = function GeometryCombiner (geoms) {
- this._geomFactory = null;
- this._skipEmpty = false;
- this._inputGeoms = null;
- this._geomFactory = GeometryCombiner.extractFactory(geoms);
- this._inputGeoms = geoms;
- };
- GeometryCombiner.prototype.extractElements = function extractElements (geom, elems) {
- var this$1 = this;
- if (geom === null) { return null }
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var elemGeom = geom.getGeometryN(i);
- if (this$1._skipEmpty && elemGeom.isEmpty()) { continue }
- elems.add(elemGeom);
- }
- };
- GeometryCombiner.prototype.combine = function combine () {
- var this$1 = this;
- var elems = new ArrayList();
- for (var i = this._inputGeoms.iterator(); i.hasNext();) {
- var g = i.next();
- this$1.extractElements(g, elems);
- }
- if (elems.size() === 0) {
- if (this._geomFactory !== null) {
- return this._geomFactory.createGeometryCollection(null)
- }
- return null
- }
- return this._geomFactory.buildGeometry(elems)
- };
- GeometryCombiner.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- GeometryCombiner.prototype.getClass = function getClass () {
- return GeometryCombiner
- };
- GeometryCombiner.combine = function combine () {
- if (arguments.length === 1) {
- var geoms = arguments[0];
- var combiner = new GeometryCombiner(geoms);
- return combiner.combine()
- } else if (arguments.length === 2) {
- var g0 = arguments[0];
- var g1 = arguments[1];
- var combiner$1 = new GeometryCombiner(GeometryCombiner.createList(g0, g1));
- return combiner$1.combine()
- } else if (arguments.length === 3) {
- var g0$1 = arguments[0];
- var g1$1 = arguments[1];
- var g2 = arguments[2];
- var combiner$2 = new GeometryCombiner(GeometryCombiner.createList(g0$1, g1$1, g2));
- return combiner$2.combine()
- }
- };
- GeometryCombiner.extractFactory = function extractFactory (geoms) {
- if (geoms.isEmpty()) { return null }
- return geoms.iterator().next().getFactory()
- };
- GeometryCombiner.createList = function createList () {
- if (arguments.length === 2) {
- var obj0 = arguments[0];
- var obj1 = arguments[1];
- var list = new ArrayList();
- list.add(obj0);
- list.add(obj1);
- return list
- } else if (arguments.length === 3) {
- var obj0$1 = arguments[0];
- var obj1$1 = arguments[1];
- var obj2 = arguments[2];
- var list$1 = new ArrayList();
- list$1.add(obj0$1);
- list$1.add(obj1$1);
- list$1.add(obj2);
- return list$1
- }
- };
- var CascadedPolygonUnion = function CascadedPolygonUnion () {
- this._inputPolys = null;
- this._geomFactory = null;
- var polys = arguments[0];
- this._inputPolys = polys;
- if (this._inputPolys === null) { this._inputPolys = new ArrayList(); }
- };
- var staticAccessors$47 = { STRTREE_NODE_CAPACITY: { configurable: true } };
- CascadedPolygonUnion.prototype.reduceToGeometries = function reduceToGeometries (geomTree) {
- var this$1 = this;
- var geoms = new ArrayList();
- for (var i = geomTree.iterator(); i.hasNext();) {
- var o = i.next();
- var geom = null;
- if (hasInterface(o, List)) {
- geom = this$1.unionTree(o);
- } else if (o instanceof Geometry) {
- geom = o;
- }
- geoms.add(geom);
- }
- return geoms
- };
- CascadedPolygonUnion.prototype.extractByEnvelope = function extractByEnvelope (env, geom, disjointGeoms) {
- var intersectingGeoms = new ArrayList();
- for (var i = 0; i < geom.getNumGeometries(); i++) {
- var elem = geom.getGeometryN(i);
- if (elem.getEnvelopeInternal().intersects(env)) { intersectingGeoms.add(elem); } else { disjointGeoms.add(elem); }
- }
- return this._geomFactory.buildGeometry(intersectingGeoms)
- };
- CascadedPolygonUnion.prototype.unionOptimized = function unionOptimized (g0, g1) {
- var g0Env = g0.getEnvelopeInternal();
- var g1Env = g1.getEnvelopeInternal();
- if (!g0Env.intersects(g1Env)) {
- var combo = GeometryCombiner.combine(g0, g1);
- return combo
- }
- if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) { return this.unionActual(g0, g1) }
- var commonEnv = g0Env.intersection(g1Env);
- return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)
- };
- CascadedPolygonUnion.prototype.union = function union () {
- if (this._inputPolys === null) { throw new Error('union() method cannot be called twice') }
- if (this._inputPolys.isEmpty()) { return null }
- this._geomFactory = this._inputPolys.iterator().next().getFactory();
- var index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);
- for (var i = this._inputPolys.iterator(); i.hasNext();) {
- var item = i.next();
- index.insert(item.getEnvelopeInternal(), item);
- }
- this._inputPolys = null;
- var itemTree = index.itemsTree();
- var unionAll = this.unionTree(itemTree);
- return unionAll
- };
- CascadedPolygonUnion.prototype.binaryUnion = function binaryUnion () {
- if (arguments.length === 1) {
- var geoms = arguments[0];
- return this.binaryUnion(geoms, 0, geoms.size())
- } else if (arguments.length === 3) {
- var geoms$1 = arguments[0];
- var start = arguments[1];
- var end = arguments[2];
- if (end - start <= 1) {
- var g0 = CascadedPolygonUnion.getGeometry(geoms$1, start);
- return this.unionSafe(g0, null)
- } else if (end - start === 2) {
- return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms$1, start), CascadedPolygonUnion.getGeometry(geoms$1, start + 1))
- } else {
- var mid = Math.trunc((end + start) / 2);
- var g0$1 = this.binaryUnion(geoms$1, start, mid);
- var g1 = this.binaryUnion(geoms$1, mid, end);
- return this.unionSafe(g0$1, g1)
- }
- }
- };
- CascadedPolygonUnion.prototype.repeatedUnion = function repeatedUnion (geoms) {
- var union = null;
- for (var i = geoms.iterator(); i.hasNext();) {
- var g = i.next();
- if (union === null) { union = g.copy(); } else { union = union.union(g); }
- }
- return union
- };
- CascadedPolygonUnion.prototype.unionSafe = function unionSafe (g0, g1) {
- if (g0 === null && g1 === null) { return null }
- if (g0 === null) { return g1.copy() }
- if (g1 === null) { return g0.copy() }
- return this.unionOptimized(g0, g1)
- };
- CascadedPolygonUnion.prototype.unionActual = function unionActual (g0, g1) {
- return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))
- };
- CascadedPolygonUnion.prototype.unionTree = function unionTree (geomTree) {
- var geoms = this.reduceToGeometries(geomTree);
- var union = this.binaryUnion(geoms);
- return union
- };
- CascadedPolygonUnion.prototype.unionUsingEnvelopeIntersection = function unionUsingEnvelopeIntersection (g0, g1, common) {
- var disjointPolys = new ArrayList();
- var g0Int = this.extractByEnvelope(common, g0, disjointPolys);
- var g1Int = this.extractByEnvelope(common, g1, disjointPolys);
- var union = this.unionActual(g0Int, g1Int);
- disjointPolys.add(union);
- var overallUnion = GeometryCombiner.combine(disjointPolys);
- return overallUnion
- };
- CascadedPolygonUnion.prototype.bufferUnion = function bufferUnion () {
- if (arguments.length === 1) {
- var geoms = arguments[0];
- var factory = geoms.get(0).getFactory();
- var gColl = factory.buildGeometry(geoms);
- var unionAll = gColl.buffer(0.0);
- return unionAll
- } else if (arguments.length === 2) {
- var g0 = arguments[0];
- var g1 = arguments[1];
- var factory$1 = g0.getFactory();
- var gColl$1 = factory$1.createGeometryCollection([g0, g1]);
- var unionAll$1 = gColl$1.buffer(0.0);
- return unionAll$1
- }
- };
- CascadedPolygonUnion.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- CascadedPolygonUnion.prototype.getClass = function getClass () {
- return CascadedPolygonUnion
- };
- CascadedPolygonUnion.restrictToPolygons = function restrictToPolygons (g) {
- if (hasInterface(g, Polygonal)) {
- return g
- }
- var polygons = PolygonExtracter.getPolygons(g);
- if (polygons.size() === 1) { return polygons.get(0) }
- return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))
- };
- CascadedPolygonUnion.getGeometry = function getGeometry (list, index) {
- if (index >= list.size()) { return null }
- return list.get(index)
- };
- CascadedPolygonUnion.union = function union (polys) {
- var op = new CascadedPolygonUnion(polys);
- return op.union()
- };
- staticAccessors$47.STRTREE_NODE_CAPACITY.get = function () { return 4 };
- Object.defineProperties( CascadedPolygonUnion, staticAccessors$47 );
- var UnionOp = function UnionOp () {};
- UnionOp.prototype.interfaces_ = function interfaces_ () {
- return []
- };
- UnionOp.prototype.getClass = function getClass () {
- return UnionOp
- };
- UnionOp.union = function union (g, other) {
- if (g.isEmpty() || other.isEmpty()) {
- if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory()) }
- if (g.isEmpty()) { return other.copy() }
- if (other.isEmpty()) { return g.copy() }
- }
- g.checkNotGeometryCollection(g);
- g.checkNotGeometryCollection(other);
- return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)
- };
- // operation.union
- // operation
- /**
- * Polyfill for IE support
- */
- exports.GeoJSONReader = GeoJSONReader;
- exports.GeoJSONWriter = GeoJSONWriter;
- exports.OverlayOp = OverlayOp;
- exports.UnionOp = UnionOp;
- exports.BufferOp = BufferOp;
|