proper/best type for storing latitude and longitude

前端 未结 13 887
天涯浪人
天涯浪人 2020-12-07 11:21

In a system level programming language like C, C++ or D, what is the best type/encoding for storing latitude and longitude?

The options I see are:

  • IEEE
13条回答
  •  孤城傲影
    2020-12-07 11:41

    A Java program for comuting max rounding error in meters from casting lat/long values into Float/Double:

    import java.util.*;
    import java.lang.*;
    import com.javadocmd.simplelatlng.*;
    import com.javadocmd.simplelatlng.util.*;
    
    public class MaxError {
      public static void main(String[] args) {
        Float flng = 180f;
        Float flat = 0f;
        LatLng fpos = new LatLng(flat, flng);
        double flatprime = Float.intBitsToFloat(Float.floatToIntBits(flat) ^ 1);
        double flngprime = Float.intBitsToFloat(Float.floatToIntBits(flng) ^ 1);
        LatLng fposprime = new LatLng(flatprime, flngprime);
    
        double fdistanceM = LatLngTool.distance(fpos, fposprime, LengthUnit.METER);
        System.out.println("Float max error (meters): " + fdistanceM);
    
        Double dlng = 180d;
        Double dlat = 0d;
        LatLng dpos = new LatLng(dlat, dlng);
        double dlatprime = Double.longBitsToDouble(Double.doubleToLongBits(dlat) ^ 1);
        double dlngprime = Double.longBitsToDouble(Double.doubleToLongBits(dlng) ^ 1);
        LatLng dposprime = new LatLng(dlatprime, dlngprime);
    
        double ddistanceM = LatLngTool.distance(dpos, dposprime, LengthUnit.METER);
        System.out.println("Double max error (meters): " + ddistanceM);
      }
    }
    

    Output:

    Float max error (meters): 1.7791213425235692
    Double max error (meters): 0.11119508289500799
    

提交回复
热议问题