toPolygon.mjs

import flatten from 'lodash-es/flatten.js'
import getPointDepth from './getPointDepth.mjs'


/**
 * 轉換RingString、polygon、MultiPolygon成為Polygon
 *
 * Unit Test: {@link https://github.com/yuda-lyu/w-gis/blob/master/test/toPolygon.test.mjs Github}
 * @memberOf w-gis
 * @param {Array} v 輸入資料陣列
 * @returns {Array} 回傳資料陣列
 * @example
 *
 * let rs
 * let r
 *
 * rs = [ //ringString
 *     [0, 0],
 *     [100, 0],
 *     [100, 1],
 *     [0, 1],
 *     [0, 0], //閉合
 * ]
 * r = toPolygon(rs)
 * console.log(JSON.stringify(r))
 * // => [[[0,0],[100,0],[100,1],[0,1],[0,0]]]
 *
 * rs = [ //ringString
 *     [0, 0],
 *     [100, 0],
 *     [100, 1],
 *     [0, 1],
 * ]
 * r = toPolygon(rs)
 * console.log(JSON.stringify(r))
 * // => [[[0,0],[100,0],[100,1],[0,1]]]
 *
 * rs = [ //polygon
 *     [
 *         [0, 0],
 *         [100, 0],
 *         [100, 1],
 *         [0, 1],
 *     ]
 * ]
 * r = toPolygon(rs)
 * console.log(JSON.stringify(r))
 * // => [[[0,0],[100,0],[100,1],[0,1]]]
 *
 * rs = [ //polygon
 *     [
 *         [0, 0],
 *         [10, 0],
 *         [10, 1],
 *         [0, 1],
 *     ]
 * ]
 * r = toPolygon(rs)
 * console.log(JSON.stringify(r))
 * // => [[[0,0],[10,0],[10,1],[0,1]]]
 *
 * rs = [ //polygon
 *     [
 *         [0, 0],
 *         [100, 0],
 *         [100, 1],
 *         [0, 1],
 *     ],
 *     [
 *         [0, 0],
 *         [10, 0],
 *         [10, 1],
 *         [0, 1],
 *     ]
 * ]
 * r = toPolygon(rs)
 * console.log(JSON.stringify(r))
 * // => [[[0,0],[100,0],[100,1],[0,1]],[[0,0],[10,0],[10,1],[0,1]]]
 *
 * rs = [ //multiPolygon
 *     [
 *         [
 *             [0, 0],
 *             [100, 0],
 *             [100, 1],
 *             [0, 1],
 *         ],
 *         [
 *             [0, 0],
 *             [10, 0],
 *             [10, 1],
 *             [0, 1],
 *         ]
 *     ]
 * ]
 * r = toPolygon(rs)
 * console.log(JSON.stringify(r))
 * // => [[[0,0],[100,0],[100,1],[0,1]],[[0,0],[10,0],[10,1],[0,1]]]
 *
 */
function toPolygon(v) {
    let d = getPointDepth(v)
    if (d === 3) {
        return flatten(v)
    }
    else if (d === 2) {
        return v
    }
    else if (d === 1) {
        return [v]
    }
    else if (d === 0) {
        return []
    }
    return v
}


export default toPolygon