tags:

views:

455

answers:

3

Hello everybody, I have been programming an app using the mapkit and the SDK 3.0. Everything works allright except for one detail. I have noticed that when displaying the userlocation I get different user positions on the map dependent of the current network. I have read about this problem and understand that it is common? In my WLAN is the user position correctly displayed. When using the 3G net (T-mobile) the position is some 100 meters away from my actual position. I understand this has to do with the celluar phone net using triangulation and in WLAN is the GPS or WiFi hotspot used. So, to my question. Is there a way to go around this? My app shows positions in a town and also the distance to those positions. It is very obvious and also missleading if the position is false because of the short distances. Is there a way (in code) to set which method to be used for getting the user postion? I have tested all other apps on my iPhone using maps and the problem seem to be the same by all of them. (If someone wants to test my app it is in the app store for free under car2go also other comments are of course interesting) Thanks in advance! -loop-

A: 

Use an alternate source for your location? Portable GPS units would do the trick.

The real question is how can you correct the data being specified by the 3G triangulation. I wonder if you can do a differential to correct for the 3G's location errors.

1) In a given city, calibrate the 3G location errors by plotting the city. This could be corrected by the 3G networks at any time, so you'd have to have a way to verify and re-calibrate.

2) Calibrate the 3G network's location using a known location - a 3G location along with a GPS location. Take that as a differential that can be applied to other 3G locations. This assumes a consistent offset in the triangulation calculation which probably isn't the reality.

3) Wait for the 3G networks to fix it and do nothing in the meantime.

4) Provide the 3G network provider with error information in their triangulation and see if it is a priority for them.

I can't think of any other viable options...

Kieveli
Thank you for the quick answer! Well, it seems as the idea with to inform the provider is a good choice here. I have thought about to calculate some kind of offset to correct the data but it is not a very robust solution I think. And I do not know if there is a way to discover what net my iPhone uses? Is it? Like if (I am on the T-mobile net) add some contant to the coordinateselse read the coordinates as they are...-loop-
loop
A: 

Perhaps you can use CoreLocation directly. CLLocationManager gives you CLLocation objects than include their accuracy. If you get an accuracy below 50 meters, it the location probably came from GPS.

Will Harris
OK, how can I insert the user position on the map without using the location manager? That seems as an interesting solution you present there!
loop
I have used this code to set the distance:clm.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; where clm is the instance of location manager
loop
You won't necessarily get locations of the desired accuracy. I'm suggesting that you check the horizontalAccuracy you do get and warn the user if it is too large.
Will Harris
My problem is, that it almost always is to large. It is an application to be used on the go where the user is in the mobile net. Your idea is good and I will perhabs try that out, but it would be interesting to ge the value correct...
loop
+1  A: 

Core Location provides information about the vertical and horizontal accuracy of the location that it is reporting. One should use that accuracy to report to the user if the location is suspect. Google maps does this by increasing the size of the blue circle around the location marker. There are other ways to indicate to the user that the location is suspect, alert boxes, not showing the location if it falls outside of some predetermined accuracy, etc.

See: http://developer.apple.com/iphone/library/documentation/CoreLocation/Reference/CLLocation%5FClass/CLLocation/CLLocation.html#//apple%5Fref/occ/instp/CLLocation/horizontalAccuracy

Jack Cox