直线距离测算
测算2个坐标系的直线距离,目前有2种常见的公式:
半正矢公式
https://zh.wikipedia.org/wiki/%E5%8D%8A%E6%AD%A3%E7%9F%A2%E5%85%AC%E5%BC%8F
半正矢公式简单来说是根据球体模型,求取直线距离;但是由于地球并不是标准的球体,考虑到地球的离心率等,更为精确的公式即文森特公式。文森特公式比半正矢公式算法复杂度要高,偏差相对更小。2个公式都是近似解。
理论上,坐标间直线距离对于大部分GIS服务并没有太大的业务价值,不论运费计算还是其他距离测算相关业务都应采用步行、骑行、驾车规划路径距离这种更友好的方式。
GoogleMap也不提供直线距离测算:
https://developers.google.cn/maps/documentation/distance-matrix/overview#travel_modes
但是我们的业务方非要用…[无奈]
推荐一个github上的直线距离测算公式的实现:
https://github.com/grumlimited/geocalc
坐标转换
在地图使用上,出于我国国家安全考虑,目前的商业地图(高德、腾讯)是在地球坐标系(WGS84)上的二次加密(国家测绘总局发布),即我们经常说的火星坐标系(GCJ02),百度地图会有基于火星坐标系的二次加密,形成新的百度坐标系(BD09)。
商业地图都会提供将其他坐标系,转换为该地图自己的坐标系的API,但不会提供反向的坐标系转换。
推荐一个github上的坐标系转换的实现(转WGS84也是近似解):
https://github.com/wandergis/coordtransform