How are ADS-B surface position frames decoded?
The Compact Position Report (CPR) coding in Surface squiters is different from Airborne CPR coding. The resolution is 4 times better (~1.25 m instead of ~ 5 m), at the cost of losing the 2 most significant bits. 

Due to this, global surface position decoding gives an ambiguous solution. IIRC the solution can be at 4 points on the globe, you have to select the nearest to you. And you should validate that it is within a realistic range, like you should do with Airborne CPR decoding. After you validated the position using global decoding on a couple of odd- even squiter pairs you can use the more efficient local decoding. Of course, as with Airborne CPR decoding, you need to protect against position jumps and time gaps in your decoding algorithm.