STDistance() return 奇怪的结果
STDistance() return weird result
我正在查找两个几何点之间的距离,以下是我的查询
DECLARE @g geometry;
SET @g = geometry::STPolyFromText('POLYGON ((5.177074447274207 60.32819571126778,
5.177074447274207 60.32533671620816,
5.172660537064075 60.32533671620816,
5.172660537064075 60.32819571126778,
5.177074447274207 60.32819571126778)
)', 4326).MakeValid();
DECLARE @h geometry;
SET @h = geometry::Point(5.1752474, 60.3290297, 4326)
Select @g.STDistance(@h)
下面是我得到的结果
0.000833988732217961
但是当我找到 Google 地图和 Bing 地图上的点之间的距离时,我得到 100mtr。
我还查看了与 SRID 相关的文档,当我使用 SRID 4326 时,它使用仪表作为测量值。因此,如果我将 return 结果视为米,那么结果就会大不相同。
那么函数 STDistance 是否有任何问题,或者我应该将其视为 Km 而不是米或其他什么?
首先:由于地球不平坦,请改用 geography
类型:
--Closest point from polygon
DECLARE @g geography = geography::Point(60.32819571126778, 5.1752474, 4326)
--Reference point
DECLARE @h geography = geography::Point(60.3290297, 5.1752474, 4326)
SELECT @g.STDistance(@h)
returns92,9212347595042
[米]这好像是对的
其次:要使用多边形,您必须注意 orientation。地理类型有'inside polygon'和'outside polygon'的区别。如果多边形覆盖地球的一半——应该选择哪一半?这是由方向决定的。我切换了#2 和#4 点。请参阅以下示例:
DECLARE @g geography = geography::STPolyFromText('POLYGON ((
5.177074447274207 60.32819571126778,
5.172660537064075 60.32819571126778,
5.172660537064075 60.32533671620816,
5.177074447274207 60.32533671620816,
5.177074447274207 60.32819571126778))', 4326);
DECLARE @h geography = geography::Point(60.3290297, 5.1752474, 4326)
SELECT @g.STDistance(@h)
returns92,9192581745513
[米]这好像是对的
第三:确保您的纬度和经度坐标没有调换:参见 Point
与 STPolyFromText
。
我正在查找两个几何点之间的距离,以下是我的查询
DECLARE @g geometry;
SET @g = geometry::STPolyFromText('POLYGON ((5.177074447274207 60.32819571126778,
5.177074447274207 60.32533671620816,
5.172660537064075 60.32533671620816,
5.172660537064075 60.32819571126778,
5.177074447274207 60.32819571126778)
)', 4326).MakeValid();
DECLARE @h geometry;
SET @h = geometry::Point(5.1752474, 60.3290297, 4326)
Select @g.STDistance(@h)
下面是我得到的结果
0.000833988732217961
但是当我找到 Google 地图和 Bing 地图上的点之间的距离时,我得到 100mtr。
我还查看了与 SRID 相关的文档,当我使用 SRID 4326 时,它使用仪表作为测量值。因此,如果我将 return 结果视为米,那么结果就会大不相同。
那么函数 STDistance 是否有任何问题,或者我应该将其视为 Km 而不是米或其他什么?
首先:由于地球不平坦,请改用 geography
类型:
--Closest point from polygon
DECLARE @g geography = geography::Point(60.32819571126778, 5.1752474, 4326)
--Reference point
DECLARE @h geography = geography::Point(60.3290297, 5.1752474, 4326)
SELECT @g.STDistance(@h)
returns92,9212347595042
[米]这好像是对的
其次:要使用多边形,您必须注意 orientation。地理类型有'inside polygon'和'outside polygon'的区别。如果多边形覆盖地球的一半——应该选择哪一半?这是由方向决定的。我切换了#2 和#4 点。请参阅以下示例:
DECLARE @g geography = geography::STPolyFromText('POLYGON ((
5.177074447274207 60.32819571126778,
5.172660537064075 60.32819571126778,
5.172660537064075 60.32533671620816,
5.177074447274207 60.32533671620816,
5.177074447274207 60.32819571126778))', 4326);
DECLARE @h geography = geography::Point(60.3290297, 5.1752474, 4326)
SELECT @g.STDistance(@h)
returns92,9192581745513
[米]这好像是对的
第三:确保您的纬度和经度坐标没有调换:参见 Point
与 STPolyFromText
。