加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 获取米的距离,而不是在Spatialite中的度数

发布时间:2020-12-12 08:29:44 所属栏目:MsSql教程 来源:网络整理
导读:我有以下查询: select distance(GeomFromText('POINT(8 49)',4326),GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326)) 这给我0.97度.但我需要它在米,不知道哪个SRID要转换. 有人可以给我一个例子,如何得到结果米为空间的? 职位全部
我有以下查询:
select distance(GeomFromText('POINT(8 49)',4326),GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))

这给我0.97度.但我需要它在米,不知道哪个SRID要转换.

有人可以给我一个例子,如何得到结果米为空间的?

职位全部在欧洲.

解决方法

只需将度数乘以111195 – 该值为(地球平均半径)* PI / 180 – 即“地球表面上以米为单位的一个大圆度的平均长度”.

使用此方法的最大误差为?0.1%

编辑

好的,我上面的答案仍然是一个问题:“如何将弧度以度数转换成米长”,但是这不是你问的问题(应该问的).

我没有专业地使用Spatialite,所以我假设你的样品查询确实返回了“以度为单位的长度”.这不是真的.

不幸的是,Spatialite似乎无法计算“地理意义上的距离”.尽管使用SRID 4326定义了几何形状,但它们将它们视为在飞机上.

这是一个简单的证明:

select Distance(GeomFromText('POINT(0 0)',GeomFromText('POINT(3 4)',4326));

返回5.0.

这是一个耻辱 …

让我们来看看你原来的查询:

select Distance(
  GeomFromText('POINT(8 49)',4326)
)

MS SQL Server中的等效查询:

SELECT (geography::STGeomFromText('POINT(8 49)',4326)).STDistance(geography::STGeomFromText('LINESTRING(8.329969 49.919323,4326));

立即获得正确的结果:105006.59673084648,以米为单位,没有任何额外的brouhaha.

那么你有什么选择Spatialite?

实际上,正如您在评论中所说,一个选项是投影您的几何,并计算这些.对于欧洲,使用SRID 3035也是有道理的(如果你的位置主要在德国,我会考虑SRID 25832).

select Distance(
  Transform(GeomFromText('POINT(8 49)',25832),Transform(GeomFromText('LINESTRING(8.329969 49.919323,25832)
)

返回104969.401605453.

至于您的其他样本(在评论中):

select distance(
  Transform(GeomFromText('POINT(8.328957 49.920900)',3035),Transform(GeomFromText('POINT(8.339665 49.918000)',3035)
)

有一个更简单的方法(如果您有两个POINT,而不是一个POINT和一个LINESTRING):使用您的POINT创建一个LINESTRING并使用GeodesicLength函数,如下所示:

select GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900,8.339665 49.918000)',4326))

按预期返回833.910006698673.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读