同一数据,优化前后效果对比:
优化算法:
public List<RoutePoint> optimizePoints(List<RoutePoint> inPoint) {
int size = inPoint.size();
List<RoutePoint> outPoint;
int i;
if (size < 5) {
return inPoint;
} else {
// Latitude
inPoint.get(0)
.setLat((3.0 * inPoint.get(0).getLat() + 2.0
* inPoint.get(1).getLat() + inPoint.get(2).getLat() - inPoint
.get(4).getLat()) / 5.0);
inPoint.get(1)
.setLat((4.0 * inPoint.get(0).getLat() + 3.0
* inPoint.get(1).getLat() + 2
* inPoint.get(2).getLat() + inPoint.get(3).getLat()) / 10.0);
inPoint.get(size - 2).setLat(
(4.0 * inPoint.get(size - 1).getLat() + 3.0
* inPoint.get(size - 2).getLat() + 2
* inPoint.get(size - 3).getLat() + inPoint.get(
size - 4).getLat()) / 10.0);
inPoint.get(size - 1).setLat(
(3.0 * inPoint.get(size - 1).getLat() + 2.0
* inPoint.get(size - 2).getLat()
+ inPoint.get(size - 3).getLat() - inPoint.get(
size - 5).getLat()) / 5.0);
// Longitude
inPoint.get(0)
.setLng((3.0 * inPoint.get(0).getLng() + 2.0
* inPoint.get(1).getLng() + inPoint.get(2).getLng() - inPoint
.get(4).getLng()) / 5.0);
inPoint.get(1)
.setLng((4.0 * inPoint.get(0).getLng() + 3.0
* inPoint.get(1).getLng() + 2
* inPoint.get(2).getLng() + inPoint.get(3).getLng()) / 10.0);
inPoint.get(size - 2).setLng(
(4.0 * inPoint.get(size - 1).getLng() + 3.0
* inPoint.get(size - 2).getLng() + 2
* inPoint.get(size - 3).getLng() + inPoint.get(
size - 4).getLng()) / 10.0);
inPoint.get(size - 1).setLng(
(3.0 * inPoint.get(size - 1).getLng() + 2.0
* inPoint.get(size - 2).getLng()
+ inPoint.get(size - 3).getLng() - inPoint.get(
size - 5).getLng()) / 5.0);
}
return inPoint;
}
原文地址:http://blog.csdn.net/zhoumushui/article/details/44810427