经纬度(坐标)相关的小工具(JAVA)
经纬度相关的小工具
计算坐标点是否在指定区域内
先导入计算依赖包
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.13</version>
</dependency>
/**
* 坐标是否在指定区域内
* @param doubles 区域内的坐标集合
* @param x 坐标的经度
* @param y 坐标的纬度
* @return 是否包含在区域内
*/
public static boolean polygonJudgment(List<Double[]> doubles, double x, double y){
List<Coordinate> coordinates = new ArrayList<>();
for (Double[] aDouble : doubles) {
Coordinate coord = new Coordinate(aDouble[0],aDouble[1]);
coordinates.add(coord);
}
Coordinate coord = new Coordinate(doubles.get(0)[0],doubles.get(0)[1]);
coordinates.add(coord);
GeometryFactory geometryFactory = new GeometryFactory();
Coordinate[] array = coordinates.toArray(new Coordinate[1]);
Polygon polygon = geometryFactory.createPolygon(array);
Point point = geometryFactory.createPoint(new Coordinate(x,y));
return polygon.contains(point);
}
/**
* 坐标是否在指定区域内
* @param doubles 区域内的坐标集合
* @param x 坐标的经度
* @param y 坐标的纬度
* @return 是否包含在区域内
*/
public static boolean polygonJudgmentStr(List<String[]> doubles, double x, double y){
List<Coordinate> coordinates = new ArrayList<>();
for (String[] aDouble : doubles) {
System.out.println(aDouble[0]);
System.out.println(aDouble[1]);
Coordinate coord = new Coordinate(Double.valueOf(aDouble[0]),Double.valueOf(aDouble[1]));
coordinates.add(coord);
}
Coordinate coord = new Coordinate(Double.valueOf(doubles.get(0)[0]),Double.valueOf(doubles.get(0)[1]));
coordinates.add(coord);
GeometryFactory geometryFactory = new GeometryFactory();
Coordinate[] array = coordinates.toArray(new Coordinate[1]);
Polygon polygon = geometryFactory.createPolygon(array);
Point point = geometryFactory.createPoint(new Coordinate(x,y));
return polygon.contains(point);
}
/**
* 坐标是否在指定区域内
* @param doubles 区域内的坐标集合
* @param x 坐标的经度
* @param y 坐标的纬度
* @return 是否包含在区域内
*/
public static boolean polygonJudgment(List<Double[]> doubles, String x, String y){
Double x1 = new Double(x);
Double y1 = new Double(y);
return polygonJudgment(doubles,x1,y1);
}
/**
* 坐标是否在指定区域内
* @param doubles 区域内的坐标集合
* @param x 坐标的经度
* @param y 坐标的纬度
* @return 是否包含在区域内
*/
public static boolean polygonJudgmentStr(List<String[]> doubles, String x, String y){
Double x1 = new Double(x);
Double y1 = new Double(y);
return polygonJudgmentStr(doubles,x1,y1);
}
计算两点间的距离
/**赤道半径**/
private static final double EARTH_RADIUS = 6378137;
/**
* 转化为弧度(rad)
*/
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 计算两点的距离
* @param lng1 经度1
* @param lat1 纬度1
* @param lng2 经度2
* @param lat2 纬度2
* @return 返回距离(单位m)
*/
public static double calculationDistance(Double lng1, Double lat1, Double lng2, Double lat2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(Math.sqrt(
Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
return s;
}
/**
* 计算两点的距离
* @param lng1 经度1
* @param lat1 纬度1
* @param lng2 经度2
* @param lat2 纬度2
* @return 返回距离(单位m)
*/
public static double calculationDistance(String lng1, String lat1, Double lng2, Double lat2) {
return calculationDistance(new Double(lng1),new Double(lat1),lng2,lat2);
}
/**
* 计算两点的距离
* @param lng1 经度1
* @param lat1 纬度1
* @param lng2 经度2
* @param lat2 纬度2
* @return 返回距离(单位m)
*/
public static double calculationDistance(Double lng1, Double lat1, String lng2, String lat2) {
return calculationDistance(lng1,lat1,new Double(lng2),new Double(lat2));
}
/**
* 计算两点的距离
* @param lng1 经度1
* @param lat1 纬度1
* @param lng2 经度2
* @param lat2 纬度2
* @return 返回距离(单位m)
*/
public static double calculationDistance(String lng1, String lat1, String lng2, String lat2) {
return calculationDistance(new Double(lng1),new Double(lat1),new Double(lng2),new Double(lat2));
}