LBS——地理围栏(JS)

本文深入探讨了围栏计算算法,详细介绍了如何判断一个点是否位于由一系列经纬度点构成的多边形内部,这对于地理信息系统和定位服务具有重要意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 围栏计算
 */
var GPS_EleFence = {
    IsPtInPoly: function (ALon, ALat, APoints) {
        var iSum = 0,
            iCount;
        var dLon1, dLon2, dLat1, dLat2, dLon;
        if (APoints.length < 3) return false;
        iCount = APoints.length;
        for (var i = 0; i < iCount; i++) {
            if (i == iCount) {
                dLon1 = APoints[i].lng;
                dLat1 = APoints[i].lat;
                dLon2 = APoints[0].lng;
                dLat2 = APoints[0].lat;
            } else {
                dLon1 = APoints[i].lng;
                dLat1 = APoints[i].lat;
                dLon2 = APoints[i + 1].lng;
                dLat2 = APoints[i + 1].lat;
            }
            //以下语句判断A点是否在边的两端点的水平平行线之间,在则可能有交点,开始判断交点是否在左射线上
            if (((ALat >= dLat1) && (ALat < dLat2)) || ((ALat >= dLat2) && (ALat < dLat1))) {
                if (Math.abs(dLat1 - dLat2) > 0) {
                    //得到 A点向左射线与边的交点的x坐标:
                    dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - ALat)) / (dLat1 - dLat2);
                    if (dLon < ALon)
                        iSum++;
                }
            }
        }
        if (iSum % 2 != 0)
            return true;
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值