经纬度(坐标)相关的小工具(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));
	}
posted @ 2022-11-29 18:00  rr完美'诺言  阅读(148)  评论(0编辑  收藏  举报  来源