首页 / 浏览问题 / 移动GIS / 问题详情
曲线周围任一点在线上的投影
58EXP 2023年07月03日

如下图所示,在这条曲线周围的任意一个点对这条曲线的垂直投影。请问有方法实现吗

2 个回答

您好,您所说投影,是否实际指的是一点到一线的最近距离垂足交点?

如果是的话,通过对点到线最近距离里求算的方式即可得到结果。

矢量线数据集中线数据集存储其实不是我们标准意义上的“曲线”,都是点序的折线端集合。

比如一条曲线“L”实际由节点L1、L2、L3.....组成

现有线外一点P,那么一个实现思路就是,迭代计算P与线 LnLn-1的距离,距离最小的哪条线段的距离出现交点就是结果。

如果您使用的JAVA组件,使用Geometrist.distance迭代计算点到线段L1L2、L2L3、L3L4.....的距离,

得到最小的距离线段,使用Geometrist.computePerpendicularPosition计算可以得到点P到该线段的垂足交点,

使用Geometrist.computePerpendicular计算可以的点P到该线段的垂线。

由此实现任意一点到一曲线的最近距离交点坐标与最近距离连线。

希望可以帮助到您。
于丁
1
10,758EXP 2023年07月03日
您好,可以看看最短距离算子是否符合您的要求;

希望能帮助到您
1,015EXP 2023年07月03日
你好,我是希望找到这个垂直投影点。

您好,这个方法可以获取垂足的坐标

autoComputeProjectPoint

public static boolean autoComputeProjectPoint(Recordset sourceRecordset,
                                              Recordset referenceRecordset,
                                              double maxDistance,
                                              Datasource outputDatasource,
                                              java.lang.String outputDatasetName)

自动计算点到线的垂线。

在结果属性表 outputDatasetName 中,会新建(sourceRecordset_Name)_ID 、(referenceRecordset_Name)_ID 、Distance 、SegmentIndex 、ProjectPoint_X 、ProjectPoint_Y 、Angle等字段。(sourceRecordset_Name)_ID 字段存储sourceRecordset记录集的 SmID, (referenceRecordset_Name)_ID 字段存储referenceRecordset记录集的 SmI, Distance 存储点到线的垂足的距离, SegmentIndex 存储点到线的垂足所在弧段ID(起始值为0),ProjectPoint_X 垂足点的X坐标,ProjectPoint_Y 垂足点的Y坐标,Angle 垂线的角度(与正北方向的夹角)。

参数:

sourceRecordset - 指定的点记录集。

referenceRecordset - 指定的参考线记录集。

maxDistance - 指定的最大查询距离。取值范围为: 大于0 和 -1 。设置为 -1 时,表示不限制最大距离。距离单位与指定的点记录集所属数据集单位相同。

outputDatasource - 结果属性表所在的数据源。

outputDatasetName - 结果属性表名称。

返回:

一个布尔值,表示是否计算成功。如果成功,返回 true,否则返回 false。

...