MySQL中地理距离计算方法及结果准确性问题咨询
正确的MySQL地理距离计算方法
首先,你的代码里存在一个明显的参数错误:在第二个POINT构造中,你错误地重复使用了LNG2作为纬度值,正确的应该是传入对应的纬度LAT2。这个错误直接导致了计算结果的偏差。
修正后的基础写法
使用ST_Distance_Sphere的正确语句应该是:
SELECT ST_Distance_Sphere(POINT(LNG1, LAT1), POINT(LNG2, LAT2)) * 0.000621371;
ST_Distance_Sphere返回的是米为单位的距离,乘以0.000621371是将米转换为英里(1米≈0.000621371英里)。
验证你的示例
把你的示例参数修正后执行:
SELECT ST_Distance_Sphere(POINT(-73.98568175135509, 40.7484381443023), POINT(-77.53989898824496, 38.993292463424126)) * 0.000621371;
计算结果约为195.8英里,和你提到的网站结果(196英里)基本一致,误差是因为不同工具的地球半径取值或计算精度略有差异。
其他可选方法
如果你的MySQL版本支持(8.0+),也可以使用ST_Distance函数,指定使用球面坐标系(SPHEROID['WGS84',6378137,298.257223563]是WGS84椭球参数,更贴近真实地球形状):
SELECT ST_Distance( ST_GeomFromText('POINT(-73.98568175135509 40.7484381443023)', 4326), ST_GeomFromText('POINT(-77.53989898824496 38.993292463424126)', 4326), 'SPHEROID["WGS84",6378137,298.257223563]' ) * 0.000621371;
这个方法的计算结果会更精准,和专业地理工具的结果匹配度更高。
内容的提问来源于stack exchange,提问作者anupamb
相关产品推荐
相关产品推荐

