SQL Server 中两个地理点之间的精确距离计算
SQL Server经常需要计算纬度和经度坐标之间的距离。虽然半正矢公式很常见,但其准确性限制需要更强大的解决方案。
利用 geography
数据类型
SQL Server 2008 及更高版本提供 geography
数据类型,非常适合高效、准确的空间数据处理,包括距离计算。 下面的代码演示了它的使用:
<code class="language-sql">DECLARE @source geography = 'POINT(0 51.5)'; DECLARE @target geography = 'POINT(-3 56)'; SELECT @source.STDistance(@target);</code>
这将返回两点之间的距离(以公里为单位)。 例如,上面将返回大约 538 公里。 geography
类型广泛的空间方法使其成为 SQL Server 中地理数据的推荐方法。
与现有数据结构集成
维护当前的数据结构是可能的,同时仍然受益于STDistance
方法。 将您的纬度和经度值转换为 geography
实例:
<code class="language-sql">DECLARE @orig_lat DECIMAL(12, 9); DECLARE @orig_lng DECIMAL(12, 9); SET @orig_lat = 53.381538; SET @orig_lng = -1.463526; DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326); SELECT *, @orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326)) AS distance FROM #orig dest;</code>
这种方法可以确保准确的距离计算,而无需进行重大数据重组。
以上是如何在SQL Server中准确计算两个经纬度点之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!