管线中的净距分析

18 篇文章 2 订阅

完整系统源码地址:https://gitee.com/rzcgis/pipeline

管网系统中涉及到的净距分析,计算两条管线的最小水平、垂直净距。
用鼠标左键在图形窗口点击选择两条管线,系统将自动计算水平距离或垂直距离。

  • 选择两条管线,计算出两条关系的最小水平距离和最小垂直距离。首先需要计算出选择的两条线相距最近的位置分别在哪里。

  • 超图本身是没有计算两个三维线对象的最近点的方法。通过google查询,得到一个方法:
    stackoverflow

但是通过这个方法调用后发现很多时候计算不出来。

NearestPoints(Geometry, Geometry)
//Compute the the nearest points of two geometries. The points are presented in the same order as the input Geometries.
public static Coordinate[] NearestPoints(Geometry g0, Geometry g1)

这个接口返回的是两个点的数组,获取到数组后作为净距计算的两个点,分别计算出水平距离、垂直距离,并标绘在场景中即可。

于是只需要将超图的三维线对象转换为NTS的线对象即可:

GeometryNTS Convert(GeoLine3D geoLine3D)
{
    var lineStrings = new List<LineString>();
    for (var i = 0; i < geoLine3D.PartCount; i++)
    {
        var ls = new List<Coordinate>();
        var partPointsInLine1 = geoLine3D[i];
        for (var j = 0; j < partPointsInLine1.Count; j++)
        {
            var seg1Point = new CoordinateZ() { X = partPointsInLine1[j].X, Y = partPointsInLine1[j].Y, Z = partPointsInLine1[j].Z };
            ls.Add(seg1Point);
        }
        lineStrings.Add(new LineString(ls.ToArray()));
    }
    var result = new MultiLineString(lineStrings.ToArray(), GeometryFactory.Default);
    return result;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷丩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值