Bạn có thể xóa điểm thừa bằng cách thực hiện đơn giản hóa rất cơ bản dựa trên tính toán độ dốc giữa các điểm tiếp theo.
Đây là một chút nhưng không hoàn thành C++ trình bày tốt thuật toán:
struct Point
{
double x;
double y;
};
double calculate_slope(Point const& p1, Point const& p2)
{
// dy y2 - y1
// m = ---- = ---------
// dx x2 - x1
return ((p2.y - p1.y)/(p2.x - p1.x));
}
// 1. Read first two points from GPS stream source
Point p0 = ... ;
Point p1 = ... ;
// 2. Accept p0 as it's first point
// 3. Calculate slope
double m0 = calculate_slope(p0, p1);
// 4. next point is now previous
p0 = p1;
// 5. Read another point
p1 = ... ;
double m1 = calculate_slope(p0, p1);
// 6. Eliminate Compare slopes
double const tolerance = 0.1; // choose your tolerance
double const diff = m0 - m1;
bool if (!((diff <= tolerance) && (diff >= -tolerance)))
{
// 7. Accept p0 and eliminate p1
m0 = m1;
}
// Repeat steps from 4 to 7 for the rest of points.
Tôi hy vọng nó giúp.
Một bản ghi vị trí duy nhất là 4 nổi hoặc 16 byte. Cứ hai giây trong hai giờ là 115kb. Loại nền tảng nào quan trọng này? Ngay cả đối với điện thoại di động cũng không có gì. –
@Pavel: Tùy thuộc vào số lượng vệ tinh được sử dụng (tối đa 12).NMEA $ GPGSA câu cho phép lên đến 12 vệ tinh, cộng với tất cả các dữ liệu phụ trợ khác –
Vấn đề của tôi không phải là với lưu trữ, nhưng với màn hình hiển thị. Nếu tôi muốn hiển thị tuyến đường trên một trang web (thông qua bản đồ google) thì tôi không muốn hiển thị 1000 điểm dữ liệu. –