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


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

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

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

                Point2D point1 = 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);

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

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

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

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

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

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

                PrjCoordSys prjcoordsys = 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;

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

                PrjCoordSys prjcoordsys = 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)的平方根,计算代码:

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

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

范例效果展示图

红色点:选取的目标点

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

垂直净距:两点的高程差

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

三维场景计算任意两点的空间距离相关推荐

  1. golang计算任意两点间的方位角

    计算任意两点间的方位角 方位角是从某点的指北经线起,依顺时针方向到目标方向线之间的水平夹角(如图所示θ,可以将其看成是指南针所指示的角度),也即是OPN平面与OPQ平面的所构成的二面角大小. 以北极点 ...

  2. 基于百度地图API计算任意两点间的出行距离

    文章目录 前言 使用步骤 1.导入相关包 2.计算小汽车距离 3.计算骑行距离 4.创建主函数 总结 前言 为了方便自己以后查找代码,也不想让自己的桌面变得凌乱不堪,所以将把自己之前的代码保存到这里面 ...

  3. 根据地球上任意两点的经纬度计算两点间的距离

    http://blog.chinaunix.net/u/6776/showart_694778.html 地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米, ...

  4. 计算球面上任意两点间的球面距离(C++实现)

    文章目录 1 预备知识 2 原理描述 3 代码实现 1 预备知识 在求解此问题之前首先要明确一下几点: (1)两点间的球面距离: 球面上两点间的最短距离,即球心与球面上两点所确定的平面与球面相交,得到 ...

  5. plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱

    Matlab在任意两点之间绘制三维圆柱 Matlab在任意两点之间绘制三维圆柱 此函数可能存在一些不足,请多多指教! function plotcylinder(u1,u2,color_a,r) L= ...

  6. JAVA 计算地球上任意两点(经纬度)距离

    /*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...

  7. 由经纬度计算地球上任意两点的距离

    由经纬度计算地球上任意两点的距离 在地球上,城市的地理位置.GPS定位.一些地标的地理位置等是由经纬度给出的,本文主要根据两个地理位置的经纬度,来计算两个地理位置之间的距离. %计算城市间距离 zb= ...

  8. 北京奥林匹克公园三维场景网络发布应用

    针对大数据量场景的实时显示要求,前面章节研究了自动生成三维模型简化版本,优化场景中模型数据布局与改进渲染算法等内容,本章将以前面章节研究结果为依托,结合北京奥林匹克公园建设规划的具体情况,提出建立虚拟 ...

  9. 第六章 北京奥林匹克公园三维场景网络发布应用

    针对大数据量场景的实时显示要求,前面章节研究了自动生成三维模型简化版本,优化场景中模型数据布局与改进渲染算法等内容,本章将以前面章节研究结果为依托,结合北京奥林匹克公园建设规划的具体情况,提出建立虚拟 ...

最新文章

  1. 第四十五课:MVC,MVP,MVVM的区别
  2. spring boot的hello world小实验
  3. php获取linux是几核的,linux下怎么查看机器cpu是几核的
  4. MongoDB与其他数据库的对比
  5. 计算机二级c语言填空题答案唯一吗,计算机二级C语言上机填空题及答案.doc
  6. 内部服务器如何提供访问服务
  7. windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
  8. 按钮先调用页面JS,JS成功才调用后台代码
  9. 生产环境服务器部署kvm虚拟化6,KVM虚拟化平台环境部署
  10. android 连接魅族调试,魅族 PRO6 开启USB调试模式
  11. 怎么写专利更容易通过?
  12. solidworks做动态静力学分析Motion(牛头刨床为例)机械原理课设(停止中断)
  13. 什么是ts(typeScript)
  14. 苹果系统 macOS Mojave 10.14.4上安装 Ubuntu 18.04 双系统
  15. 改进神经网络的学习方法(上)
  16. 8 大主流自媒体平台优缺点分析以及运营建议
  17. BCset BC set how entry is inserted to Database table when activated
  18. Pygame实战之外星人入侵NO.6——外星人登场
  19. 如何在线对图片进行压缩?
  20. 数字化转型实例:国家电网

热门文章

  1. 2019,程序员是如何运用增长思维找到女朋友?
  2. 这6个高清图片素材库,马住,马住~
  3. 电影推荐算法---HHR计划
  4. 用钱去投资,而不是抱着睡大觉(好文章共分享-转载)
  5. 整体大于部分_怦然心动“整体大于部分之和”
  6. 国企招聘:湖北铁路集团2023校园招聘
  7. NMS和Soft-NMS
  8. 苹果内购支付验签(php)
  9. Android手机拍照后存储高清原图
  10. 温度、压力、物位仪表工作原理