Only buffer(-1e-6) works incorrectly. it makes area to zero. But buffer(-1e-5) and buffer(-1e-7) works well. what makes this difference?
polygon boundary data :
[(-1567709.3083706305, 21844.531770653648),
(-1567709.3083706305, 21844.53177065363),
(-1567709.3083706896, 21844.53177057533),
(-1567709.3083707409, 21844.531770491605),
(-1567709.3083707835, 21844.531770403268),
(-1567709.3083708175, 21844.531770311165),
(-1567709.3083708421, 21844.53177021619),
(-1567709.3083708573, 21844.531770119247),
(-1567709.308370863, 21844.53177002128),
(-1567709.3083708591, 21844.531769923226),
(-1567709.3083708456, 21844.531769826033),
(-1567709.3083708226, 21844.53176973063),
(-1567709.3083707902, 21844.531769637946),
(-1567709.3083707492, 21844.53176954887),
(-1567709.3083706994, 21844.531769464254),
(-1567709.3083706417, 21844.53176938492),
(-1567709.3083705765, 21844.531769311627),
(-1567709.3083705043, 21844.531769245084),
(-1567709.3083705043, 21844.531769245077),
(-1566848.2390979272, 21125.044030739882),
(-1567633.4133449628, 20185.362391208644),
(-1567633.4133449628, 20185.362391208626),
(-1567633.413345022, 20185.362391130326),
(-1567633.4133450731, 20185.3623910466),
(-1567633.4133451157, 20185.362390958264),
(-1567633.4133451497, 20185.36239086616),
(-1567633.4133451744, 20185.362390771184),
(-1567633.4133451895, 20185.362390674243),
(-1567633.4133451954, 20185.362390576276),
(-1567633.4133451914, 20185.36239047822),
(-1567633.413345178, 20185.36239038103),
(-1567633.4133451548, 20185.362390285627),
(-1567633.4133451225, 20185.362390192942),
(-1567633.4133450815, 20185.362390103866),
(-1567633.4133450317, 20185.36239001925),
(-1567633.413344974, 20185.362389939917),
(-1567633.4133449087, 20185.362389866623),
(-1567633.4133448366, 20185.36238980008),
(-1567633.4133448366, 20185.362389800073),
(-1563671.4730493322, 16874.865135169068),
(-1563671.4730493322, 16874.865135169075),
(-1563671.473049254, 16874.865135109918),
(-1563671.47304917, 16874.865135058724),
(-1563671.4730490819, 16874.86513501598),
(-1563671.4730489897, 16874.865134982105),
(-1563671.4730488947, 16874.865134957417),
(-1563671.4730487978, 16874.86513494216),
(-1563671.4730486998, 16874.86513493648),
(-1563671.4730486018, 16874.865134940428),
(-1563671.4730485044, 16874.865134953972),
(-1563671.4730484092, 16874.865134976975),
(-1563671.4730483163, 16874.865135009222),
(-1563671.4730482274, 16874.865135050397),
(-1563671.4730481426, 16874.865135100103),
(-1563671.4730480635, 16874.865135157866),
(-1563671.4730479901, 16874.865135223128),
(-1563671.4730479235, 16874.865135295262),
(-1563671.4730479235, 16874.865135295244),
(-1559153.4332911205, 22281.96938299714),
(-1559153.4332910613, 22281.96938307546),
(-1559153.43329101, 22281.969383159183),
(-1559153.4332909675, 22281.96938324752),
(-1559153.4332909335, 22281.969383339623),
(-1559153.4332909088, 22281.9693834346),
(-1559153.4332908937, 22281.96938353154),
(-1559153.4332908879, 22281.96938362951),
(-1559153.4332908918, 22281.969383727563),
(-1559153.4332909053, 22281.969383824755),
(-1559153.4332909284, 22281.969383920157),
(-1559153.4332909607, 22281.969384012842),
(-1559153.4332910017, 22281.969384101918),
(-1559153.4332910515, 22281.969384186534),
(-1559153.4332911093, 22281.969384265867),
(-1559153.4332911745, 22281.96938433916),
(-1559153.4332912466, 22281.969384405704),
(-1559153.4332912466, 22281.96938440571),
(-1560022.394099932, 23008.051091188066),
(-1560022.394099932, 23008.05109118806),
(-1560022.3941000102, 23008.051091247216),
(-1560022.394100094, 23008.05109129841),
(-1560022.3941001822, 23008.051091341153),
(-1560022.3941002744, 23008.05109137503),
(-1560022.3941003694, 23008.051091399717),
(-1560022.3941004663, 23008.051091414975),
(-1560022.3941005643, 23008.051091420653),
(-1560022.3941006623, 23008.051091416706),
(-1560022.3941007596, 23008.051091403162),
(-1560022.3941008549, 23008.05109138016),
(-1560022.3941009478, 23008.051091347912),
(-1560022.3941010367, 23008.051091306737),
(-1560022.3941011215, 23008.05109125703),
(-1560022.3941012006, 23008.051091199268),
(-1560022.394101274, 23008.051091134006),
(-1560022.3941013406, 23008.051091061872),
(-1560022.3941013406, 23008.05109106189),
(-1561246.8250177177, 21542.67540491616),
(-1562587.3225330082, 22662.761275431232),
(-1562587.3225330082, 22662.761275431225),
(-1562587.3225330864, 22662.761275490382),
(-1562587.3225331702, 22662.761275541576),
(-1562587.3225332585, 22662.76127558432),
(-1562587.3225333507, 22662.761275618195),
(-1562587.3225334457, 22662.761275642883),
(-1562587.3225335425, 22662.76127565814),
(-1562587.3225336405, 22662.76127566382),
(-1562587.3225337386, 22662.761275659872),
(-1562587.322533836, 22662.761275646328),
(-1562587.3225339311, 22662.761275623325),
(-1562587.322534024, 22662.761275591078),
(-1562587.322534113, 22662.761275549903),
(-1562587.3225341977, 22662.761275500197),
(-1562587.3225342769, 22662.761275442434),
(-1562587.3225343502, 22662.761275377172),
(-1562587.3225344168, 22662.761275305038),
(-1562587.3225344168, 22662.761275305056),
(-1563827.8108540243, 21178.168393675307),
(-1566088.6549106995, 23067.272591508467),
(-1565168.3083691986, 24168.725868050966),
(-1565168.3083691986, 24168.725868050984),
(-1565168.3083691394, 24168.725868129284),
(-1565168.3083690882, 24168.72586821301),
(-1565168.3083690456, 24168.725868301346),
(-1565168.3083690116, 24168.72586839345),
(-1565168.308368987, 24168.725868488425),
(-1565168.3083689718, 24168.725868585367),
(-1565168.308368966, 24168.725868683334),
(-1565168.30836897, 24168.72586878139),
(-1565168.3083689834, 24168.72586887858),
(-1565168.3083690065, 24168.725868973983),
(-1565168.3083690389, 24168.725869066668),
(-1565168.3083690798, 24168.725869155744),
(-1565168.3083691297, 24168.72586924036),
(-1565168.3083691874, 24168.725869319693),
(-1565168.3083692526, 24168.725869392987),
(-1565168.3083693248, 24168.725869459537),
(-1566088.6549107092, 24937.744196777505),
(-1565168.3083692326, 26039.19747329144),
(-1565168.3083691734, 26039.19747336976),
(-1565168.3083691222, 26039.197473453485),
(-1565168.3083690796, 26039.197473541826),
(-1565168.3083690456, 26039.19747363393),
(-1565168.308369021, 26039.19747372891),
(-1565168.3083690058, 26039.197473825854),
(-1565168.308369, 26039.197473923825),
(-1565168.308369004, 26039.19747402188),
(-1565168.3083690174, 26039.197474119075),
(-1565168.3083690405, 26039.197474214478),
(-1565168.3083690729, 26039.197474307162),
(-1565168.3083691138, 26039.197474396242),
(-1565168.3083691637, 26039.197474480858),
(-1565168.3083692214, 26039.19747456019),
(-1565168.3083692866, 26039.197474633485),
(-1565168.3083693588, 26039.197474700028),
(-1565168.308369437, 26039.197474759178),
(-1565168.3083695208, 26039.197474810368),
(-1565168.308369609, 26039.197474853107),
(-1565168.3083697013, 26039.19747488698),
(-1565168.3083697963, 26039.197474911663),
(-1565168.308369893, 26039.197474926917),
(-1565168.3083699911, 26039.197474932596),
(-1565168.3083700892, 26039.197474928646),
(-1565168.3083701865, 26039.1974749151),
(-1565168.3083702817, 26039.1974748921),
(-1565168.3083703746, 26039.19747485985),
(-1565168.3083704636, 26039.197474818677),
(-1565168.3083705483, 26039.19747476897),
(-1565168.3083706275, 26039.197474711207),
(-1565168.3083707008, 26039.197474645945),
(-1565168.3083707674, 26039.197474573815),
(-1565168.3083707674, 26039.197474573833),
(-1567415.8784531695, 23349.348249428767),
(-1567709.3083691455, 23594.530876865312),
(-1567709.3083691455, 23594.530876865305),
(-1567709.3083692237, 23594.53087692446),
(-1567709.3083693075, 23594.530876975652),
(-1567709.3083693958, 23594.530877018395),
(-1567709.308369488, 23594.53087705227),
(-1567709.308369583, 23594.53087707696),
(-1567709.3083696798, 23594.530877092217),
(-1567709.3083697779, 23594.5308770979),
(-1567709.308369876, 23594.530877093952),
(-1567709.3083699732, 23594.53087708041),
(-1567709.3083700684, 23594.530877057412),
(-1567709.308370161, 23594.53087702517),
(-1567709.3083702503, 23594.530876983998),
(-1567709.3083703348, 23594.530876934292),
(-1567709.3083704142, 23594.53087687653),
(-1567709.3083704875, 23594.530876811277),
(-1567709.3083705541, 23594.530876739147),
(-1567709.3083706133, 23594.530876660847),
(-1567709.3083706645, 23594.530876577122),
(-1567709.308370707, 23594.530876488785),
(-1567709.308370741, 23594.530876396682),
(-1567709.3083707658, 23594.530876301702),
(-1567709.308370781, 23594.53087620476),
(-1567709.3083707867, 23594.53087610679),
(-1567709.3083707828, 23594.530876008732),
(-1567709.3083707693, 23594.530875911536),
(-1567709.3083707462, 23594.530875816134),
(-1567709.3083707138, 23594.530875723445),
(-1567709.3083706729, 23594.530875634366),
(-1567709.308370623, 23594.53087554975),
(-1567709.3083705653, 23594.530875470413),
(-1567709.3083705, 23594.53087539712),
(-1567709.308370428, 23594.530875330573),
(-1567709.308370428, 23594.530875330565),
(-1566848.2390978509, 22875.04313682535),
(-1567709.3083706305, 21844.531770653648)]
windows 10
1.6.4.post2 installed with pip
I get the same result with Shapely 1.7 on Ubuntu. Seems like a GEOS issue? Here's a (very) old report which describes this same error, but is marked as "fixed".
This is a bug with GEOS master (ish) on Linux, as confirmed with PostGIS. The buffer returns POLYGON EMPTY
. The valid input has hex-encoded WKB:
010300000001000000D0000000AD60F14EDDEB37C199C787082255D540AD60F14EDDEB37C194C787082255D540AB61F14EDDEB37C1817387082255D5408762F14EDDEB37C19B1987082255D5403E63F14EDDEB37C1C1BA86082255D540D063F14EDDEB37C1DC5786082255D5403A64F14EDDEB37C1E1F185082255D5407B64F14EDDEB37C1CA8985082255D5409464F14EDDEB37C1992085082255D5408364F14EDDEB37C150B784082255D5404964F14EDDEB37C1F44E84082255D540E663F14EDDEB37C184E883082255D5405B63F14EDDEB37C1FF8483082255D540AB62F14EDDEB37C15A2583082255D540D561F14EDDEB37C17FCA82082255D540DD60F14EDDEB37C1507582082255D540C55FF14EDDEB37C19D2682082255D5408F5EF14EDDEB37C12ADF81082255D5408F5EF14EDDEB37C128DF81082255D5409285353D80E837C1F44E66D142A1D440B9F9D06991EB37C15FE56A3157B6D340B9F9D06991EB37C15AE56A3157B6D340B7FAD06991EB37C147916A3157B6D34093FBD06991EB37C161376A3157B6D3404AFCD06991EB37C187D8693157B6D340DCFCD06991EB37C1A275693157B6D34046FDD06991EB37C1A70F693157B6D34087FDD06991EB37C190A7683157B6D340A0FDD06991EB37C15F3E683157B6D3408FFDD06991EB37C116D5673157B6D34055FDD06991EB37C1BA6C673157B6D340F2FCD06991EB37C14A06673157B6D34067FCD06991EB37C1C5A2663157B6D340B7FBD06991EB37C12043663157B6D340E1FAD06991EB37C145E8653157B6D340E9F9D06991EB37C11693653157B6D340D1F8D06991EB37C16344653157B6D3409BF7D06991EB37C1F0FC643157B6D3409BF7D06991EB37C1EEFC643157B6D340D3C2197917DC37C171E65F5EB77AD040D3C2197917DC37C173E65F5EB77AD04083C1197917DC37C1EEA65F5EB77AD0401BC0197917DC37C1F66F5F5EB77AD040A0BE197917DC37C111425F5EB77AD04014BD197917DC37C1B11D5F5EB77AD0407CBB197917DC37C12F035F5EB77AD040DCB9197917DC37C1CDF25E5EB77AD04037B8197917DC37C1B4EC5E5EB77AD04092B6197917DC37C1F1F05E5EB77AD040F0B4197917DC37C17CFF5E5EB77AD04057B3197917DC37C12F185F5EB77AD040C8B1197917DC37C1CF3A5F5EB77AD0404AB0197917DC37C105675F5EB77AD040DEAE197917DC37C1649C5F5EB77AD0408AAD197917DC37C16ADA5F5EB77AD0404FAC197917DC37C17D20605EB77AD04031AB197917DC37C1F16D605EB77AD04031AB197917DC37C1EC6D605EB77AD040B82AEC6E71CA37C181FB5E0A7EC2D540BA29EC6E71CA37C1994F5F0A7EC2D540DE28EC6E71CA37C17FA95F0A7EC2D5402728EC6E71CA37C15908600A7EC2D5409527EC6E71CA37C13E6B600A7EC2D5402B27EC6E71CA37C139D1600A7EC2D540EA26EC6E71CA37C15039610A7EC2D540D126EC6E71CA37C181A2610A7EC2D540E226EC6E71CA37C1CA0B620A7EC2D5401C27EC6E71CA37C12674620A7EC2D5407F27EC6E71CA37C196DA620A7EC2D5400A28EC6E71CA37C11B3E630A7EC2D540BA28EC6E71CA37C1C09D630A7EC2D5409029EC6E71CA37C19BF8630A7EC2D540882AEC6E71CA37C1CA4D640A7EC2D540A02BEC6E71CA37C17D9C640A7EC2D540D62CEC6E71CA37C1F0E3640A7EC2D540D62CEC6E71CA37C1F2E3640A7EC2D540AFBBE364D6CD37C177F913450378D640AFBBE364D6CD37C175F913450378D640FFBCE364D6CD37C1FA3814450378D64067BEE364D6CD37C1F26F14450378D640E2BFE364D6CD37C1D79D14450378D6406EC1E364D6CD37C137C214450378D64006C3E364D6CD37C1B9DC14450378D640A6C4E364D6CD37C11BED14450378D6404BC6E364D6CD37C134F314450378D640F0C7E364D6CD37C1F7EE14450378D64092C9E364D6CD37C16CE014450378D6402BCBE364D6CD37C1B9C714450378D640BACCE364D6CD37C119A514450378D64038CEE364D6CD37C1E37814450378D640A4CFE364D6CD37C1844314450378D640F8D0E364D6CD37C17E0514450378D64033D2E364D6CD37C16BBF13450378D64051D3E364D6CD37C1F77113450378D64051D3E364D6CD37C1FC7113450378D640745C34D39ED237C19E8AD539AB09D540F2859152DBD737C11996BCB8B021D640F2859152DBD737C11796BCB8B021D64042879152DBD737C19CD5BCB8B021D640AA889152DBD737C1940CBDB8B021D640258A9152DBD737C1793ABDB8B021D640B18B9152DBD737C1D95EBDB8B021D640498D9152DBD737C15B79BDB8B021D640E98E9152DBD737C1BD89BDB8B021D6408E909152DBD737C1D68FBDB8B021D64033929152DBD737C1998BBDB8B021D640D5939152DBD737C10E7DBDB8B021D6406E959152DBD737C15B64BDB8B021D640FD969152DBD737C1BB41BDB8B021D6407B989152DBD737C18515BDB8B021D640E7999152DBD737C126E0BCB8B021D6403B9B9152DBD737C120A2BCB8B021D640769C9152DBD737C10D5CBCB8B021D640949D9152DBD737C1990EBCB8B021D640949D9152DBD737C19E0EBCB8B021D6401C2194CFB3DC37C11344F6C68AAED440443AA8A788E537C182A72372D186D640A748F14EF0E137C107459F742E9AD740A748F14EF0E137C10C459F742E9AD740A947F14EF0E137C11F999F742E9AD740CD46F14EF0E137C105F39F742E9AD7401646F14EF0E137C1DF51A0742E9AD7408445F14EF0E137C1C4B4A0742E9AD7401A45F14EF0E137C1BF1AA1742E9AD740D944F14EF0E137C1D682A1742E9AD740C044F14EF0E137C107ECA1742E9AD740D144F14EF0E137C15055A2742E9AD7400B45F14EF0E137C1ACBDA2742E9AD7406E45F14EF0E137C11C24A3742E9AD740F945F14EF0E137C1A187A3742E9AD740A946F14EF0E137C146E7A3742E9AD7407F47F14EF0E137C12142A4742E9AD7407748F14EF0E137C15097A4742E9AD7408F49F14EF0E137C103E6A4742E9AD740C54AF14EF0E137C1782DA5742E9AD7406E3AA8A788E537C14B85EBA06F5AD8403949F14EF0E137C1240467A3CC6DD9403B48F14EF0E137C13D5867A3CC6DD9405F47F14EF0E137C123B267A3CC6DD940A846F14EF0E137C1FE1068A3CC6DD9401646F14EF0E137C1E37368A3CC6DD940AC45F14EF0E137C1DFD968A3CC6DD9406B45F14EF0E137C1F74169A3CC6DD9405245F14EF0E137C129AB69A3CC6DD9406345F14EF0E137C172146AA3CC6DD9409D45F14EF0E137C1CF7C6AA3CC6DD9400046F14EF0E137C13FE36AA3CC6DD9408B46F14EF0E137C1C4466BA3CC6DD9403B47F14EF0E137C16AA66BA3CC6DD9401148F14EF0E137C145016CA3CC6DD9400949F14EF0E137C174566CA3CC6DD940214AF14EF0E137C127A56CA3CC6DD940574BF14EF0E137C19AEC6CA3CC6DD940A74CF14EF0E137C11D2C6DA3CC6DD9400F4EF14EF0E137C114636DA3CC6DD9408A4FF14EF0E137C1F8906DA3CC6DD9401651F14EF0E137C157B56DA3CC6DD940AE52F14EF0E137C1D8CF6DA3CC6DD9404E54F14EF0E137C139E06DA3CC6DD940F355F14EF0E137C152E66DA3CC6DD9409857F14EF0E137C114E26DA3CC6DD9403A59F14EF0E137C189D36DA3CC6DD940D35AF14EF0E137C1D6BA6DA3CC6DD940625CF14EF0E137C136986DA3CC6DD940E05DF14EF0E137C1006C6DA3CC6DD9404C5FF14EF0E137C1A1366DA3CC6DD940A060F14EF0E137C19BF86CA3CC6DD940DB61F14EF0E137C188B26CA3CC6DD940F962F14EF0E137C115656CA3CC6DD940F962F14EF0E137C11A656CA3CC6DD940924EE2E0B7EA37C1DAF8B74956CDD640C347F14EDDEB37C1AEF5E2F9A10AD740C347F14EDDEB37C1ACF5E2F9A10AD7401349F14EDDEB37C13035E3F9A10AD7407B4AF14EDDEB37C1286CE3F9A10AD740F64BF14EDDEB37C10D9AE3F9A10AD740824DF14EDDEB37C16DBEE3F9A10AD7401A4FF14EDDEB37C1EFD8E3F9A10AD740BA50F14EDDEB37C151E9E3F9A10AD7405F52F14EDDEB37C16BEFE3F9A10AD7400454F14EDDEB37C12EEBE3F9A10AD740A655F14EDDEB37C1A4DCE3F9A10AD7403F57F14EDDEB37C1F2C3E3F9A10AD740CD58F14EDDEB37C153A1E3F9A10AD7404C5AF14EDDEB37C11E75E3F9A10AD740B75BF14EDDEB37C1BF3FE3F9A10AD7400C5DF14EDDEB37C1BA01E3F9A10AD740475EF14EDDEB37C1A9BBE2F9A10AD740655FF14EDDEB37C1366EE2F9A10AD7406360F14EDDEB37C1231AE2F9A10AD7403F61F14EDDEB37C13DC0E1F9A10AD740F661F14EDDEB37C16361E1F9A10AD7408862F14EDDEB37C17EFEE0F9A10AD740F262F14EDDEB37C18298E0F9A10AD7403363F14EDDEB37C16B30E0F9A10AD7404C63F14EDDEB37C139C7DFF9A10AD7403B63F14EDDEB37C1EF5DDFF9A10AD7400163F14EDDEB37C192F5DEF9A10AD7409E62F14EDDEB37C1228FDEF9A10AD7401362F14EDDEB37C19C2BDEF9A10AD7406361F14EDDEB37C1F6CBDDF9A10AD7408D60F14EDDEB37C11B71DDF9A10AD740955FF14EDDEB37C1EB1BDDF9A10AD7407D5EF14EDDEB37C138CDDCF9A10AD740475DF14EDDEB37C1C485DCF9A10AD740475DF14EDDEB37C1C285DCF9A10AD7404A84353D80E837C188F5C0C2C256D640AD60F14EDDEB37C199C787082255D540
It is not a bug with JTS, which returns a non-empty:
POLYGON ((-1567709.30837 21844.53177, -1566848.2391 22875.04314, -1567415.87845 23349.34825, -1566088.65491 24937.7442, -1565168.30837 24168.72587, -1566088.65491 23067.27259, -1563827.81085 21178.16839, -1562587.32253 22662.76127, -1561246.82502 21542.6754, -1560022.3941 23008.05109, -1559153.43329 22281.96938, -1563671.47305 16874.86514, -1567633.41334 20185.36239, -1566848.2391 21125.04403, -1567709.30837 21844.53177))
There is a history of buffer robustness issues with JTS/GEOS, see this trac from ~9 years ago. Also, anyone that follows @dr-jts will know there are some fantastic advancements with OverlayNG in JTS that provide more robust buffer outputs, read about them here. Paul Ramsey has started porting this to GEOS, and would appreciate some help.
@mwtoews I was about to post almost exactly the same screenshot of JTS testbuilder but you beat me to it!
@tomplex Hopefully you weren't also filing a GEOS bug...
See upstream GEOS #1032. There's nothing that can be done on the Shapely side, unfortunately.
Also, anyone that follows @dr-jts will know there are some fantastic advancements with OverlayNG in JTS that provide more robust buffer outputs,
@mwtoews Thanks for pointing out the OverlayNG improvements. Unfortunately at the moment that code is only targeting overlay. But there is potential to use it in buffering as well. Not sure of the timeline for that however.
I've marked this as an upstream bug.