锡伦 发表于 2023-9-14 12:22:54

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

我有以下查询:
select distance(GeomFromText('POINT4326,GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))这给我0.97度。但是我需要以米为单位,不知道转换成哪个SRID。
有人能给我举个例子,如何获得空间元素的米数?
这些职位都在欧洲。
                                                               
    解决方案:                                                               
                                                                只需将以度为单位的值乘以11195-这个值是(Earth meanradius)*PI/180-“地球表面上一个大圆度的平均长度(以米为单位)”。
使用该方法获得的结果是WGS84椭球的测地距离为1%以内。
编辑
好吧,我上面的回答仍然代表着一个问题:如何将弧度转换为米长,但这不是你想问的(应该问的)。
我没有专业使用Spatialite,所以我假设你的示例查询确实回到了长度(以度为单位)。这不是真的。
不幸的是,看来Spatialite距离不能用地理意义来计算。虽然使用了你的几何图形SRID 4326定义,但仍将其视为在飞机上。
这是一个简单的证明:
select Distance(GeomFromText('POINT4326,GeomFromText('POINT(3 4),4326);返回5.0。
这是耻辱 …
让我们来看看你的原始查询:
select Distance(GeomFromText('POINT 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.5967308468,以米为单位,无任何额外麻烦。
那么,您对Spatialite选择是什么?
的确,正如你在评论中所说,一个选择是投影你的几何形状,然后计算它。在欧洲使用SRID 3035也很有意义(如果你的位置主要在德国,考虑使用SRID
25832)。
select Distance(Transform(GeomFromText('POINT Transform(GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)返回104969.401605453。
至于你的其他例子(在注释中):
select distance(Transform(GeomFromText('POINT(8.328957 49.3035),920900)Transform(GeomFromText('POINT(8.339665 49.3035)有一个更简单的方法(如果你有两个)POINT,而不是POINT和LINESTRING):使用POINT创建LINESTRING并使用GeodesicLength函数,如下所示:
select GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900,8.339665 49.918000)',4326))它833.9100回9100069873。
页: [1]
查看完整版本: 以米为单位获得距离,而不是以米为单位Spatialite为单位获得距离