SQL Server 2008 GEOGRAPHY STDistance() 值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3335773/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQL Server 2008 GEOGRAPHY STDistance() value
提问by Chris
I am using geography.STDistance() to return the distance between two single point locations. I'm curious as to which measurement is used for the return value? Is it in KM's, miles or perhaps some other?
我正在使用 geography.STDistance() 来返回两个单点位置之间的距离。我很好奇返回值使用哪种度量?是在公里、英里还是其他一些?
I'm getting results back upwards of 250k but i've no idea if im doing something wrong with my TSQL as these are historical locations(i.e. they no longer exist) so I can't just do a quick lookup.
我得到的结果超过 250k,但我不知道我的 TSQL 是否有问题,因为这些是历史位置(即它们不再存在),所以我不能只是快速查找。
declare @p1 geography
declare @p2 geography
SELECT @p1 = Location from tblLocations where Id = 1
SELECT @p2 = Location from tblLocations where Id = 2
select @p1.STDistance(@p2)
回答by SPE109
I think the return measurement depends upon the Spatial Reference Identifiers (SRIDs)of your geography data type. The default is 4326 which is in meters. There' a table in the DB you can check Select * from sys.spatial_reference_systems
我认为返回测量取决于
您的地理数据类型的空间参考标识符 (SRID)。默认值为 4326,以米为单位。数据库中有一张表,您可以查看Select * from sys.spatial_reference_systems
回答by Nij
Just to cover people arriving here looking for the answer when using STDistance with GEOMETRY types, the result is "expressed in the same unit of measurement as the coordinate values themselves' (from 'Beginning Spatial with SQL Server 2008') which for WGS84 / SRID 4326 data is in Degrees.
只是为了涵盖在使用 STDistance 和 GEOMETRY 类型时寻找答案的人,结果是“以与坐标值本身相同的测量单位表示”(来自“从 SQL Server 2008 开始空间”),对于 WGS84 / SRID 4326 数据以度为单位。
The following SQL should run on SQL Server 2008 R2 and above. (Source of location data for Edinburgh Waverley and London Charing Cross stations bing maps):
以下 SQL 应在 SQL Server 2008 R2 及更高版本上运行。(爱丁堡韦弗利和伦敦查令十字车站 bing 地图的位置数据来源):
DECLARE @edinGeom GEOMETRY = GEOMETRY::STGeomFromText('POINT(-3.1917 55.9517)', 4326)
DECLARE @cxGeom GEOMETRY = GEOMETRY::STGeomFromText('POINT(-0.1252 51.5083)', 4326)
SELECT @edinGeom.STDistance(@cxGeom), sqrt(square(3.1917-0.1252) + square(55.9517-51.5083)) AS 'Distance from Pythagoras';
DECLARE @MetersPerMile FLOAT = 1609.344;
DECLARE @edinGeog GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT(-3.1917 55.9517)', 4326)
DECLARE @cxGeog GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT(-0.1252 51.5083)', 4326)
SELECT @edinGeog.STDistance(@cxGeog), @edinGeog.STDistance(@cxGeog)/@MetersPerMile;
The results for the first 3 lines using GEOMETRY types are:
使用 GEOMETRY 类型的前 3 行的结果是:
STDistance Geom:5.39881707506376, Distance From Pythagoras:5.39881707506376
STDistance Geom:5.39881707506376,与毕达哥拉斯的距离:5.39881707506376
The results for the GEOGRAPHY types are:
GEOGRAPHY 类型的结果是:
STDistance Geog:534226.761544321, Converted to Miles:331.953119745885
STDistance Geog:534226.761544321,转换为英里:331.953119745885
The '331 miles' or so from the GEOGRAPHY calculation with conversion ties in nicely with that shown on Bing maps as the distance between two points (clearly this is not a proof of anything, but it suggests similar underlying calculations).
来自 GEOGRAPHY 计算的“331 英里”左右的转换与 Bing 地图上显示的两点之间的距离非常吻合(显然这不是任何证据,但它暗示了类似的基本计算)。
The numbers output by the GEOMETRY calculation hopefully demonstrate that the result is very clearly in degrees, with the value apparently being calculated using pythagoras (the underlying calculations would be more complex if we were getting the distance between points and polygons).
GEOMETRY 计算输出的数字有望证明结果以度为单位非常清楚,该值显然是使用毕达哥拉斯计算的(如果我们获得点和多边形之间的距离,基础计算会更复杂)。