计算两个经纬度之间的直线距离-SQL Server 利用 geography 计算地理位置距离、距我最近排序

作者:vkvi 来源:ITPOW(原创) 日期:2017-11-25

SQL Server 有个字段类型为 geography,这个类型存经纬度,就可以利用经纬度排序了。

(注意,还有一个近似类型:geometry,这个是用来计算二维平面的,不适合经纬度)

如何往 geography 存储值?

利用的是 geography::STPointFromText()。

第一个参数 POINT() 里面再跟经度、纬度。

第二个参数 4326 代表 GCS-WGS-1984 坐标系。具体本文后面会列出相关链接。

如何查询?

这个 SQL 语句利用 geo.STDistance(@currentLocation)  < 1000000 限定了 1000 公里以内的数据,然后按由近到远排序。

关键词总结

  • geography::STPointFromText
  • 字段.STDistance
  • POINT

坐标系

WGS84,World Geodetic System 1984,世界大地坐标系。长半轴:a = 6378137.0 m,扁率:1/298.257223565。

CGCS2000,China Geodetic Coordinate System 2000,国家大地坐标系。是中国新一代大地坐标系,21 世纪初已在中国正式实施。长半轴:a=6378137.0 m,扁率f=1/298.257222101。

WGS84 与 CGCS2000 实质是一样的,都是对准 ITRF(国际地球参考框架)。可以说两者相容至 cm 级水平,对于当前的应用水平来说,完全忽略。

1954 北京坐标系。20 世纪 50 年代,为满足测绘工作的迫切需要而设立。

1980 西安坐标系。随着天文大地网布设任务的完成,通过天文大地网整体平差,于 20 世纪 80 年代建立。

2018 年 7 月 1 日起全面使用 2000 国家大地坐标系,北京 54 和西安 80 坐标系正式退出历史舞台

GCJ-02,GCJ 是国家测绘局的拼音首字母,这个被戏称为火星坐标系(其实叫偏移算法更准确),国内出版的各种地图系统(包括电子形式),必须至少采用 GCJ-02 对地理位置进行首次加密,经偏移算法处理的地图数据偏差一般为 300~500 米,腾讯地图、高德地图就是用的这个。网上传的这段加密代码仅仅 13 行,但是意义重大。百度地图、搜狗地图有自己的二次加密。

相关阅读


相关文章