1. 程式人生 > >判斷經緯度點座標是否在經緯度點所組成的面內

判斷經緯度點座標是否在經緯度點所組成的面內

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說明此點在此面中,已測試,可以放心使用。