可以计算一条线上两个点的中点吗?两个点必须是线上的点吗?

简介: 可以计算一条线上两个点的中点吗?两个点必须是线上的点吗?

是的,可以使用PostgreSQL中的ST_LineSubstring和ST_LineInterpolate函数来计算一条线上两个点的中点。

假设你有一个线段对象(line)和一个起点(start_point)和一个终点(end_point),你可以使用以下查询来计算这两个点的中点:

SELECT ST_AsText(
    ST_LineInterpolatePoint(
        line,
        ST_LineLocatePoint(line, start_point) + (ST_LineLocatePoint(line, end_point) - ST_LineLocatePoint(line, start_point)) / 2
    )
);

在这个查询中,ST_LineLocatePoint函数用于获取一个点在线段上的位置(以线段的总长度的比例表示)。然后,我们计算起始点和终点位置的平均值,并使用ST_LineInterpolatePoint函数来获取该位置对应的点,即中点。最后,ST_AsText函数将结果转换为文本格式。

请注意,这个查询假设你的线段对象是一个几何类型(例如LINESTRING或MULTILINESTRING),并且你已经正确地定义了起点和终点。

不,两个点不必是线上的点。在PostgreSQL中,你可以使用ST_LineSubstring和ST_LineInterpolatePoint函数来计算任意两点之间的线段的中点,而不仅仅是在线段上的点。

假设你有两个点对象(point1)和(point2),你可以使用以下查询来计算它们之间的线段的中点:

SELECT ST_AsText(
    ST_LineInterpolatePoint(
        ST_MakeLine(point1, point2),
        0.5
    )
);

在这个查询中,ST_MakeLine函数用于创建一个从point1到point2的线段对象。然后,我们使用ST_LineInterpolatePoint函数来获取该线段上位置为0.5(即中间位置)的点,即中点。最后,ST_AsText函数将结果转换为文本格式。

请注意,这个查询假设你的点对象是几何类型(例如POINT或MULTIPOINT),并且你已经正确地定义了这两个点。

目录
相关文章
|
机器学习/深度学习 人工智能 缓存
走近高德驾车ETA(预估到达时间)
ETA(Estimated Time of Arrival),即预估到达时间,指的是用户在当前时刻出发按照给定路线前往目的地预计需要的时长。如何准确地预估ETA对于高德地图的诸多业务板块都起到至关重要的作用。
走近高德驾车ETA(预估到达时间)
|
城市大脑 自动驾驶 Cloud Native
和400万客户一起,画出“千行百业云上图”
和400万客户一起,画出“千行百业云上图”
169 0
《城市绿色出行指数白皮书》——附录D :碳排放因子修正
《城市绿色出行指数白皮书》——附录D :碳排放因子修正
198 0
|
SQL 人工智能 安全
把数据中心放到北极圈,也许都没这条绿色计算之路收益高
把数据中心放到北极圈,也许都没这条绿色计算之路收益高
129 0
|
存储 运维 监控
如何定位线上问题?
「你是怎么定位线上问题的?」 这个面试题我在两年社招的时候遇到过,前几天面试也遇到了。我觉得我每一次都答得中规中矩,今天来梳理复盘下,下次又被问到的时候希望可以答得更好。
155 0
自动控制基础基础实验-----典型环节的电路模拟与仿真(积分 惯性 比例 积分比例 ... ... )
通过各种典型环节[比例( p )环节、惯性环节、比例微分(PD)环节、比例积分(PI) 环节、积分(I)环节、比例积分微分(PID)环节]的设计,熟悉MATLAB软件仿真开发环境,掌握典型环节设计的流程,完成各种典型环节软件仿真模拟电路的阶跃特性测试,并研究参数变化对典型环节阶跃特性的影响。
665 1
自动控制基础基础实验-----典型环节的电路模拟与仿真(积分 惯性 比例 积分比例 ... ... )
|
Arthas 弹性计算 监控
走完线上 BUG 定位最后一公里
因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下。是否有简单快捷的办法呢?
3826 9
走完线上 BUG 定位最后一公里