There is no way to improve the precision of your GPS within your app, but you can improve the accuracy of the results.
First of all, try playing with the distanceFilter of your CLLocationManger.
/*
* distanceFilter
*
* Discussion:
* Specifies the minimum update distance in meters. Client will not be notified of movements of less
* than the stated value, unless the accuracy has improved. Pass in kCLDistanceFilterNone to be
* notified of all movements. By default, kCLDistanceFilterNone is used.
*/
@property(assign, nonatomic) CLLocationDistance distanceFilter;
Also your desired accuracy
/*
* desiredAccuracy
*
* Discussion:
* The desired location accuracy. The location service will try its best to achieve
* your desired accuracy. However, it is not guaranteed. To optimize
* power performance, be sure to specify an appropriate accuracy for your usage scenario (eg,
* use a large accuracy value when only a coarse location is needed). Use kCLLocationAccuracyBest to
* achieve the best possible accuracy. Use kCLLocationAccuracyBestForNavigation for navigation.
* By default, kCLLocationAccuracyBest is used.
*/
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
And last, you should be playing with the accuracy of the location updates retrieved. Discarding an invalid amount of location updates based on their accuracy is a good way to get rid of those not-so-valid locations. But also be aware that it will take some time to get a real nice gps accuracy signal.