fixClosePolygon.mjs

import map from 'lodash-es/map.js'
import size from 'lodash-es/size.js'
import isEqual from 'lodash-es/isEqual.js'
import isearr from 'wsemi/src/isearr.mjs'
import toPolygon from './toPolygon.mjs'


/**
 * 修復Polygon內各RingString為閉合
 *
 * Unit Test: {@link https://github.com/yuda-lyu/w-gis/blob/master/test/fixClosePolygon.test.mjs Github}
 * @memberOf w-gis
 * @param {Array} pgs 輸入Polygon資料陣列,為[[ [[x11,y11],[x12,y12],...], [[x21,y21],[x22,y22],...] ]]構成之陣列
 * @param {Object} [opt={}] 輸入設定物件,預設{}
 * @returns {Array} 回傳Polygon陣列
 * @example

 */
function fixClosePolygon(pgs, opt = {}) {

    //check pgs
    if (!isearr(pgs)) {
        throw new Error(`no pgs`)
    }

    //toPolygon
    pgs = toPolygon(pgs)

    //修復成為閉合
    pgs = map(pgs, (rs) => {
        let i0 = 0
        let i1 = size(rs) - 1
        let rs0 = rs[i0]
        let rs1 = rs[i1]
        if (!isEqual(rs0, rs1)) {
            rs.push(rs0)
        }
        return rs
    })

    return pgs
}


export default fixClosePolygon