MySQLのドキュメントでは ST_Distance_Sphere
計算では、球状の地球と構成可能な半径を使用します。オプションの半径引数はメートル単位で指定する必要があります。省略した場合、デフォルトの半径は6,370,986メートルです。radius引数が存在するが正ではない場合、
ER_WRONG_ARGUMENTS
エラーが発生します。
PostGISはのドキュメントで述べてST_Distance_Sphere
います(ドキュメントはもう正確ではありませんが)
球状の地球と6370986メートルの半径を使用します。
どこからデフォルトの6,370,986メートルを取得しましたか? WGS84によると、長軸半径は6,378,137.0 mです。現在、平均半径を使用しているPostGISは、基本的に6371008を使用しています。
コードを見る
#define WGS84_MAJOR_AXIS 6378137.0
#define WGS84_INVERSE_FLATTENING 298.257223563
#define WGS84_MINOR_AXIS (WGS84_MAJOR_AXIS - WGS84_MAJOR_AXIS / WGS84_INVERSE_FLATTENING)
#define WGS84_RADIUS ((2.0 * WGS84_MAJOR_AXIS + WGS84_MINOR_AXIS ) / 3.0)
つまり
-- SELECT 6378137.0 - 6378137.0 / 298.257223563;
WGS84_MINOR_AXIS = 6356752.314245179498
-- SELECT ( 2.0 * 6378137.0 + ( 6378137.0 - 6378137.0 / 298.257223563) ) / 3.0;
WGS84_RADIUS = 6371008.771415059833
新しいバージョンははるかに効率が悪く、より複雑で、Pro4jを使用していますが、同じことをしているようです。
それでも6370986はどこから来たのですか?
(2*minorAxis+majorAxis)/3
WGS84のためにその値がまだ数メートルより大きい(6,371,008.771)であるにもかかわらず...