{"_id":"concaveman","_rev":"27-7efe1f7a1a907a8a7a55cbe9121fd2a0","name":"concaveman","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"concaveman","version":"1.0.0","keywords":["concave","hull","algorithm","geometry","shape","outline"],"author":{"name":"Vladimir Agafonkin"},"license":"ISC","_id":"concaveman@1.0.0","maintainers":[{"name":"mourner","email":"agafonkin@gmail.com"}],"dist":{"shasum":"f61f35bf0f50cf7964b6cfdd1523e8636f4aa7df","tarball":"https://registry.npmjs.org/concaveman/-/concaveman-1.0.0.tgz","integrity":"sha512-LKkxeac15Gm4pnt7+qqn7SKV6nrqec6BNXVxHnxSEccbLgsWlacBcHBZR00kkWiHyBgzAlsU/z62sbWDkooYiQ==","signatures":[{"sig":"MEQCIHdDF2Hm228yU7mqc8/H/5IharYtfXhZT6ylp9WQSpLzAiBRg/L8+/HtlenXnbhCOoPOXd3LVzgBwQCUcsSEjoyaoA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"f61f35bf0f50cf7964b6cfdd1523e8636f4aa7df","gitHead":"c49c7e191b6a86604010cd71ec89d78c8307a769","scripts":{"test":"tap test/test.js","pretest":"eslint index.js test/*.js"},"_npmUser":{"name":"mourner","email":"agafonkin@gmail.com"},"_npmVersion":"2.14.17","description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","directories":{},"_nodeVersion":"5.5.0","dependencies":{"rbush":"^1.4.2","tinyqueue":"^1.0.1","point-in-polygon":"^1.0.0","robust-orientation":"^1.1.3","monotone-convex-hull-2d":"^1.0.1"},"eslintConfig":{"extends":"mourner"},"devDependencies":{"tap":"^5.4.3","eslint":"^1.10.3","eslint-config-mourner":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/concaveman-1.0.0.tgz_1455198471047_0.6993291596882045","host":"packages-9-west.internal.npmjs.com"}},"1.1.0":{"name":"concaveman","version":"1.1.0","keywords":["concave","hull","algorithm","geometry","shape","outline"],"author":{"name":"Vladimir Agafonkin"},"license":"ISC","_id":"concaveman@1.1.0","maintainers":[{"name":"mourner","email":"agafonkin@gmail.com"}],"homepage":"https://github.com/mapbox/concaveman#readme","bugs":{"url":"https://github.com/mapbox/concaveman/issues"},"dist":{"shasum":"3072395ec6facb0c64c2cecd4f30f26798be3dda","tarball":"https://registry.npmjs.org/concaveman/-/concaveman-1.1.0.tgz","integrity":"sha512-ochXXb88YDUOA6a0Jpi0WctYCAzmBOBQeJe+bUW0pZImiAMvj2Qf7LTLiOeB1aHcZRyAx9yPU1Qk1929t0j7RQ==","signatures":[{"sig":"MEUCIEuEQVOp1PwTOdzmqK73UGVlVJGQJedwW6dn4WYaiDcOAiEA6lGiV5b/1jjnSXaU8I6AIyjPX06Hh/7CahnEiWLY/I4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"3072395ec6facb0c64c2cecd4f30f26798be3dda","gitHead":"a539290022d8530b237e735a640801f9f07f9c8f","scripts":{"test":"tap test/test.js","pretest":"eslint index.js test/*.js"},"_npmUser":{"name":"mourner","email":"agafonkin@gmail.com"},"repository":{"url":"git://github.com/mapbox/concaveman.git","type":"git"},"_npmVersion":"3.6.0","description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","directories":{},"_nodeVersion":"5.6.0","dependencies":{"rbush":"^1.4.2","tinyqueue":"^1.0.1","point-in-polygon":"^1.0.0","robust-orientation":"^1.1.3","monotone-convex-hull-2d":"^1.0.1"},"eslintConfig":{"extends":"mourner"},"devDependencies":{"tap":"^5.4.3","eslint":"^1.10.3","eslint-config-mourner":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/concaveman-1.1.0.tgz_1455552644591_0.9769942772109061","host":"packages-6-west.internal.npmjs.com"}},"1.1.1":{"name":"concaveman","version":"1.1.1","keywords":["concave","hull","algorithm","geometry","shape","outline"],"author":{"name":"Vladimir Agafonkin"},"license":"ISC","_id":"concaveman@1.1.1","maintainers":[{"name":"mourner","email":"agafonkin@gmail.com"}],"homepage":"https://github.com/mapbox/concaveman#readme","bugs":{"url":"https://github.com/mapbox/concaveman/issues"},"dist":{"shasum":"6c2482580b2523cef82fc2bec00a0415e6e68162","tarball":"https://registry.npmjs.org/concaveman/-/concaveman-1.1.1.tgz","integrity":"sha512-JaPfD7sXF5ztt3ETOVFu+mL/yID9TqwjWs+C/ue//aiLwI0HrNZ3rvO7omKd+9UUESW5JBKJCTw9oEJVfhAM0Q==","signatures":[{"sig":"MEQCIAUd+Vi8bVRlfHOj4ZpHO7qw7DJg9EksDwyTd/eFcEAJAiANnZgBz4TBSIyozqZ2p5hgzatuVlJb1rjmoKR5qwhZfw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"6c2482580b2523cef82fc2bec00a0415e6e68162","gitHead":"69a44b9b28aab0532e82c3a194a57a9a3b4fbfa0","scripts":{"test":"tap test/test.js","pretest":"eslint index.js test/*.js"},"_npmUser":{"name":"mourner","email":"agafonkin@gmail.com"},"repository":{"url":"git://github.com/mapbox/concaveman.git","type":"git"},"_npmVersion":"3.10.7","description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","directories":{},"_nodeVersion":"6.6.0","dependencies":{"rbush":"^2.0.1","tinyqueue":"^1.1.0","point-in-polygon":"^1.0.1","robust-orientation":"^1.1.3","monotone-convex-hull-2d":"^1.0.1"},"eslintConfig":{"extends":"mourner"},"devDependencies":{"tap":"^7.1.2","eslint":"^3.6.0","eslint-config-mourner":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/concaveman-1.1.1.tgz_1474896155750_0.11352050444111228","host":"packages-16-east.internal.npmjs.com"}},"1.2.0":{"name":"concaveman","version":"1.2.0","keywords":["concave","hull","algorithm","geometry","shape","outline"],"author":{"name":"Vladimir Agafonkin"},"license":"ISC","_id":"concaveman@1.2.0","maintainers":[{"name":"mapbox-admin","email":"accounts@mapbox.com"},{"name":"mapbox-machine-user","email":"accounts+npm-mapbox-machine-user@mapbox.com"},{"name":"mapbox-npm","email":"accounts+npmjs@mapbox.com"},{"name":"mapbox-npm-01","email":"accounts+npmjs-01@mapbox.com"},{"name":"mapbox-npm-02","email":"accounts+npmjs-02@mapbox.com"},{"name":"mapbox-npm-03","email":"accounts+npmjs-03@mapbox.com"},{"name":"mapbox-npm-04","email":"accounts+npmjs-04@mapbox.com"},{"name":"mapbox-npm-05","email":"accounts+npmjs-05@mapbox.com"},{"name":"mapbox-npm-06","email":"accounts+npmjs-06@mapbox.com"},{"name":"mapbox-npm-07","email":"accounts+npmjs-07@mapbox.com"},{"name":"mapbox-npm-08","email":"accounts+npmjs-08@mapbox.com"},{"name":"mapbox-npm-09","email":"accounts+npmjs-09@mapbox.com"},{"name":"mapbox-npm-advanced-actions","email":"accounts+npmjs-advanced-actions@mapbox.com"},{"name":"mapbox-npm-ci","email":"accounts+npmjs-npm-ci@mapbox.com"},{"name":"mourner","email":"agafonkin@gmail.com"}],"homepage":"https://github.com/mapbox/concaveman#readme","bugs":{"url":"https://github.com/mapbox/concaveman/issues"},"dist":{"shasum":"4340f27c08a11bdc1d5fac13476862a2ab09b703","tarball":"https://registry.npmjs.org/concaveman/-/concaveman-1.2.0.tgz","fileCount":5,"integrity":"sha512-OcqechF2/kubbffomKqjGEkb0ndlYhEbmyg/fxIGqdfYp5AZjD2Kl5hc97Hh3ngEuHU2314Z4KDbxL7qXGWrQQ==","signatures":[{"sig":"MEUCIBVNswd7JNQt6xt+8cNoYeZkJR0zfkF7FfyQYB2caygBAiEAujZb2/+9ZsR9Hsxvq3jVzIn3Si1/cR/3uyDNbfSFbe4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewlXsCRA9TVsSAnZWagAAcGUQAIKY6BJC70GTZAdn9jqz\nrwmj3Ho9wfrTwiOD7QLA1rWbnOYsY5BcmXKUD/eM9XWNSy55l2yADeHNcGpD\nNvJIbXydjW/KP+gNSlCMwFxBJxX0qV0pXDIp5fJNig34CFz/t3OgjToSIuZP\nVTeodB0+QZdUInWmDuZGQ1vRXCuW6aJagBoFe0iDQ9CIjyAesU6FUHyHcNzt\n7OOoxcdfgkaTsM0ZuGWIQSekvxqLGXihCTA/xjUzlkTwxsiinbXMpkfzIg1L\njpRMpnCOu68xTHX5HNWLStAVJMf4tdNo6EcwPo57rAewX2apTD1p+RU4sBP3\nTnilNmbumFMjbhXOyaFaE5GN3m7B9LbXLwKAu2uohdipRob2auZZ0WQl1SEz\n3bCdlGMmmbZM3vElMxX1QBjWXvXUX3zs/1JOj9RgGfohKONy0jbL6vybdkze\n85urveHr0g+yqLsbG392hZcgAxa9o9pfXu9BL0xZTSb/x2Hp4s+TzYmgp46X\n5LyIYN+dVCcihb2ELfVGiCDqkvV0PYI7JvhV3yHN8KMKfl4MdfKBH9Nor3aq\nu2Xkz6Vj8vLmcaeXXmE6+19O7OCjgN7M9IcGTaCHLiXohrVH0rqDabaghDzz\nyCEJ6u42cOj29rkG5j19hFkPBNF9ZUBC858jG80DZBGjL6ksvOfyjqJqart9\ntGdd\r\n=BcnR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"54838e1c9eb416f4393438df7e78ac2b0ca7faa5","scripts":{"test":"tape test/test.js","pretest":"eslint index.js test/*.js"},"_npmUser":{"name":"mourner","email":"agafonkin@gmail.com"},"repository":{"url":"git://github.com/mapbox/concaveman.git","type":"git"},"_npmVersion":"6.14.4","description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","directories":{},"_nodeVersion":"10.20.1","dependencies":{"rbush":"^3.0.0","tinyqueue":"^2.0.3","point-in-polygon":"^1.0.1","robust-predicates":"^2.0.4"},"eslintConfig":{"extends":"mourner"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^5.0.0","eslint":"^7.0.0","eslint-config-mourner":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/concaveman_1.2.0_1589794284325_0.6584958601906441","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"concaveman","version":"1.2.1","keywords":["concave","hull","algorithm","geometry","shape","outline"],"author":{"name":"Vladimir Agafonkin"},"license":"ISC","_id":"concaveman@1.2.1","maintainers":[{"name":"mapbox-npm-01","email":"accounts+npmjs-01@mapbox.com"},{"name":"mapbox-npm-02","email":"accounts+npmjs-02@mapbox.com"},{"name":"mapbox-npm-07","email":"accounts+npmjs-07@mapbox.com"},{"name":"mapbox-npm-03","email":"accounts+npmjs-03@mapbox.com"},{"name":"mapbox-npm-04","email":"accounts+npmjs-04@mapbox.com"},{"name":"mapbox-npm-09","email":"accounts+npmjs-09@mapbox.com"},{"name":"mapbox-npm-05","email":"accounts+npmjs-05@mapbox.com"},{"name":"mapbox-npm-06","email":"accounts+npmjs-06@mapbox.com"},{"name":"mapbox-npm-08","email":"accounts+npmjs-08@mapbox.com"},{"name":"mapbox-npm-advanced-actions","email":"accounts+npmjs-advanced-actions@mapbox.com"},{"name":"mapbox-npm-ci","email":"accounts+npmjs-npm-ci@mapbox.com"},{"name":"mapbox-npm","email":"accounts+npmjs@mapbox.com"},{"name":"mapbox-admin","email":"accounts@mapbox.com"},{"name":"mapbox-machine-user","email":"accounts+npm-mapbox-machine-user@mapbox.com"},{"name":"mourner","email":"agafonkin@gmail.com"}],"homepage":"https://github.com/mapbox/concaveman#readme","bugs":{"url":"https://github.com/mapbox/concaveman/issues"},"dist":{"shasum":"47d20b4521125c15fabf453653c2696d9ee41e0b","tarball":"https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz","fileCount":5,"integrity":"sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==","signatures":[{"sig":"MEUCIE/nuLAh4nQ5B2v+q4GbzAZmR7gFERkkrH1iWlVWFC79AiEA7tYTZAvz4wPJFEtzRYEvn0aDj6mAJAQ5Au9FhJEuBaw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEPojCRA9TVsSAnZWagAAV0UP/3FYKAPomPQQeAN08oDR\nUuSox8TWw/5gpBnz9nWvfEO+xwH0zZv28zP87Sv4RtjpUxTe7TQupeoQPhAL\neoi0JkQ5epNG5qV76vqrgBTA8gp1PSPX6BoKDOTZUyNh/FjF/ultKEIkiell\nt9cI3CkIXhpd6E/4SDqkdtpE53jrLHOx+RUs+lcrDkcDicLCWxFnZZkv/Zcd\nw1xjeQ564l2IvLQ7NJt6EtSheHRekcw/eLPMw4xvLjGmfoKaLOJmmCgSwxQa\n4/7nYD6x//xzyp5cKTZIgmE8B6ZvqYUG9BKNT2GDxlSJlUfTjeEPSKX13+Yc\ndxWNggnbJ/02dgftP5EM4YO0Qr4Vv+ftFlO+1ThtNVRxv9QQZa7wd6MZmpHZ\nTf0kUZZy3A9v13OhwYkeSjfYuyp5WvhVcy35bDV74pv/xUkHAJ2zB90O4sSj\ng4hLqLx9SI9Y1mqL5gzDQj+rFfCTGybw0oCm9GFxYLZTj7DCF4TNZRuXBhkI\nuwxSVJq1V9uJCzTQpK1zWl0KxDSykncZZfM7owjlR57Q31V3p1x/6ww2Xv8d\n+4WOmuf2zPhpSuXuDaVkw0XVVqNZB+rlTXM1oqoZbIOtAN5RzgbvomXM/d3W\nuI41dO6B1nbmhhZUJgKdIRYQ34rsCVnrz5bFWEdzP87YtlE4RylGmXHPVf7T\nsvjK\r\n=9mQB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"f01d6e4b2c94e644a46e8113c6065aa0b4b79bc6","scripts":{"test":"tape test/test.js","pretest":"eslint index.js test/*.js"},"_npmUser":{"name":"mourner","email":"agafonkin@gmail.com"},"repository":{"url":"git://github.com/mapbox/concaveman.git","type":"git"},"_npmVersion":"7.19.1","description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","directories":{},"_nodeVersion":"14.17.4","dependencies":{"rbush":"^3.0.1","tinyqueue":"^2.0.3","point-in-polygon":"^1.1.0","robust-predicates":"^2.0.4"},"eslintConfig":{"extends":"mourner"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^5.3.1","eslint":"^7.32.0","eslint-config-mourner":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/concaveman_1.2.1_1628502563120_0.8851149288155771","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"concaveman","version":"2.0.0","description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","type":"module","main":"index.js","exports":"./index.js","dependencies":{"point-in-polygon":"^1.1.0","rbush":"^4.0.1","robust-predicates":"^3.0.2","tinyqueue":"^3.0.0"},"devDependencies":{"eslint":"^9.31.0","eslint-config-mourner":"^4.0.2"},"scripts":{"pretest":"eslint index.js test/*.js","test":"node test/test.js"},"repository":{"type":"git","url":"git://github.com/mapbox/concaveman.git"},"keywords":["concave","hull","algorithm","geometry","shape","outline"],"eslintConfig":{"extends":"mourner"},"author":{"name":"Vladimir Agafonkin"},"license":"ISC","_id":"concaveman@2.0.0","gitHead":"0b8e77d5b6ceb56f6f49446cb1cdd298cf54e38b","bugs":{"url":"https://github.com/mapbox/concaveman/issues"},"homepage":"https://github.com/mapbox/concaveman#readme","_nodeVersion":"20.15.1","_npmVersion":"11.3.0","dist":{"integrity":"sha512-3a9C//4G44/boNehBPZMRh8XxrwBvTXlhENUim+GMm207WoDie/Vq89U5lkhLn3kKA+vxwmwfdQPWIRwjQWoLA==","shasum":"5c4cea7e2329addf619ecae627cb721df05d1eac","tarball":"https://registry.npmjs.org/concaveman/-/concaveman-2.0.0.tgz","fileCount":4,"unpackedSize":14832,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEaikNUVMv0RK7SuZX+eHZ291LW8XeA4PjvcT+boamCPAiEA3i/uZcfnoyWH8FgGIyJLyF5GAoTPDE1T3Yiz2NI7cy8="}]},"_npmUser":{"name":"mbx-npm-03-production","email":"yannick.meeus+npm+prod+03@mapbox.com"},"directories":{},"maintainers":[{"name":"mapbox-npm-01","email":"accounts+npmjs-01@mapbox.com"},{"name":"mapbox-npm-02","email":"accounts+npmjs-02@mapbox.com"},{"name":"mapbox-npm-07","email":"accounts+npmjs-07@mapbox.com"},{"name":"mapbox-npm-03","email":"accounts+npmjs-03@mapbox.com"},{"name":"mapbox-npm-04","email":"accounts+npmjs-04@mapbox.com"},{"name":"mapbox-npm-09","email":"accounts+npmjs-09@mapbox.com"},{"name":"mapbox-npm-05","email":"accounts+npmjs-05@mapbox.com"},{"name":"mapbox-npm-06","email":"accounts+npmjs-06@mapbox.com"},{"name":"mapbox-npm-08","email":"accounts+npmjs-08@mapbox.com"},{"name":"mapbox-npm-advanced-actions","email":"accounts+npmjs-advanced-actions@mapbox.com"},{"name":"mapbox-npm-ci","email":"accounts+npmjs-npm-ci@mapbox.com"},{"name":"mapbox-npm","email":"accounts+npmjs@mapbox.com"},{"name":"mapbox-admin","email":"accounts@mapbox.com"},{"name":"mapbox-machine-user","email":"accounts+npm-mapbox-machine-user@mapbox.com"},{"name":"mbx-npm-ci-staging","email":"yannick.meeus+npm+staging+ci@mapbox.com"},{"name":"mbx-npm-ci-production","email":"yannick.meeus+npm+production+ci@mapbox.com"},{"name":"mbx-npm-01-production","email":"yannick.meeus+npm+prod+01@mapbox.com"},{"name":"mbx-npm-02-production","email":"yannick.meeus+npm+prod+02@mapbox.com"},{"name":"mbx-npm-03-production","email":"yannick.meeus+npm+prod+03@mapbox.com"},{"name":"mbx-npm-04-production","email":"yannick.meeus+npm+prod+04@mapbox.com"},{"name":"mbx-npm-05-production","email":"yannick.meeus+npm+prod+05@mapbox.com"},{"name":"mbx-npm-06-production","email":"yannick.meeus+npm+prod+06@mapbox.com"},{"name":"mbx-npm-07-production","email":"yannick.meeus+npm+prod+07@mapbox.com"},{"name":"mbx-npm-08-production","email":"yannick.meeus+npm+prod+08@mapbox.com"},{"name":"mbx-npm-09-production","email":"yannick.meeus+npm+prod+09@mapbox.com"},{"name":"mbx-npm-02-staging","email":"yannick.meeus@mapbox.com"},{"name":"mbx-npm-advanced-actions-staging","email":"yannick.meeus+npm+staging+advanced+actions@mapbox.com"},{"name":"mbx-npm-advanced-actions-production","email":"yannick.meeus+npm+prod+advanced+actions@mapbox.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/concaveman_2.0.0_1752676149810_0.566982273905289"},"_hasShrinkwrap":false}},"time":{"created":"2016-02-11T13:47:54.105Z","modified":"2025-07-16T14:29:10.253Z","1.0.0":"2016-02-11T13:47:54.105Z","1.1.0":"2016-02-15T16:10:48.399Z","1.1.1":"2016-09-26T13:22:37.133Z","1.2.0":"2020-05-18T09:31:24.463Z","1.2.1":"2021-08-09T09:49:23.353Z","2.0.0":"2025-07-16T14:29:09.989Z"},"bugs":{"url":"https://github.com/mapbox/concaveman/issues"},"author":{"name":"Vladimir Agafonkin"},"license":"ISC","homepage":"https://github.com/mapbox/concaveman#readme","keywords":["concave","hull","algorithm","geometry","shape","outline"],"repository":{"type":"git","url":"git://github.com/mapbox/concaveman.git"},"description":"Fast 2D concave hull algorithm in JavaScript (generates an outline of a point set)","maintainers":[{"name":"mapbox-npm-01","email":"accounts+npmjs-01@mapbox.com"},{"name":"mapbox-npm-02","email":"accounts+npmjs-02@mapbox.com"},{"name":"mapbox-npm-07","email":"accounts+npmjs-07@mapbox.com"},{"name":"mapbox-npm-03","email":"accounts+npmjs-03@mapbox.com"},{"name":"mapbox-npm-04","email":"accounts+npmjs-04@mapbox.com"},{"name":"mapbox-npm-09","email":"accounts+npmjs-09@mapbox.com"},{"name":"mapbox-npm-05","email":"accounts+npmjs-05@mapbox.com"},{"name":"mapbox-npm-06","email":"accounts+npmjs-06@mapbox.com"},{"name":"mapbox-npm-08","email":"accounts+npmjs-08@mapbox.com"},{"name":"mapbox-npm-advanced-actions","email":"accounts+npmjs-advanced-actions@mapbox.com"},{"name":"mapbox-npm-ci","email":"accounts+npmjs-npm-ci@mapbox.com"},{"name":"mapbox-npm","email":"accounts+npmjs@mapbox.com"},{"name":"mapbox-admin","email":"accounts@mapbox.com"},{"name":"mapbox-machine-user","email":"accounts+npm-mapbox-machine-user@mapbox.com"},{"name":"mbx-npm-ci-staging","email":"yannick.meeus+npm+staging+ci@mapbox.com"},{"name":"mbx-npm-ci-production","email":"yannick.meeus+npm+production+ci@mapbox.com"},{"name":"mbx-npm-01-production","email":"yannick.meeus+npm+prod+01@mapbox.com"},{"name":"mbx-npm-02-production","email":"yannick.meeus+npm+prod+02@mapbox.com"},{"name":"mbx-npm-03-production","email":"yannick.meeus+npm+prod+03@mapbox.com"},{"name":"mbx-npm-04-production","email":"yannick.meeus+npm+prod+04@mapbox.com"},{"name":"mbx-npm-05-production","email":"yannick.meeus+npm+prod+05@mapbox.com"},{"name":"mbx-npm-06-production","email":"yannick.meeus+npm+prod+06@mapbox.com"},{"name":"mbx-npm-07-production","email":"yannick.meeus+npm+prod+07@mapbox.com"},{"name":"mbx-npm-08-production","email":"yannick.meeus+npm+prod+08@mapbox.com"},{"name":"mbx-npm-09-production","email":"yannick.meeus+npm+prod+09@mapbox.com"},{"name":"mbx-npm-02-staging","email":"yannick.meeus@mapbox.com"},{"name":"mbx-npm-advanced-actions-staging","email":"yannick.meeus+npm+staging+advanced+actions@mapbox.com"},{"name":"mbx-npm-advanced-actions-production","email":"yannick.meeus+npm+prod+advanced+actions@mapbox.com"}],"readme":"## concaveman\n\nA very fast **2D concave hull** algorithm in JavaScript (generates a general outline of a point set).\n\n[![Build Status](https://travis-ci.org/mapbox/concaveman.svg?branch=master)](https://travis-ci.org/mapbox/concaveman)\n[![Coverage Status](https://coveralls.io/repos/github/mapbox/concaveman/badge.svg?branch=master)](https://coveralls.io/github/mapbox/concaveman?branch=master)\n[![](https://img.shields.io/badge/simply-awesome-brightgreen.svg)](https://github.com/mourner/projects)\n\n<img width=\"570\" alt=\"sample concave hull\" src=\"https://cloud.githubusercontent.com/assets/25395/12975726/ada2ad10-d0c6-11e5-96c8-6e42c995e0e2.png\">\n\n### Usage\n\n```js\nimport concaveman from 'concaveman';\n\nconst points = [[10, 20], [30, 12.5], ...];\nconst polygon = concaveman(points);\n```\n\nSignature: `concaveman(points[, concavity = 2, lengthThreshold = 0])`\n\n- `points` is an array of `[x, y]` points.\n- `concavity` is a relative measure of concavity. `1` results in a relatively detailed shape, `Infinity` results in a convex hull.\nYou can use values lower than `1`, but they can produce pretty crazy shapes.\n- `lengthThreshold`: when a segment length is under this threshold, it stops being considered for further detalization.\nHigher values result in simpler shapes.\n\n### Algorithm\n\nThe algorithm is based on ideas from the paper [A New Concave Hull Algorithm and Concaveness Measure\nfor n-dimensional Datasets, 2012](https://jise.iis.sinica.edu.tw/JISESearch/fullText?pId=245&code=5A9B97538372AA1)\nby Jin-Seo Park and Se-Jong Oh.\n\nThis implementation dramatically improves performance over the one stated in the paper\n(`O(rn)`, where `r` is a number of output points, to `O(n log n)`)\nby introducing a fast _k nearest points to a segment_ algorithm,\na modification of a depth-first kNN R-tree search using a priority queue.\n\n### TypeScript\n\n[TypeScript type definitions](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/concaveman)\nare available through `npm install --save @types/concaveman`.\n\n### Dependencies\n\n- [rbush](https://github.com/mourner/rbush) for point indexing\n- [tinyqueue](https://github.com/mourner/tinyqueue) as a priority queue\n- [point-in-polygon](https://github.com/substack/point-in-polygon) for point in polygon queries\n- [robust-predicates](https://github.com/mourner/robust-predicates) for 3-point orientation tests\n\n### C++ Port\n\nIn 2019, a [C++ port](https://github.com/sadaszewski/concaveman-cpp) has been created, allowing for efficient usage from C/C++, Python (via cffi) and other languages featuring an FFI and/or plug-in mechanism for C (e.g. a MATLAB MEX file should be easy to prepare).\n","readmeFilename":"README.md","users":{"bradleybossard":true}}