views:

2183

answers:

9

Hello,

After some searching on Google, I ask myself:

Is it possible to build a compass (simple showing the heading/direction) with the iPhone 3G's GPS sensor?

I have the suspicion, that this is only possible, if the device is moving.

Any ideas are appreciated.

+1  A: 

I think your right with your suspicion, a GPS position is a single point without any direction information. To determine a direction you need two points to create a direction vector. Car navigation systems work the same way. They can only show a direction vector if the car is moving.

Alexander
+4  A: 

Yes, you are right, that's the only way. Although I think once you know the direction, you could track small movements of the phone from acceleration sensors and draw the direction accurately even if the original movement stops.

vava
Agree... see my comment above :)
david a.
+1  A: 

By scanning the available applications I've come to the conclusion that there are two ways to make a compass for the current iPhone 3G.

  1. Require the phone to move. Use the difference in GPS data to determine the direction.
  2. Require the user to point the phone at the sun. Use GPS and time information to determine directions.
Darron
Just don't try to find your way home at night. ;-)
Robert Paulson
He can use stars instead :)
vava
+2  A: 

The compass will only show the direction you're moving. It will not tell you the direction the iPhone is positioned in. So even using the accelerometer to track that the iPhone has turned/moved will not necessarily let you point to north on the display.

(Ie. you won't know if its moving sideways or if we're holding the iPhone upside-down or anything. You'll just know where you're moving...)

Arjan Einbu
+7  A: 

With the original iPhone and iPhone 3G, no.

With the iPhone 3GS available June 2009, yes. It includes a magnetometer which would allow for a compass application.

The Core Location Framework provides this information in the CLHeading class. You can check if the device supports this function with the magnetometer key.

As others have said, with the iPhone 3G you would be able to tell the direction of movement when the phone is moving, but you would not be able to tell the orientation of the phone to indicate direction to the user. Certainly the user can be instructed to orient the phone in a certain manner which combined with the movement could indicate direction accurately.

g .
+1  A: 

If you implement an analogue clock, you can use the instructions below to superimpose a compass dial.

This could be used to 'calibrate' the compass and use the accelerometer remain pointing to North when the phone moves.

Obviously this is not super accurate... "low tech solution to a high tech problem"

(instruction taken from http://www.qwerty.co.za)

In the northern hemisphere place the watch on a level piece of ground, point the hour hand in the direction of the sun. The North-South line is again the line dividing the angle between the hour hand and the 12 o'clock line in half.

In the Southern hemisphere, place the watch on a level piece of ground, point the figure 12 towards the sun. The North-South line is the line dividing the angle between the hour hand and the 12 o'clock line in half.

rjstelling
No need to place on level ground when in the northern hemisphere? ;)
Arjan Einbu
Er...that's a quasisundial, isn't it...
Paul Nathan
+1  A: 

As a side note, the accelerometers in the iphone don't track rotations only translations so you can't do proper 6 axis inertial tracking of position and direction.

Carl Coryell-Martin
+1  A: 

As an update to this, the iPhone 3GS does include an actual, working digital compass that is available to apps. It makes writing such an app trivial.

See the CLHeading class and the magneticHeading property.

http://developer.apple.com/iphone/library/documentation/CoreLocation/Reference/CLHeading_Class/Reference/Reference.html

You can also get a true north heading, assuming that the phone has had time to locate itself geographically.

CaptainAwesomePants
Cool update. Thanks...
Stefan
+1  A: 

You just need to implement location manager functionality to find the exact direction in which your iPhone is pointing.

So, You can check this :

CLLocationManager *locationManager; [locationManager startUpdatingHeading];

And whenever you call startUpdatingHeading() it will call "- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading" method which you need to override from Location manager.

And that's it you can find the direction in which iPhone 3GS is pointing by newHeading.magneticHeading or newHeading.trueHeading.

You will surprise that you can get exact the same direction what magnetic compass gives you.

Tech Guru