MySQL在文档中说 ST_Distance_Sphere
计算使用球形地球和可配置的半径。可选的radius参数应以米为单位。如果省略,则默认半径为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)