2

有人能告诉我为什么这会一直返回度数而不是米数吗?我正在将几何 SRID 转换为 32613,以米为单位。谢谢

SELECT storm_date, hail_size_inches, 
       ST_Distance(
         ST_Transform(geom32613, 32613), 
         ST_SetSRID(
           ST_MakePoint(-104.89907, 39.66643), 
           32613)
       ) distance
FROM hail.hail_swaths
WHERE storm_date >= '2021/06/01'
4

2 回答 2

2

您正在使用经纬度坐标 (4326),就好像它们在32613中一样。

ST_SetSRID(ST_MakePoint(-104.89907, 39.66643), 32613)--> 替换为 ST_Transform(ST_SetSRID(ST_MakePoint(-104.89907, 39.66643), 4326),32613);

还要仔细检查列中存储了哪些值geom32613。如果它们确实在 32613 中,则无需重新投影它们

此投影的中央经线附近 1 度的示例:

SELECT ST_Distance(ST_Transform('SRID=4326;POINT(-105 40)',32613),
jgtest(>    ST_Transform('SRID=4326;POINT(-106 40)',32613));
   st_distance
------------------
 85361.8049211818
于 2021-06-16T20:48:02.970 回答
1

欢迎来到 SO。

您的问题可能在其他地方。ST_Distance使用 SRS 32613 使用两个几何图形返回以米为单位的距离:

SELECT ST_Distance('SRID=32613;POINT(508654.55672303465 4390740.143711988)',
                   'SRID=32613;POINT(508654.55672303480 4390740.143711988)');

     st_distance      
----------------------
 1.74622982740402e-10
(1 row)

它也可以使用ST_Transform

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-104.89910 39.66643)',32613),
    ST_Transform('SRID=4326;POINT(-104.89907 39.66643)',32613));
   st_distance    
------------------
 2.57321026907276
(1 row)

演示:db<>fiddle

您是否正在混合坐标对的顺序?请记住,它是经度,纬度,而不是相反。如果几何图形正确,请发布两个几何图形的 WKT 文字,以便我们重现您的环境。另一种选择是使用geography而不是geometry,它会自动返回以米为单位的结果,但您需要在 lon/lat 坐标系中转换以 32613 编码的几何图形以使投射工作,例如 4326。

编辑:仔细阅读@JGH 的答案——他可能已经找到了真正的问题。您可能使用了错误 SRS 的坐标!

于 2021-06-16T20:28:21.613 回答