gis - Postgis 和 QIGS 长度计算的区别?
问题描述
我刚开始特别学习 PostgreSQL 和 PostGIS,当我决定对我获得的基本数据进行一些尝试时,我尝试遵循宾夕法尼亚州立大学的空间数据库管理简介。在计算了一些 LINESTRING 数据的长度后,我想使用 QGIS 检查结果,这就是有趣的开始。
在这里您可以找到我遵循并稍作修改的 SQL 语句。
https://www.e-education.psu.edu/spatialdb/node/1960
在比较属性表中的结果时,我感到困惑,因为尽管指定了相同的 SRID (2163),但使用 ST_Length 与 QGIS 字段计算器的 $Length 函数的结果不同。
INSERT INTO lines (name, geom)
VALUES ('Holland Tunnel',ST_GeomFromText('LINESTRING(
-74.036486 40.730121,
-74.03125 40.72882,
-74.011123 40.725958)',4269)),
('Lincoln Tunnel',ST_GeomFromText('LINESTRING(
-74.019921 40.767119,
-74.002841 40.759773)',4269)),
('Brooklyn Bridge',ST_GeomFromText('LINESTRING(
-73.99945 40.708231,
-73.9937 40.703676)',4269));
UPDATE TABLE lines SET laenge = ST_Length(ST_Transform(geom, 2163));
结果是:
命令:
A. 荷兰隧道的 ST_Length;林肯隧道;布鲁克林大桥
B. 荷兰隧道的长度;林肯隧道;布鲁克林大桥
A. 2160,344849130080092; 1631,543481596899937; 694,591179476468028
B. 2195,119177785873489; 1656,890881978494235; 701,411239204245931
如果我犯了一个明显的错误,我真的很抱歉,但是 StackOverflow 中的建议并没有为我指明正确的方向,因为它们是关于基于路由的距离的主题,这不适用于这里吗?
最好的问候,并在此先感谢您!
解决方案
使用:
UPDATE lines SET laenge = ST_Length(geom::geography);
我可以重现您发布的 Qgis 结果,这意味着 Qgis 没有使用您指定的投影来计算线条的长度
您可以在 qgis 中阅读有关 $length 的更多信息:
此函数计算的长度同时考虑当前项目的椭球设置和距离单位设置。例如,如果为项目设置了椭球体,则计算的长度将为椭球体,如果未设置椭球体,则计算的长度将是平面的。
以及关于几何和地理之间的区别: postgis docs
推荐阅读
- php - 从第 1 页重定向到第 2 页时,显示第 2 页加载而不是第 1 页加载
- ios - 如何更改小部件中心“添加小部件”按钮的颜色
- python - 在 Opencv、Pillow 中应用透明蒙版时图像颜色发生变化
- java - 如何在没有内存分配的情况下遍历 ArrayBlockingQueue(GC 延迟)
- c# - 拆分包含多个值的字符串
- microsoft-graph-api - 分发和启用邮件的安全组在管理门户上不可见,并且无法通过图形 API 查询
- swift - 如何创建引用外部文件中样本的 CMSampleBuffer?
- python - 在由 numpy 数组创建的曲线中查找弧长
- reactjs - 使用 Electron showOpenDialog 过滤器允许输入用户 *.* 过滤器失败
- django - 我是 cron 和 scrapy 的新手。// cron 在 AWS 中不起作用。(在我当地的环境中很好)