首页 > 其他 > 详细

检查多边形是否包含了某点(经纬度)

时间:2015-08-13 12:33:03      阅读:159      评论:0      收藏:0      [点我收藏+]


/**
 * 检查多边形是否包含了某点~多边形都是由点组成
 * @param px 纬度
 * @param py 经度
 * @param xD 多边形所有纬度
 * @param yD 多边形所有经度
 * @return
 */
public boolean containsPoint(double px, double py,ArrayList<Double> xD,ArrayList<Double> yD) {
    int verticesCount = xD.size();
    int nCross = 0;
    for (int i = 0; i < verticesCount; ++ i) {
        double ix =  xD.get(i);
        double iy =  yD.get(i);
        double i1x =  xD.get((i + 1) % verticesCount);
        double i1y =  yD.get((i + 1) % verticesCount);

        // 求解 y=p.y 与 p1 p2 的交点
        if ( iy == i1y ) {   // p1p2 与 y=p0.y平行
            continue;
        }
        if ( py < Math.min(iy, i1y) ) { // 交点在p1p2延长线上
            continue;
        }
        if ( py >= Math.max(iy, i1y) ) { // 交点在p1p2延长线上
            continue;
        }
        // 求交点的 X 坐标
        float x = (float) ((py - iy) * (i1x - ix)
                / (i1y - iy) + ix);
        if ( x > px ) { // 只统计单边交点
            nCross++;
        }
    }
    // 单边交点为偶数,点在多边形之外
    return (nCross%2==1);
}


检查多边形是否包含了某点(经纬度)

原文:http://my.oschina.net/jgy/blog/491740

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!