package com.wm.weather.backend.utils;
import javax.swing.*;
DecimalFormat;
import java.util.ArrayList;
import java.util.List;public class Douglas extends JFrame {/*** 存储采样点数据链表*/
public static List<ModelDTO > points = new ArrayList<ModelDTO >();
/*** 控制数据经度压缩的极差*/
private static final double D = 0.0001;/*** 对矢量曲线进行压缩** @param from 曲线的起始点* @param to 曲线的终止点*/
public static void compress(ModelDTO from, ModelDTO to) {/*** 压缩算法的开关*/boolean switchvalue = false;/*** 由起始点和终止点构成直线方程一般式的系数*/double fromLat = Double.Blat());double fromLng = Double.Blng());double toLat = Double.Blat());double toLng = Double.Blng());double A = (fromLat - toLat)/ Math.sqrt(Math.pow((fromLat - toLat), 2)+ Math.pow((fromLng - toLng), 2));/*** 由起始点和终止点构成直线方程一般式的系数*/double B = (toLng - fromLng)/ Math.sqrt(Math.pow((fromLat - toLat), 2)+ Math.pow((fromLng - toLng), 2));/*** 由起始点和终止点构成直线方程一般式的系数*/double C = (fromLng * toLat - toLng * fromLat)/ Math.sqrt(Math.pow((fromLat - toLat), 2)+ Math.pow((fromLng - toLng), 2));double d = 0;double dmax = 0;int m = points.indexOf(from);int n = points.indexOf(to);if (n == m + 1)return;SurveyMonitorDTO middle = null;List<Double> distance = new ArrayList<>();for (int i = m + 1; i < n; i++) {double blng = Double.(i).getBlng());double blat = Double.(i).getBlat());d = Math.abs(A * (blng) + B * (blat) + C) / Math.sqrt(Math.pow(A, 2) + Math.pow(B, 2));distance.add(d);}dmax = (0);for (int j = 1; j < distance.size(); j++) {if ((j) > dmax)dmax = (j);}if (dmax > D)switchvalue = true;elseswitchvalue = false;if (!switchvalue) {//删除Points(m,n)内的坐标for (int i = m + 1; i < n; i++) {(i).setIndex(-1);}} else {for (int i = m + 1; i < n; i++) {double blng = Double.(i).getBlng());double blat = Double.(i).getBlat());if ((Math.abs(A * (blng) + B* (blat) + C)/ Math.sqrt(Math.pow(A, 2) + Math.pow(B, 2)) == dmax))middle = (i);}compress(from, middle);compress(middle, to);}
}public static List<ModelDTO > douglasData(List<ModelDTO > source) {points = source;System.out.println("压缩前:");for (int i = 0; i < points.size(); i++) {ModelDTO p = (i);System.out.print("[" + p.getBlng() + "," + p.getBlat() + "],");}(0), (points.size() - 1));System.out.println("n压缩后:");List<ModelDTO > list = new ArrayList<>();for (int i = 0; i < points.size(); i++) {ModelDTO p = (i);if (p.getIndex() > -1) {list.add(p);System.out.print("[" + p.getBlng() + "," + p.getBlat() + "],");}}return list;
}
}@Data
class ModelDTO implements Serializable {@ApiModelProperty(value = "纬度", example = "23")
private String blat;@ApiModelProperty(value = "经度", example = "106")
private String blng;}
本文发布于:2024-01-30 05:08:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170656249819443.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |