-
@param end 结束经纬度
-
@param center 前两个点之间的中心点
-
@return 中心点到 start和end所在直线的距离
*/
private double distToSegment(LatLngPoint start, LatLngPoint end, LatLngPoint center) {
double a = Math.abs(AMapUtils.calculateLineDistance(start.latLng, end.latLng));
double b = Math.abs(AMapUtils.calculateLineDistance(start.latLng, center.latLng));
double c = Math.abs(AMapUtils.calculateLineDistance(end.latLng, center.latLng));
double p = (a + b + c) / 2.0;
double s = Math.sqrt(Math.abs(p * (p - a) * (p - b) * (p - c)));
double d = s * 2.0 / a;
return d;
}
Douglas工具类具体代码
public Douglas(ArrayList mLineInit, double dmax) {
if (mLineInit == null) {
throw new IllegalArgumentException(“传入的经纬度坐标list == null”);
}
this.dMax = dmax;
this.start = 0;
this.end = mLineInit.size() - 1;
for (int i = 0; i < mLineInit.size(); i++) {
this.mLineInit.add(new LatLngPoint(i, mLineInit.get(i)));
}
}
/**
-
压缩经纬度点
-
@return
*/
public ArrayList compress() {
int size = mLineInit.size();
ArrayList latLngPoints = compressLine(mLineInit.toArray(new LatLngPoint[size]), mLineFilter, start, end, dMax);
latLngPoints.add(mLineInit.get(0));
latLngPoints.add(mLineInit.get(size-1));
//对抽稀之后的点进行排序
Collections.sort(latLngPoints, new Comparator() {
@Overrid