蒂恩空间两点坐标距离公式(两点之间的距离公式

阅读 148 2022-01-05 11:15

三维场景计算任意两点的空间距离

在iDesktop中要知道场景中两点间的空间距离可以通过iDesktop自带的量算工具去获取到,在iObjects中也可以通过Action3D.MeasureDistance去量算出两点之间的空间距离,但是二者共同点是都需要通过鼠标点击才能获取到两点之间的空间距离,这样的方式在很多时候都不太方便。比如我要知道场景中某条三维线有多长,通过鼠标点击去测量的话,很容易因为鼠标点击位置不准确而造成的量算结果有一定的误差。下面我们将介绍两种方式来计算三维场景中任意两个三维点的空间距离,只需要知道两个三维点的X,Y,Z坐标即可,使用的开发工具为SuperMapiObjects .NET。

三维场景计算任意两点的空间距离

计算两个三维点间的空间距离问题在于三维点的X,Y坐标值单位通常是度,Z坐标值单位通常是米,两个单位之间怎么去统一计算,下面我们介绍的两种方式可以轻松解决这个问题。

方法一用测地线的接口来计算两个三维点的空间距离

两点间的测地线距离是考虑了参考椭球体的曲率得到的,是一条“曲线”。Geometrist.ComputeGeodesicDistance()方法便是用来计算地球表面两点间的测地线距离,由于三维点有不同的高程,所以两个三维点的空间距离=(测地线距离^2+两点高程差^2)的平方根。在使用的测地线接口的时候需要传入构成测地线的经纬度坐标二维点串,二维点的坐标可以从三维的坐标中去获取出来,还需要传入参考椭球体的长半轴和扁率,我们将使用WGS1984坐标系的参考椭球体长半轴和扁率,直接上代码:

Point2Dpoint1 = new Point2D(); point1.X = point3ds[0].X; point1.Y = point3ds[0].Y; Point2D point2 = new Point2D(); point2.X = point3ds[1].X; point2.Y = point3ds[1].Y; point2ds.Add(point1); point2ds.Add(point2); double S_Distance =Geometrist.ComputeGeodesicDistance(point2ds, 6378137,0.00335281066474748);

然后再计算出三维点之间的空间距离:

doubleK_Distance =Math.Pow((S_Distance * S_Distance + H * H),0.5);

完整范例链接:https://pan.baidu.com/s/1c1693Yo提取码:tcof

方法二通过投影转换来计算两个三维点的空间距离

投影转换是将经纬度坐标系下点的坐标转换到目标投影坐标系下,从而得到以米为单位的平面投影坐标系下点的坐标。首先从三维点中取出X,Y坐标的值来构造二维点,再将构造的二维点的投影转换到WGS1984TransverseMercator投影坐标系下,再用转换好之后的点坐标构造两个点对象,使用Geometrist.Distance()方法计算出两个点对象之间的距离。

目标投影坐标系的中央经线是由三维点X值(经度)计算得到的,设置如下:

PrjCoordSysprjcoordsys = new PrjCoordSys(); double S_Longitude = (point3ds[1].X + point3ds[0].X) /2; int D = (int)((S_Longitude + 6) / 6); int centralmeridian = D * 6 - 3; GeoCoordSys geocoordsys = new GeoCoordSys(); geocoordsys.Type = GeoCoordSysType.Wgs1984; prjcoordsys.GeoCoordSys = geocoordsys; Projection projection = new Projection(); projection.Type = ProjectionType.TransverseMercator; prjcoordsys.Projection = projection; PrjParameter prjparameter = new PrjParameter(); prjparameter.CentralMeridian = centralmeridian; prjparameter.FalseEasting = 500000; prjparameter.ScaleFactor = 0.9996; prjcoordsys.PrjParameter = prjparameter;

投影转换目标点,计算平面投影坐标系下两点的距离:

PrjCoordSysprjcoordsys = this.GetPrjCoordSys(); bool a =CoordSysTranslator.Forward(point2ds,prjcoordsys); GeoPoint geopoint1=new GeoPoint(point2ds[0]); GeoPoint geopoint2=new GeoPoint(point2ds[1]); double S_Distance =Geometrist.Distance(geopoint1,geopoint2);

两个三维点的空间距离=(平面投影坐标系下两点距离^2+两点高程差^2)的平方根,计算代码:

doubleK_Distance = Math.Pow((S_Distance * S_Distance + H * H), 0.5);

完整范例链接:http://pan.baidu.com/s/1o7PlUAI提取码:t346

范例效果展示图

三维场景计算任意两点的空间距离

红色点:选取的目标点

水平净距:不考虑高程差时两点之间的距离

垂直净距:两点的高程差

空间距离:两点在三维空间的距离

热门文章

问答 热点 前沿 观点 视觉 谣言粉碎机 果然 方式

©2022-01-05 11:15 德甲足球/温州/德甲足球 版权所有;

违法和不良信息举报邮箱:    举报电话:110    网上有害信息举报专区    信息举报专区