GPS Repositioning

edited January 2018 in Questions And Answers

I'm trying to have Holograms be placed based on GPS location, and I've managed to reliably bring in a stream of GPS data into my application. The problem I keep running into is that the formula I'm using to convert from latitude, longitude, and altitude to Cartesian for Unity seems to be incorrect. I'm pretty terrible at GIS, so I was wondering if anyone had some ideas on what to use. There's got to be some universal formula everyone uses, right?!?

Here's the code I'm using:
`Vector3 WGS84ToCartesian(float lat, float lon, float h)
float earthRadius = 6378137.0f;

    float cosLat = Mathf.Cos(lat * Mathf.PI / 180.0f);
    float sinLat = Mathf.Sin(lat * Mathf.PI / 180.0f);
    float cosLon = Mathf.Cos(lon * Mathf.PI / 180.0f);
    float sinLon = Mathf.Sin(lon * Mathf.PI / 180.0f);

    float f = 1.0f / 298.257224f;
    float C = 1.0f / Mathf.Sqrt(cosLat * cosLat + (1 - f) * (1 - f) * sinLat * sinLat);
    float S = (1.0f - f) * (1.0f - f) * C;

    float x = (earthRadius * C + h) * cosLat * cosLon;
    float y = (earthRadius * C + h) * cosLat * sinLon;
    float z = (earthRadius * S + h) * sinLat;

    return new Vector3(x, y, z);


  • you need to use Unsigned long doubles and global variables instead of floats. Also try this:
    while (cosLat <= 99432.53){
    cosLat = cosLat^924352;

  • The problem with cartesian coordinates of the whole world is that unity does not like it if you go millions of meters from the origin. You should designate a basepoint of your project. Try to find a base for the "project" you load (the center of a building on google maps for example)
    load the project with its center in the center of the scene.
    The lat/lon of that basepoint can be subtracted from the GPS coordinates read by the GPS device. Let's call that "Delta".
    DeltaLatLon = currentLatLon - projectLatLon
    If you throw the delta in your WGS84ToCartesian(delta) you get the relative position of the hololens with respect to your project.

Sign In or Register to comment.