首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁能告诉我为什么这会一直返回度数而不是米?

谁能告诉我为什么这会一直返回度数而不是米?
EN

Stack Overflow用户
提问于 2021-06-17 03:15:34
回答 2查看 45关注 0票数 2

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

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

发布于 2021-06-17 04:48:03

您正在使用经度坐标(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度为例:

代码语言:javascript
复制
SELECT ST_Distance(ST_Transform('SRID=4326;POINT(-105 40)',32613),
jgtest(>    ST_Transform('SRID=4326;POINT(-106 40)',32613));
   st_distance
------------------
 85361.8049211818
票数 2
EN

Stack Overflow用户

发布于 2021-06-17 04:28:22

欢迎来到SO。

你的问题可能出在别的地方。使用SRS32613的两个几何形状的ST_Distance返回以米为单位的距离:

代码语言:javascript
复制
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

代码语言:javascript
复制
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,后者将自动返回以米为单位的结果,但您需要在经度/纬度坐标系中转换以32613编码的几何图形,以使强制转换工作,例如4326。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68008785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档