格拉斯普克算法原理
- 对曲线的首末点虚连一条直线,求曲线上所有点与直线的距离,并找出最大距离值dmax,用dmax与事先给定的阈值D相比
- 若dmax<D,则将这条曲线上的中间点全部舍去;则该直线段作为曲线的近似,该段曲线处理完毕。
- 若dmax≥D,保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法,即重复1,2步,直到所有dmax均<D,即完成对曲线的抽稀
java代码
/**
* 计算两点距离
*
* @param point1
* @param point2
* @return
*/
private static double calculationDistance(double[] point1, double[] point2) {
double lat1 = point1[0];
double lat2 = point2[0];
double lng1 = point1[1];
double lng2 = point2[1];
double radLat1 = lat1 * Math.PI / 180.0;
double radLat2 = lat2 * Math.PI / 180.0;
double a = radLat1 - radLat2;
double b = (lng1 * Math.PI / 180.0) - (lng2 * Math.PI / 180.0);
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