回答

收藏

以米为单位获得距离,而不是以米为单位Spatialite为单位获得距离

技术问答 技术问答 359 人阅读 | 0 人回复 | 2023-09-14

我有以下查询:- A  h; @7 e2 v5 F# Z
select distance(GeomFromText('POINT4326,GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))这给我0.97度。但是我需要以米为单位,不知道转换成哪个SRID。
: q4 R6 @$ S) I4 K( a3 n! l/ v8 X有人能给我举个例子,如何获得空间元素的米数?
1 ^" ^8 \' d* \, a6 F这些职位都在欧洲。8 `) a& @% q% s  f1 Y8 l" r. T
                                                               
, w( v4 t+ y# R* E0 n    解决方案:                                                                : V: y' A7 [' L1 v. O9 q
                                                                只需将以度为单位的值乘以11195-这个值是(Earth meanradius)*PI/180-“地球表面上一个大圆度的平均长度(以米为单位)”。9 ^$ H1 d+ I6 k
使用该方法获得的结果是WGS84椭球的测地距离为1%以内。
9 Z# N/ g0 O' `! Q' w9 t编辑" H3 ~8 L7 M8 ^7 @" n
好吧,我上面的回答仍然代表着一个问题:如何将弧度转换为米长,但这不是你想问的(应该问的)。; f& s7 a9 x1 H2 M. [# r
我没有专业使用Spatialite,所以我假设你的示例查询确实回到了长度(以度为单位)。这不是真的。( Q0 E: V: K! M' A6 c( d6 z( A
不幸的是,看来Spatialite距离不能用地理意义来计算。虽然使用了你的几何图形SRID 4326定义,但仍将其视为在飞机上。
( m+ }2 U0 T; D( J) g. Y) J  J3 M这是一个简单的证明:
/ D) v2 D3 y% Z5 W% Vselect Distance(GeomFromText('POINT4326,GeomFromText('POINT(3 4),4326);返回5.0。7 j7 q/ a" p- h4 H" x3 @# `- G1 O, c
这是耻辱 …0 I0 q9 \* Z$ S
让我们来看看你的原始查询:
) y+ I5 q( r3 E1 {: S, R, s# gselect Distance(  GeomFromText('POINT GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))MS SQL Server等效查询:" i3 r- V( B9 Z4 `/ j
SELECT (geography::STGeomFromText('POINT(8 49)',4326)).STDistance(geography::STGeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468),4326);立即为您提供正确的结果:105006.5967308468,以米为单位,无任何额外麻烦。
5 n/ B! m1 j7 d  E那么,您对Spatialite选择是什么?1 k* T6 q/ ]! X1 D
的确,正如你在评论中所说,一个选择是投影你的几何形状,然后计算它。在欧洲使用SRID 3035也很有意义(如果你的位置主要在德国,考虑使用SRID
3 [5 b& g9 C  g1 h25832)。$ M* J9 \% V: i* V3 C7 Q9 g
select Distance(  Transform(GeomFromText('POINT Transform(GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)返回104969.401605453。
( P9 ^$ x2 [3 J* G6 z至于你的其他例子(在注释中):3 v* g. e( `, R3 T# \
select distance(  Transform(GeomFromText('POINT(8.328957 49.3035),920900)Transform(GeomFromText('POINT(8.339665 49.3035)有一个更简单的方法(如果你有两个)POINT,而不是POINT和LINESTRING):使用POINT创建LINESTRING并使用GeodesicLength函数,如下所示:
0 m* F, e" D  W- h& gselect GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900,8.339665 49.918000)',4326))它833.9100回9100069873。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则