turf icon indicating copy to clipboard operation
turf copied to clipboard

Issue with turf.difference behavior between Turf.js v5.16 and v6.5 (and recent versions)

Open elyeshkiri opened this issue 1 year ago • 3 comments

I’ve encountered a discrepancy in the behavior of the turf.difference function between Turf.js versions 5.16 and 6.5.

In version 5.16, using turf.difference to subtract holes (multipolygon) from a world polygon works as expected, producing the correct result. However, when I update to version 6.5, the output is incorrect or differs from the expected result.

Steps to Reproduce:

Use the following world polygon as the outer boundary:

const worldPolygon = turf.polygon([[
    [-180.0, 89.0],
    [-180.0, -89.0],
    [180.0, -89.0],
    [180.0, 89.0],
    [-180.0, 89.0]
]]);

Use the multipolygon as the holes:

const multiPolygon =  turf.multiPolygon([
    [
        [
            [
                1.5848481682316446,
                48.31986594114687
            ],
            [
                1.8832104345803926,
                48.42342314863003
            ],
            [
                1.8734490264407953,
                48.31243967954646
            ],
            [
                2.0474541685456376,
                48.433892157002646
            ],
            [
                1.9407386741551667,
                48.44339036470831
            ],
            [
                2.139324407980982,
                48.51231658749331
            ],
            [
                2.140165825025228,
                48.54733551405033
            ],
            [
                2.005794737854104,
                48.62423252424017
            ],
            [
                2.14201346746852,
                48.62423252424017
            ],
            [
                2.1464195901569383,
                48.80761089514678
            ],
            [
                2.017641560842897,
                48.71825624766248
            ],
            [
                1.9156353862877893,
                48.79208242133859
            ],
            [
                1.9086020675566275,
                48.71211628317572
            ],
            [
                1.977029724641852,
                48.69007709065282
            ],
            [
                1.9380268126907942,
                48.663014310869556
            ],
            [
                1.9059004038856775,
                48.68139940276142
            ],
            [
                1.9020902267645763,
                48.638079149302555
            ],
            [
                1.8821344534680975,
                48.62423252424017
            ],
            [
                1.9008723646838,
                48.62423252424018
            ],
            [
                1.8853998352913024,
                48.448315795534654
            ],
            [
                1.7548343829094222,
                48.459936767662384
            ],
            [
                1.5848481682316446,
                48.31986594114687
            ]
        ]
    ],
    [
        [
            [
                1.7796498887017833,
                48.75364922492895
            ],
            [
                1.9059004038856775,
                48.68139940276142
            ],
            [
                1.9086020675566275,
                48.71211628317572
            ],
            [
                1.7796498887017833,
                48.75364922492895
            ]
        ]
    ],
    [
        [
            [
                2.0474541685456376,
                48.433892157002646
            ],
            [
                2.269137922503419,
                48.414161204603545
            ],
            [
                2.3139242542554825,
                48.62423252424017
            ],
            [
                2.14201346746852,
                48.62423252424017
            ],
            [
                2.140165825025228,
                48.54733551405033
            ],
            [
                2.1779387566694766,
                48.52571906686143
            ],
            [
                2.139324407980982,
                48.51231658749331
            ],
            [
                2.13897493841921,
                48.497772017709025
            ],
            [
                2.0474541685456376,
                48.433892157002646
            ]
        ]
    ],
    [
        [
            [
                2.268015568539596,
                48.408896777510364
            ],
            [
                2.2741686461205703,
                48.41371344527771
            ],
            [
                2.269137922503419,
                48.414161204603545
            ],
            [
                2.268015568539596,
                48.408896777510364
            ]
        ]
    ],
    [
        [
            [
                2.2741686461205703,
                48.41371344527771
            ],
            [
                2.4578541878508133,
                48.39736452202297
            ],
            [
                2.4938366712502784,
                48.58567095470934
            ],
            [
                2.2741686461205703,
                48.41371344527771
            ]
        ]
    ]
])

Apply turf.difference to subtract each hole from the world polygon;

let result = turf.difference(worldPolygon, multiPolygon);

The output from Turf.js v5.16 works as expected, but in Turf.js v6.5, the result is incorrect.

Expected Result:

The world polygon should have the specified holes subtracted correctly, and the resulting polygon should reflect these changes.

Image

https://jsfiddle.net/om39s8fh/1/

Actual Result:

In Turf.js v6.5 and recent versions, the output is incorrect, and the holes do not seem to be subtracted from the world polygon as expected. https://jsfiddle.net/yg2dj108/2/

Image

elyeshkiri avatar Feb 10 '25 15:02 elyeshkiri

The issue described in this comment has a different cause and is being tracked here instead - https://github.com/Turfjs/turf/issues/2887

hf-farmqa avatar Feb 17 '25 17:02 hf-farmqa

Hi @elyeshkiri and @hf-farmqa. Thanks for raising and for the examples. Between 5.16 and 6.5.0 and then 7+ Turf has switched polygon clipping libraries a couple of times to address various issues.

It's becoming apparent that this has just resulted in other issues (such as yours) coming to the fore. Will take a look.

smallsaucepan avatar May 18 '25 09:05 smallsaucepan

Hi @hf-farmqa. Have confirmed your issue isn't the same as OPs. Could I please trouble you to log the behaviour as a separate issue? Better if you do it so you are subscribed, etc. Just copy pasting your comments above would be fine. Thank you 🙏

smallsaucepan avatar May 18 '25 11:05 smallsaucepan