判断经纬度点坐标是否在经纬度点所组成的面内

maven的pom配置

<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
</dependency>

 jts包,大概的思想就是经纬度组成一个封闭几何图形,然后看坐标点是否落在于此图形中,可以用于解决诸如点面选择这类问题上。

代码

/**
 * @auther: qiwenshuai
 * @param: [xys, lng, lat]
 *          xys:经纬度点组成的封闭图形,格式为经度,纬度,经度,纬度
 *          lng:经度;
 *          lat:纬度
 * @return: java.lang.Boolean
 * @description: 电子围栏多边形判断经纬度点是否在多边形内
 * @requestJson:
 * @createTime: 18-10-10 下午2:37
 * @editTime:
 */
private static Boolean polygonJudgment(String xys, Double lng, Double lat) {
    String[] strings = xys.split(",");
    Coordinate[] coordinates = new Coordinate[strings.length / 2];
    try {
        for (int i = 0; i < strings.length; i += 2) {
            coordinates[i / 2] = new Coordinate(Double.parseDouble(strings[i]), Double.parseDouble(strings[i + 1]));
        }
        GeometryFactory factory = new GeometryFactory();
        if (coordinates.length > 3) {
            LinearRing shell = factory.createLinearRing(coordinates);
            Polygon polygon = factory.createPolygon(shell, null);
            if (polygon.contains(factory.createPoint(new Coordinate(lng, lat)))) {
                return true;
            }
        }
    } catch (Exception ignored) {
        return false;
    }
    return false;
}

 返回true说明此点在此面中,已测试,可以放心使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值