Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalid union_ result - polygon in polygon #1179

Open
awulkiew opened this issue Jul 22, 2023 · 1 comment
Open

Invalid union_ result - polygon in polygon #1179

awulkiew opened this issue Jul 22, 2023 · 1 comment
Assignees
Labels

Comments

@awulkiew
Copy link
Member

is_valid error: "Multi-polygon has intersecting interiors"

Tested with VS2022 (msvc-14.3), Boost.Geometry develop (1.83-beta1).

Cases:
(A is red, B is green, A+B is blue)


A = "POLYGON((12.65628808068942134923 55.62339513242289967820,12.65546895658150106101 55.62338459872802332029,12.65571957941568825845 55.62356738053330218463,12.65567257658392463782 55.62360787167403941567,12.65577787113264029983 55.62360989248909248772,12.65584717293688754580 55.62366043406501603386,12.65591016031999060942 55.62368268932766568469,12.65595440105272473374 55.62369487975809079217,12.65588096379377702760 55.62369703285946798132,12.65583894950407284341 55.62370177518312175380,12.65579717226506772931 55.62370890111054677618,12.65575224526401143521 55.62372053231086965752,12.65570986819506060783 55.62373626278571236980,12.65566410824237664201 55.62375774665133576491,12.65562324646435854447 55.62377819456605720916,12.65558855979156760441 55.62380219431230443661,12.65556027741666866859 55.62382406060220318977,12.65553519719071573491 55.62385019380474204809,12.65551598691638446326 55.62388112695651898321,12.65550531439623682672 55.62390779188598344263,12.65549814132060646443 55.62394128413757243834,12.65549049938232428758 55.62403374438775927047,12.65499901994081710654 55.62429508034193759158,12.65521509230813990143 55.62430353034807239965,12.65861574568077685399 55.62435249899806422036,12.65937528755381435985 55.62435444910022397380,12.65899077036459630108 55.62408099998629040783,12.65662289057337375198 55.62404903219334073583,12.65635765881197194460 55.62385123858638280581,12.65647446802273634603 55.62376716188600767055,12.65676435876372352141 55.62370740153568249298,12.65680807300816468342 55.62371893320090521229,12.65685209371594055483 55.62372764383184176040,12.65689682557581363653 55.62373293097920168293,12.65695657151974273802 55.62373628897915978087,12.65701494623675671392 55.62373431137388024581,12.65706879341632884461 55.62372839820312719894,12.65711981563259769246 55.62371875508546281708,12.65715591020318697701 55.62370969215265859020,12.65719661351084823764 55.62369533421440337406,12.65723443684896665218 55.62367871185267631517,12.65728862847237223832 55.62364515018845168015,12.65735418936168343862 55.62358908311421146209,12.65710261177633810803 55.62340560718251936123,12.65628808068942134923 55.62339513242289967820))";
B = "POLYGON((12.65567257693440694766 55.62360787168076114995,12.65571957941568825845 55.62356738053330218463,12.65548415271247328917 55.62339568142230916692,12.65901766710612719180 55.62343023426183208358,12.65914557887771252354 55.62315956689195672880,12.65882462008875108950 55.62312567649996708496,12.65849672527491520668 55.62310218228731173440,12.65698615701865037408 55.62308223597705136854,12.65498697619369750100 55.62305613420670624691,12.65448721438411894269 55.62307492407620657104,12.65447693214628088754 55.62335697380865440209,12.65447601799496624153 55.62338582327168978736,12.65443468604456711546 55.62401236267658077850,12.65461166731097364391 55.62402188006569758727,12.65484468945811613594 55.62402502589873165562,12.65549049938232428758 55.62403374438775927047,12.65564485467637112492 55.62378835534627086190,12.65595440105272473374 55.62369487975809079217,12.65577787162328604609 55.62360989249850717897,12.65574229699262787108 55.62360920884952975030,12.65567257693440694766 55.62360787168076114995))";

obraz

Zoomed A, B and A+B:
obraz
(Very thin blue polygon in the center of the picture)


A = "POLYGON((-84.65116089015623401792 39.02998506770961739676,-84.65115855632006969245 39.03033197372764107058,-84.65107201055036512116 39.03038114799619506812,-84.65059077274679566472 39.03041727530859361650,-84.65059042830296220927 39.03032492899995986591,-84.65072823595903628302 39.03000897970781579716,-84.65076956921910777965 39.02998549335313782649,-84.65116089015623401792 39.02998506770961739676))";
B = "POLYGON((-84.65133880521904075067 39.02974795545560482424,-84.65135738946997889798 39.02977110653415593333,-84.65139052549068310327 39.02983322429480494975,-84.65139624744927004940 39.02987347183648125792,-84.65139602611463942594 39.02992121201378949991,-84.65139571703195997543 39.02998762942877419846,-84.65139121699769475526 39.03095667697186854639,-84.65009782909157820541 39.03095667697186854639,-84.65011795744629807814 39.03030178708911535068,-84.65011991278714731379 39.02998527856686905579,-84.65012063965531297072 39.02986768308454657017,-84.65012073395172365053 39.02985245421422177969,-84.65014346855440408035 39.02983211238296235024,-84.65014922325485713372 39.02925091383553990454,-84.65133880521904075067 39.02938055437465436626,-84.65133880521904075067 39.02974795545560482424)"
           ",(-84.65115855622477170073 39.03033197364275252994,-84.65116087583271564654 39.02998719669841420910,-84.65077067431950297305 39.02998647769322815293,-84.65115855622477170073 39.03033197364275252994))";

obraz

A+B:
obraz


A = "POLYGON((39.17922489448767464637 21.68521231945192084822,39.17959617350851431183 21.68534039100353538743,39.17978130224673805060 21.68487153353294161207,39.17941002322589838514 21.68474346198132707286,39.17922489448767464637 21.68521231945192084822))";
B = "POLYGON((39.17945696386863829730 21.68569294934867031088,39.17965406364675118311 21.68569294934867031088,39.18048748447822526941 21.68520664658102714384,39.17992051101502681831 21.68451897420600360533,39.17863645476177225646 21.68407604246294795303,39.17849724575626169099 21.68442860102692293367,39.17831211701809479564 21.68489745849751670903,39.17817290801258423016 21.68525001706149168967,39.17863269076332244367 21.68540861838579303367,39.17844756595417265999 21.68587746668873705858,39.17882055933614537935 21.68600613152193545830,39.17900568536612126991 21.68553728213446873951,39.17908568548222092431 21.68556487801589582887,39.17945696386863829730 21.68569294934867031088)"
           ",(39.17941002350344348315 21.68474346287133514011,39.17978130206956421944 21.68487153347182783136,39.17959617304166641816 21.68534038950649645017,39.17941002350344348315 21.68474346287133514011))";

obraz

A+B:
obraz


A = "POLYGON((116.61138511575353504668 40.06660423614687260851,116.61187363533548477790 40.06638056898947297668,116.61189690559416476390 40.06623193165256680004,116.61144773118968487324 40.06587120990070616244,116.61106934457683337314 40.06583701828407129142,116.61103263838930388374 40.06584236698608947336,116.61100816847061878434 40.06584848053671521484,116.61099402007999970010 40.06586529411060837447,116.61098592892409442356 40.06589746097375837053,116.61088354790575749576 40.06655708663180348594,116.61093607230802149388 40.06656202414944090151,116.61085940409560635089 40.06705173417077503473,116.61132564615041928846 40.06709556366638480540,116.61178222544259597271 40.06696445105552584209,116.61180435104762409537 40.06682312561952130636,116.61138511575353504668 40.06660423614687260851))";
B = "POLYGON((116.61090590794215415826 40.06393945100950304550,116.61062782127834225321 40.06571571249992302910,116.61061569371219093227 40.06579317831108255632,116.61050256683193993013 40.06651577432648991817,116.61027117391716956263 40.06799378543723832991,116.61026783425262465244 40.06802164871697868875,116.61070106077676200584 40.06806314830544124561,116.61164014039655967281 40.06815310446199873695,116.61195874046558174086 40.06816359100872659837,116.61210399753809952017 40.06725774956396435300,116.61237199448595447393 40.06554064728425146313,116.61251175879255015388 40.06463978783324364485,116.61258721425662088222 40.06411051648575494255,116.61218781526025622952 40.06405503745440910279,116.61147342958093986454 40.06399062383809450694,116.61110736829488132571 40.06395761616528261584,116.61090590794215415826 40.06393945100950304550)"
           ",(116.61085940488918311075 40.06705173424537491655,116.61093607231629221133 40.06656202409664047082,116.61088371521073270287 40.06655643822936951892,116.61106934457683337314 40.06583701828407129142,116.61086794148994272291 40.06705253672778610508,116.61085940488918311075 40.06705173424537491655))";

obraz

A+B:
obraz

@awulkiew awulkiew added the bug label Jul 22, 2023
@barendgehrels barendgehrels self-assigned this Aug 29, 2023
@barendgehrels
Copy link
Collaborator

Thanks @awulkiew , I'll have a look

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants