Monitoring Shape based region vs. Starting the Significant-Change Location Service - iphone

I am currently working on a location-based reminder app and I am trying to understand iOS 4/5 location services and some of the core location features. Since I want to use geo-fences of different sizes (user can choose the size), I was wondering if I need to combine Significant-Change Location Service with region monitoring or if it is enough to simply use Region Monitoring by itself to make those reminders go off.
As far as I understand Significant-change Location Service, my app would only get a location update if I switch cell towers. Would that mean that in case the geo-fence was somewhere in between that the reminder would not go off?
Compared to that how does Region Monitoring work, other than of course monitoring regions? Will the reminder always go off or are there any blind spots? If so, does DistanceFilter play a role here?
Thanks for the help.

Your use case should be covered with region monitoring.
As far as I understand Significant-change Location Service, my app would only get a location update if I switch cell towers. Would that mean that in case the geo-fence was somewhere in between that the reminder would not go off?
This might happen and is an edge case that you would have to cover. I really depends on many things, location accuracy being one of them. You would definitely have to test that one thoroughly.
Compared to that how does Region Monitoring work, other than of course monitoring regions? Will the reminder always go off or are there any blind spots? If so, does DistanceFilter play a role here?
Last time I checked (> 10 months) region monitoring wasn't always accurate enough. It worked but used cell towers more than the current position to monitor for regions. What that means: Don't rely on region changes alone and dont' expect them to be accurate to the meter.

Related

Changing a UITableViewController dynamically via location

I am in the process of building an app, for the record I am using the code from the ECSlidingView controller. I would like for my app to use the GPS to pull data from my web interface letting the user know that they can do certain things at a given location. So for example, I have a user go to a store and lets say I want them to make a payment at that location, it will given them that option. Or if the store doesn't offer payment through the app, I disable that. What would be a good way to go about this?
You could try using CoreLocation but you might have trouble getting accurate location inside (it will most probably use wifi or cellular info so the accuracy might not be what you expect). Then, when you get the location, issue a request to your service passing latitude and longiude you receive from CoreLocation. There, you should search by location to retrieve possible matches - consider returning muliple store infos for nearby stores due to the accuracy issues.

Best practice for sending live location data to server from iPhone

I want to develop an application for the iphone, that tracks the current position of the user in "realtime" and sends this data to a sql database on a webserver by a web service, so I will be able to have a consistent database where the registered users a currently positioned.
This is raising some questions on how to do this in an efficient way.
1) Shall I really update the GPS data in realtime on the server? Isn't this to "heavy" regarding energy consumption on the iphone? Maybe once a minute does it as well? What are best practices here when I want to be as accurate as possible?
2) What if there a maybe 1000 users at once.... is this still efficient to update a database with the current GPS data simultaneously?
Thank you in advance
Sebastian
Sending GPS data at regular time intervals will put extra load on the system unnecessarily and it is not optimal.
A better way to track the user is to send data only when the user has moved outside a circle of radius R from the last reported location.
That way a user moving in a car at 60 mph on a highway and one walking at 0.1 mph in a park will both be tracked accurately.
Users are known to stop moving when they sit down to eat, go to the bathroom or sleep.

Getting current location and posting it to a web service

Ok... maybe forbidden by Apple, but assuming this is permitted. What would be the best way to get the current location (not difficult) and posting it to a web service (also not much of a challenge). The app is for an artist who wants people to see where he is at the moment. Personally, I wouldn't want people to know where I am 24/7 but that's performance art I guess. An exact location is not wanted but a town or area would be preferred. I could modify the string when it gets to the server and make it more vague by rounding the LOG and LAT.
The app the fans would use would retrieve his current location from the server and update the map view with a location.
I suppose one way would be for him to find out his coordinates and post that to a web page but I'd like it to update automatically.
A response with code is not necessary, just a general opinion on methodology/advisability would be appreciated
I would probably give him a webpage to go to that records his position every time he visits. It would be a private URL, and perhaps use some lightweight authentication. For versatility, I'd record the exact position in the database (in case he changes his mind on how it should work later on). However, you could use an external service or another purchased database with zips or city information with lat/lng data, so you could just provide users of the client app with his general vicinity rather than exact location.
The alternative would be to give him an ad hoc app that does the same thing, but putting together that location recording webpage would be a much simpler process. Could be handy for other things, too.
Here's a little writeup about getting location from mobile Safari, just as a reference: http://mobiforge.com/developing/story/location-iphone-web-apps
Why wouldn't you just use google latitude and read out his status?
I think this should really be done as a web page web-app. You can get coordinates from the device through mobile safari and you can skip the app approval process. You can also set it up so it runs fullscreen on his phone and he won't know the difference. You can also put a password on it.
There is a good chance it would not get approved as a regular app.
You can always meta refresh the page to keep it updating.
http://smithsrus.com/gps-geolocation-in-safari-on-iphone-os-3-0/
"Artist" must log in to his application (thus insuring that he want to share his coordinates with your webserver), then you use CLLocationManager to get his coordinates and make a reverse geocoding using Google Maps API to get country and city for given coordinates.
Can't see anything special about it :)

Core Location - fallback, location caching and alternatives

I have a few questions about Core Location.
1) Should the user refuse permission for my app to use core location, or core location is unavailable for some reason, is there a fallback? (Device Locale, for example?)
2)Can I cache a device's location for next time? Does Core Location do this itself?
3)I really need the sunset time in the user's area during the mid-spring season and I have a function to do that, once I have the Latitude and Longitude of the device. Perhaps I can just make an assumption about the time based on Locale? (Example: In the US, assume approximately 7:00pm.)
EDIT:
I really am trying to calculate sunset in the users area for an app. Nothing to do with the map. I am considering the following sequence of events:
Check for Core Location availability. If yes, use it and store it in NSUserPreferences. If Core Location is unavailable, go on to the fallbacks.
Check for a stored Location. If it's stored, use it. If not, go on...
Check for the user's chosen time.
1) Strictly speaking, if the user does not allow using CoreLocation or, if permission were given but CoreLocation is not available, there is no other fallback to get the user's location as a latitude, longitude pair. Using the locale may not work in all of the cases. First, it will just give you an approximation which may be way too far from reality. However, it's up to you to judge whether this approximation is ok for your app. Moreover, there are some users using a locale different from the one related to their country. And, you have no guarantee that people travelling abroad will adjust the date/time every time.
2) Core Location caches by default the last location retrieved from the GPS unit. However, for people travelling abroad this cached location will be certainly wrong (even for people travelling just a few miles away), and in general, you should discard the cached value and localize again the user each time. I understand that for people travelling within their country this will not (usually) create huge problems. But it just depends on the country: travelling within Italy will not change the time, but travelling across the US may change the time up to 3 hours.
3) I would suggest to try using Core Location and, in case of problems, simply ask the user to input his/her local time or location (the city should be enough for your purpose). If you choose to ask for the user's location, then you can get the corresponding latitude/longitude pair but this will require a working network connection.
2) From the online docs for CLLocationManager:
The location service returns an initial location as quickly as possible, returning cached information when available.
You can check the CLLocation timestamp to see if it is a cached value or not.
3) If you do decide to use locale for an initial TZ approximation, remember that users travel, and may not reset their locale promptly. You can get the current TZ object with:
[NSTimeZone localTimeZone]

iPhone Development: CoreLocation and MapKit

How bad is it to use Location Manager to retrieve the location information when MapView.showUserLocation is also TRUE?
I have a situation where i want to show the blue dot to indicate the user's current location, and i want to record the user's current location after some time interval. Having said that, there may be situations where the user's current location is now being shown, but i still want to get the user's current location.
I think i'll have to use the Location Manager in my controller class, but setting showUserLocation = YES would mean that i'll be draining more battery since two Location Managers are working at the same time? Is this assumption correct?
As discussed on other communities, you can have mapView.showUserLocation = YES and still use CLLocationManager to retrieve the most current location information.
In general there's no conflict involved with having multiple CLLocationManager instances running at the same time.
Just save the coordinates in an array and draw mapannotations for past recorded locations. You dont need to run multiple location managers.