Turfjs / turf

A modular geospatial engine written in JavaScript and TypeScript
https://turfjs.org/
MIT License
9.3k stars 941 forks source link

turf-mask fails #837

Closed andrewharvey closed 7 years ago

andrewharvey commented 7 years ago

In the above data/example app, turf-mask fails with:

Uncaught Error: Each LinearRing of a Polygon must have 4 or more Positions.
    at Object.polygon (npmcdn.com/@turf/turf@4.5.2/turf.js:599)
    at buildMask (npmcdn.com/@turf/turf@4.5.2/turf.js:20252)
    at Object.module.exports [as mask] (npmcdn.com/@turf/turf@4.5.2/turf.js:20228)
    at e.<anonymous> (<anonymous>:516:23)
    at e.Evented.fire (mapbox-gl.js:411)
    at e._render (mapbox-gl.js:385)

From what I could tell it's the unionPolygons step where it returns a MultiPolygon but the spec at https://github.com/Turfjs/turf/blob/master/packages/turf-mask/index.js#L137 says it should only return Polygon: @returns {FeatureCollection<Polygon>} polygons only apply union if they collide

I don't have the time to investigate further and I'll workaround this issue so it's not a critical issues.

/cc @rowanwins just flagging you as you did the original implementation.

DenisCarriere commented 7 years ago

Internally this library is using union from jsts which outputs Polygon|MultiPolygon, however the MultiPolygon output isn't get handled properly.

Solution: We could use flattenEach from @turf/meta to process the unioned outputs into simple polygons.

thiagoxvo commented 7 years ago

I am having the same issue here, I can try to fix and send a PR :)

rowanwins commented 7 years ago

That would be great thanks @thiagoxvo , sing out if you need a hand!