buildFindPointInKpPolygons.mjs

import findPointInKpPolygons from './findPointInKpPolygons.mjs'


/**
 * 判斷點陣列[x,y]或點物件{x,y}是否位於某一多邊形內之字典物件,若有則回傳該多邊形之鍵名,若無則回傳def值
 *
 * Unit Test: {@link https://github.com/yuda-lyu/w-gis/blob/master/test/buildFindPointInKpPolygons.test.mjs Github}
 * @memberOf w-gis
 * @returns {Object} 回傳函數物件,包含init、isInit、getPoint函數。init為初始化,輸入kpPgs,無輸出,isInit為回傳是否初始化布林值,無輸入。getPoint為查詢點位於哪個多邊形並回傳該鍵名,輸入p與opt,功能詳見findPointInKpPolygons。
 * @example
 *
 * let kpPgs = {
 *     'pgs1': [
 *         [0, 0],
 *         [0, 1],
 *         [1, 1],
 *         [1, 0],
 *         [0, 0],
 *     ],
 *     'pgs2': [
 *         [1, 1],
 *         [1, 2],
 *         [2, 2],
 *         [2, 1],
 *         [1, 1],
 *     ],
 * }
 * let p
 * let r
 *
 * let BD = buildFindPointInKpPolygons
 * let bd = new BD()
 * await bd.init(kpPgs)
 *
 * p = [0.5, 0.5]
 * r = await bd.getPoint(p)
 * console.log(r)
 * // => 'pgs1'
 *
 * p = [1.5, 1.5]
 * r = await bd.getPoint(p)
 * console.log(r)
 * // => 'pgs2'
 *
 * p = [1.5, 0.5]
 * r = await bd.getPoint(p)
 * console.log(r)
 * // => 'unknow'
 *
 * p = [1.5, 0.5]
 * r = await bd.getPoint(p, { def: '未知' })
 * console.log(r)
 * // => '未知'
 *
 */
function Build() {
    let bInit = false
    let kp = null

    async function init(kpPgs, opt = {}) {

        //save
        kp = kpPgs

        //bInit
        bInit = true

    }

    function isInit() {
        return bInit
    }

    async function getPoint(p, opt = {}) {

        //check
        if (!bInit) {
            throw new Error('no init')
        }

        //findPointInKpPolygons
        let value = findPointInKpPolygons(p, kp, opt)

        return value
    }

    return {
        init,
        isInit,
        getPoint,
    }
}


export default Build