以米为单位获得距离,而不是以米为单位Spatialite为单位获得距离
技术问答
513 人阅读
|
0 人回复
|
2023-09-14
|
我有以下查询:
; K# G3 s# D8 i2 G% _# X6 z6 b- sselect distance(GeomFromText('POINT4326,GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))这给我0.97度。但是我需要以米为单位,不知道转换成哪个SRID。( h+ h( @% s+ }
有人能给我举个例子,如何获得空间元素的米数?' p; z! K) @$ G1 e/ n+ @
这些职位都在欧洲。
4 [5 X% [9 [8 p( @ 1 b# h/ Z7 Q: z" f; t6 p
解决方案:
: c# w5 u+ ~0 _: a9 M 只需将以度为单位的值乘以11195-这个值是(Earth meanradius)*PI/180-“地球表面上一个大圆度的平均长度(以米为单位)”。- t5 g! G# `6 l# g3 W- {
使用该方法获得的结果是WGS84椭球的测地距离为1%以内。
`* B# o" F0 s: z- r7 L0 _% K编辑7 O* W0 O9 T! H1 i* o( x6 `
好吧,我上面的回答仍然代表着一个问题:如何将弧度转换为米长,但这不是你想问的(应该问的)。
& N0 u! E4 n0 p5 m- P# d我没有专业使用Spatialite,所以我假设你的示例查询确实回到了长度(以度为单位)。这不是真的。2 |8 K h( x; P3 b
不幸的是,看来Spatialite距离不能用地理意义来计算。虽然使用了你的几何图形SRID 4326定义,但仍将其视为在飞机上。 A. a6 ~8 r4 L0 i/ w, P7 S: \
这是一个简单的证明:6 h' n: @1 \8 l* z! ]
select Distance(GeomFromText('POINT4326,GeomFromText('POINT(3 4),4326);返回5.0。
" D5 t' b3 t! M# M* b! g; m这是耻辱 …: P, t( C% U, b% _3 A/ h
让我们来看看你的原始查询:
% i4 v/ R" E, sselect Distance( GeomFromText('POINT GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))MS SQL Server等效查询:
$ \8 ]+ u+ d* B+ P' Y- X" I: q; pSELECT (geography::STGeomFromText('POINT(8 49)',4326)).STDistance(geography::STGeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468),4326);立即为您提供正确的结果:105006.5967308468,以米为单位,无任何额外麻烦。) D/ W% r: j) l% ~
那么,您对Spatialite选择是什么?4 w. L- H4 e2 J: ^# A
的确,正如你在评论中所说,一个选择是投影你的几何形状,然后计算它。在欧洲使用SRID 3035也很有意义(如果你的位置主要在德国,考虑使用SRID
: v# f' z! ^' F% j' \6 w25832)。
* w. a+ e; Q- O% U4 Y* L( \, W/ R$ Jselect Distance( Transform(GeomFromText('POINT Transform(GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)返回104969.401605453。
4 y$ }4 H# R8 i" F! E7 T A. N至于你的其他例子(在注释中):
* [( ?8 F; b8 |4 A$ Mselect distance( Transform(GeomFromText('POINT(8.328957 49.3035),920900)Transform(GeomFromText('POINT(8.339665 49.3035)有一个更简单的方法(如果你有两个)POINT,而不是POINT和LINESTRING):使用POINT创建LINESTRING并使用GeodesicLength函数,如下所示:
2 O: L$ ~; q5 Xselect GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900,8.339665 49.918000)',4326))它833.9100回9100069873。 |
|
|
|
|
|