ios google maps accuracy - ios

i have view that display user current location using google maps and route to his distention.
the problem: user location is out of the road most of the time, I can't put the app like this in the Appstore, it will get bad reviews.
I checked google sdk for IOS, is there any property for accuracy !?
like: self.googleMap.accuracy = bestForNavigation
are there any tweaks or properties to set that improve user location accuracy?
how maps apps on the Appstore display user location with so much accuracy like google app?

In the CoreLocationManager you can set the desiredAccuracy to kCLLocationAccuracyBestForNavigation. However, GPS is still never perfect, you may get anywhere from 5 to 100m accuracy from the GPS depending on signal quality, sky view (canyons, cities), etc.
Another source of error to watch out for, make sure your GPS data is in the same datum (ie: WGS-84) as the map and the road network data. Different datums can add small (or large) errors.
To compensate for inherent GPS and mapping error, most turn-by-turn navigation apps use what we call "snap to road". We compute what roads the user is near and IF the GPS location is within 30m (see note1) of the road AND the course (or heading, note2) is within +/- 25 degrees of the road direction, THEN we "snap" to the road. That means we change the location and heading of the displayed location dot so that it shows that the user is exactly on the road (compute the nearest point on the road from the GPS point) and heading along the road path (select the road heading that is closest). This requires detailed road geometry data including curves and some fun calculations but it works really well once you get it.
If they are further off the road or not aligned with the road heading then we show their actual GPS location. This works really well but it requires that you have the road network geometry available (or at least their route to destination geometry) so you can make these checks.
Note1: we select a tolerance based on the reported horizontalAccuracy from the CLLocation we get.
Note2: we blend the compass heading (corrected) and course (from GPS) to decide the users actual heading. Below about 8 kph we predominantly use compass heading, above that we mainly use GPS course (its more accurate). We also GPS course to determine compass error to correct it. This allows us to show accurate headings even when stopped at a light or at very slow parking lot speeds.

There are limits to GPS accuracy.
If an app has access to the underlying map data and there is an assumption that the location should be on a road then it could fudge the user's location. But what if I am parked beside the road or not in a vehicle.
Fro: gps.gov: The GPS signal in space will provide a "worst case" pseudorange accuracy of 7.8 meters at a 95% confidence level.
But it is possible for receivers to do better than this especially if they are stationary. In the stationary case location averaging can help substantially but the fact it is stationary would have to be known to the device. It is also possible for receivers to do much worse. So, 10 to 20 meters is probably a safe assumption.

Related

Does altitude variance effects geofencing?

I need to implement a auto-check in feature for managing office attendance.Will accuracy of geofencing be effected if office is situated on 50th floor.ie Does altitude variance effects accuracy of geofencing?
The accuracy is not an issue (geofencing is based on lat/long coordinates, which are the same regardless of the floor). The issue is going to be GPS accuracy. Due to the fact that GPS is not able to penetrate walls, the GPS coordinates will nearly always show you outside of the building, not inside of it. Not to mention being able to identify which office room someone has entered.
If this is acceptable accuracy level for your project, then just GPS works. If you need to see that the person has actually entered the building or the specific office, you will need to utilize beacons.
(Disclosure: I work for Proximi.io, a technology-agnostic positioning platform)

Detect the plotted CLRegions with the help CLLocationManager in ios based on direction of a moving vehicle

In my IOS app I worked on the functionality of detect the regions and its working fine whenever user enters in those regions, means didEnterARegion, didExitRegion methods getting called. Now I am facing a problem while enhancing this functionality with one more feature. Lets assume there are two roads i.e Road A and Road B with their lanes direction opposite to each other. When I am plotting the regions for both roads at different different locations on the roads, the condition can arise when the vehicles moving on Road A can detect the plotted region on Road B and vice versa.But I want to prevent the detection of regions plotted on Road A by Road B moving vehicles and vice versa.
It will work fine if my app will detect the regions based on the moving direction of vehicle or device (app knows that regions associated with which direction). I tried lot of solutions for it. But still not able to find the direction of angle of moving vehicle. Please suggest some solutions or algorithms to resolve this problem. Thanks.
There is no simple solution. The solution needs a collaboration between the server end and the front end (App.)
Simple algorithm:-
When the user launches the app, the app sends the device current location to the server.
Based on the location, the server will select a list of regions (eg: within 20 km radius) and sends to the app.
If the list of sending regions is more than 20, the server has to reduce the radius until there are only 20 regions maximum.
When the app receives the regions, it will start to monitor the region.
With the above algorithm, Road A and Road B will have different monitored regions. iOS has the limitation to monitor maximum 20 regions at the same time. So, you will need to remove the old regions before start to monitor the new regions return from the server.
Other Region monitoring topics that you might want to check out:-
Region Monitoring Glitch on iOS 7 - Multiple Notifications at the same time
iOS Geofence CLCircularRegion monitoring. locationManager:didExitRegion does not seem to work as expected
Region monitoring won't help you in determine.
If you have geo points of Roads then u can detect in which road your car is currently moving. nevertheless roads are 1 meter far apart.
If u can have two geo points on each road then its possible to determine

Location with iBeacon

I am using an iBeacon, and using triangulation and trilateration (or something similar), want to be able to locate an exact (or fairly accurate) distance between the iBeacon and user's device (in feet/metres/e.t.c). What is the best way to do this, and how would I do this?
I forgot to mention: I understand that it is possible to find proximity (i.e near, immediate, far, etc.), however as mentioned, ideally I am looking to find an accurate distance (maybe by combining RSSI, accuracy, and proximity values).
For this you should use RSSI (Received Signal Strength Indication) of an iBeacon. The signal strength determines how close or far it is from you. But the problem is that:
Every beacon's RSSI might differ distance, accuracy.
If beacon is behind the wall or any static obstacle the RSSI-Distance-Ratio will not work.
Therefore instead of Triangulation or Trilateration you should go for Fingerprinting. This will work better then rest of the techniques.
Place obstacles all around you.
Make reference points on your map.
Calibrate your app with that location i.e. Get the signal strengths from atleast 3 nearest iBeacons and save it against that reference points.
Do this for all other reference points.
(If you can) Do this twice or thrice and take average and store in database.
Now you have laid map of calibrated reference points. (This will handle all different RSSI-DIstance-Ratios of all the beacons)
Now whenever you are at any position compare it with the nearest point and you will get to know the closest location of your reference point.
If you are using google maps, the lat long they provide is upto six decimal place i.e. 0.11 meters which i think is preety much accurate in a room as well.
I guess this helps :)
Please mark this the right answer if it works.
In iOS the Core Location beacon information you get when you range a beacon includes both a "proximity" value (far/near/immediate) and an "accuracy" reading, which is actually approximate distance, in meters.
In order for the distance reading to be as accurate as possible, you should really calibrate your beacons. To do that, you put the beacon exactly 1 meter from the receiver and take a reading. The receiver gives you a "measured power" reading, which you then set on the transmitter. The measured power reading is used in calculating the distance reading.
Distance readings are very approximate, and are subject to interference from the surroundings.
The Apple sample app "AirLocate" shows working code for calibrating a beacon, and I believe it also displays

iOS Calculating the vertical movement distance of the device

I'm looking to create a function for my app which records the distance travelled in the vertical plane. More specifically, I want to record how far the device has been 'dropped' - this could mean dropped at arm's length onto the floor or dropped slowly with the user as they go down ten floors in an elevator. I'm looking for advice on the best way to calculate this with a relatively high level of accuracy.
I've read a little on the difficulty in accurately measuring distance travelled using core motion - especially as I need it to work even if the device rotates during the movement. From what I've researched it seems as though it would be impossible, or at least very difficult, to achieve this using core motion.
Would I be able to achieve this effect with Core Location instead? I've seen posts about calculating lateral distance, as in during a car journey, but nothing about vertical distance.
Is it as simple as 'startingAltitude - endingAltitude = distanceTravelled?
If so - how accurate is the altitude measurement of Core Location and how could I get started with this behaviour? I'm fairly new to iOS programming and would appreciate any pointers on the most appropriate method of achieving the function I want.
Thanks
There are serious limitations to both approaches.
Using an accelerometer to measure distance travelled requires very precise and accurate real-time measurement of acceleration. Any error in acceleration reading leads to error in your velocity calculation, which makes your location reading drift from the real location. Drift gets worse over time, to the point where the error swamps the actual location reading.
Based on my testing the altitude reading in iOS GPS devices is really bad. +/- 100 or more meters is not uncommon. Indoors GPS readings tend to get really bad, and the altitude reading is bad enough to start.

How high is GeoPositionAccuracy.High?

When working with the Windows Phone Location API, I am trying to gauge distance between two points that are only say inches or feet away. That said, accuracy is very important.
What is the difference between GeoPositionAccuracy.Default and GeoPositionAccuracy.High? Is the difference related to the number of decimal values? If that is the case, how many decimal values are assigned for GeoPositionAccuracy.Default and GeoPositionAccuracy.High?
GeoPositionAccuracy is just used to tell Windows Phone whether you need an accurate position or not. You get to make that choice because a higher accuracy uses more battery, so it's better not using it if you're just trying to figure out in which town the user is currently located. GeoPositionAccuracy.Default probably doesn't even use the GPS, but alternative localization methods
For the actual accuracy of the position you get, you can check the HorizontalAccuracy property of the GeoCoordinate. It gives you the error margin in meters.
GeoPositionAccuracy.Default uses a combination of the following:
Assisted GPS (aka cell tower triangulation)
Wi-Fi Triangulation (aka IP lookup)
GeoPositionAccuracy.High uses the methods above, in addition to:
GPS
Assisted GPS is battery friendly & locks on the location fast since it uses the cell radio which is already on. I can be accurate to the city block or building level in urban areas, but accuracy degrades in rural areas where the density of cell towers decreases. It also works well inside buildings.
GPS is slower to acquire a satellite lock and consumes more battery power since the GPS radio must be turned on as needed. Once locked in, it's the most accurate positioning method within just a few feet. It's virtually useless inside buildings since you need line of sight with the sky. Dense urban areas like Manhattan can also cause GPS inaccuracies.
Wi-Fi / IP Lookup is the least accurate since the IP address of an Wi-Fi hotspot can sometimes be registered at a different address.
I don't believe it makes any guarantees on the accuracy, it just allocates more resources towards acquiring a more accurate position (by providing more power to GPS module for instance).

Resources