我有以下查询:
select distance(GeomFromText('POINT(8 49)',4326),GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))
这给了我0.97度。 但我需要它在米,不知道要转换到哪个SRID。
有人可以给我一个例子,如何得到的结果在spatialite米?
位置都在欧洲。
我有以下查询:
select distance(GeomFromText('POINT(8 49)',4326),GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))
这给了我0.97度。 但我需要它在米,不知道要转换到哪个SRID。
有人可以给我一个例子,如何得到的结果在spatialite米?
位置都在欧洲。
只是乘度值111195
-此值(Earth mean radius)*PI/180
-那就是“意味着在地球表面米一个大圆程度的长度”。
使用这种方法得到的结果是对于WGS84椭球的测地距离的1%以内。
编辑
OK,我的回答上述还是主张的问题是:“如何弧转换度到米长度”,但是,这不是你问的问题(应该问)。
我没用过Spatialite专业,所以我认为您的示例查询确实返回“长度度”。 这不是真的。
不幸的是,似乎Spatialite无法计算“地理意义上的”距离。 尽管你的几何形状与SRID 4326定义的,它会将它们,好像他们是在一个平面上。
这里有一个简单的证明:
select Distance(GeomFromText('POINT(0 0)',4326),GeomFromText('POINT(3 4)',4326));
返回5.0
。
这是一个耻辱 ...
让我们来看看你的原始查询:
select Distance(
GeomFromText('POINT(8 49)',4326),
GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326)
)
在MS SQL Server中的一个等效查询:
SELECT (geography::STGeomFromText('POINT(8 49)', 4326)).STDistance(geography::STGeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)', 4326));
立即让你得到正确的结果: 105006.59673084648
,以米为单位,且无任何额外的骚动。
那么,什么是与Spatialite你的选择?
事实上,正如你在评论说,一个选项是项目的几何形状,并计算这些。 使用SRID 3035欧洲有道理,太(如果你的地点大多是在德国,我会考虑SRID 25832)。
select Distance(
Transform(GeomFromText('POINT(8 49)',4326),25832),
Transform(GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326),25832)
)
返回104969.401605453
。
至于你的其他样品(在评论):
select distance(
Transform(GeomFromText('POINT(8.328957 49.920900)',4326),3035),
Transform(GeomFromText('POINT(8.339665 49.918000)',4326),3035)
)
有一个简单的方法来做到这一点(如果你有两个点,而不是一个点和LINESTRING):创建一个LINESTRING与您的积分,并使用GeodesicLength
功能,如下所示:
select GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900, 8.339665 49.918000)',4326))
它返回833.910006698673
,符合市场预期。
在SpatiaLite的功能的参考指南 ,你可以看到有两个版本的Distance()
函数。 一个只需要两个参数,并返回CRS单位的距离,其他3个参数和返回米的距离。
要获得米的距离,简单地传递一个第三个参数的距离:
sqlite> select Distance(MakePoint(0, 0), MakePoint(3, 4));
5.0
sqlite> select Distance(MakePoint(0, 0), MakePoint(3, 4), 1);
554058.923752633