आप बाद के बिंदुओं के बीच ढलान की गणना के आधार पर एक बहुत ही बुनियादी सरलीकरण करके अनावश्यक बिंदुओं को हटा सकते हैं।
यहाँ का एक सा है, लेकिन पूरा नहीं सी ++ कोड संभावित एल्गोरिदम पेश:
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.
मुझे आशा है कि यह मदद करता है।
एक एकल स्थान रिकॉर्ड 4 फ्लोट्स या 16 बाइट्स है। दो घंटे के लिए हर दो सेकंड 115kb है। किस तरह का मंच यह महत्वपूर्ण है? यहां तक कि एक मोबाइल फोन के लिए यह कुछ भी नहीं है। –
@ पावेल: इस पर निर्भर करता है कि कितने उपग्रह उपयोग किए जाते हैं (12 तक)।एनएमईए $ जीपीजीएसए वाक्य 12 उपग्रहों तक, साथ ही अन्य सभी सहायक डेटा –
मेरी समस्या भंडारण के साथ नहीं है, लेकिन प्रदर्शन के साथ। यदि मैं किसी वेबसाइट पर (Google मानचित्र के माध्यम से) मार्ग प्रदर्शित करना चाहता हूं तो मैं 1000 डेटा पॉइंट प्रदर्शित नहीं करना चाहता हूं। –