Given a list of geocoded locations with an unknown error-value and a database of less noisy public corrections nearer the true location (most of which are reliable), how should I design an algorithm to take all the corrections into account to approximate the true location most accurately?
Both the stationary coordinates and the sensor readings are noisy, so it is similar to a geographic check-in problem. It reminds me of a known problem with multiple noisy sensors, where you model the noise and calculate the most probable value, but I don't recall the solution.
All coordinates are stored as the geography::POINT
type in SQL Server 2008, so an efficient solution for that platform would be most useful.
Clarification: Coordinates are not temporal. Each reading comes from a unique sensor with no repeat measurements.
Sensor noise is random variations of sensor output unrelated to variations in sensor input. Ideally, the only noise coming from a sensor is thermal noise arising from thermal motions of charges within the sensor. Another low-level source of noise is shot noise related to the fact that charge is quantized.
Alhtough I am not sure how to implement that in SQL Server 2008 a good algorithm could be http://en.wikipedia.org/wiki/Kalman_filter (see http://www.developerstation.org/2011/09/kalman-filter-for-dummies-tutorials.html).
For an implementation it could be helpful to use the spatial index from SQL Server - see for example http://blogs.msdn.com/b/isaac/archive/2007/05/16/sql-server-spatial-support-an-introduction.aspx
Another interesting resource regargind spatial support in SQL Server is http://www.jasonfollas.com/blog/archive/2008/03/14/sql-server-2008-spatial-data-part-1.aspx
Although in C some application of a kalman filter see http://interactive-matter.eu/2009/12/filtering-sensor-data-with-a-kalman-filter/
EDIT - as per comment:
Depending on the requirements it could make more sense to use a modified version of Kalman filtering which not only takes white noise into account but also considers time-correlated errors - see for example http://hss.ulb.uni-bonn.de/2011/2605/2605.pdf
EDIT 2 - after the Clarification from OP:
In your scenario there is nothing to somehow "guess" an error except the less noisy public location... you could use any noise aware statistical algorithm... you could even select the 3 or 5 nearest coordinates (see the link regarding spatial support) and correct your measurement for example similar to a magnetic wand... another option would be to apply an error-correction by weighting the differences similar to triangulation etc.
EDIT 3 - after comment from OP:
One such algorithm is the Minimum-Weight-Triangulation of point sets... see http://en.wikipedia.org/wiki/Minimum-weight_triangulation and http://code.google.com/p/minimum-weight-triangulator/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With