如何在ArcGIS Engine的Globe中进行三维定位
来源:互联网 发布:西安网络电视台 编辑:程序博客网 时间:2024/06/05 22:55
有不少初学者想知道ArcGIS Engine的GlobeControl中如何实现类似于ArcGlobe里鼠标三维定位的功能,也就是如何获得鼠标点击位置的X,Y,Z。
这个问题要分两个步骤实现,首先是通过IGlobeDisplay.Locate方法获得屏幕坐标的X,Y对应的地理坐标X,Y,第二步是通过地理坐标X,Y求解到地形影响下对应的高程值。
代码如下:
public static IPoint GlobeToDD(IGlobeDisplay globeDisplay, int X, int Y, bool maxResolution)
{
IPoint point;
System.Object objectOwner;
System.Object objectObject;
globeDisplay.Locate(globeDisplay.ActiveViewer, X, Y, false, true, out point, out objectOwner, out objectObject); //获得屏幕坐标的X,Y对应的地理坐标点point
if (point == null)
{
return null;
}
else
{
if (point.IsEmpty == true)
{
return null;
}
else
{
point.Z = GetGlobeElevation(globeDisplay, point.X, point.Y, maxResolution);//结合地形求解该点对应的Z值
return point;
}
}
}
//结合地形求解该点对应的Z值的函数
public static double GetGlobeElevation(IGlobeDisplay globeDisplay, double longitude, double latitude, bool maxResolution)
{
IUnitConverter unitConverter = new UnitConverterClass();
double doubleZ = 0;
globeDisplay.GetSurfaceElevation(longitude, latitude, maxResolution, out doubleZ);
return unitConverter.ConvertUnits(doubleZ, esriUnits.esriMeters, globeDisplay.Globe.GlobeUnits);//高程值单位转换
}
其实Globe开发中还是有不少细节要注意的,比如获得了对应点的高程值以后,你需要考虑一下返回的是什么单位,默认情况下返回高程单位是千米,示例代码中利用IUnitConverter单位转换类将其转换为米。这里也不建议通过简单的乘以1000的方法进行单位转换,因为不排除该场景之前被设置成米或其他单位,盲目的乘以1000未必稳妥。
- 如何在ArcGIS Engine的Globe中进行三维定位
- ArcGIS三维场景中(Globe)如何获得屏幕所在点的坐标值
- ArcGIS Engine开发的三维小程序
- 如何在ArcGIS中构建生成三维地形地貌场景
- Android入门 在ListView中如何进行精确的定位
- 在ListView中如何进行精确的定位
- Android入门 在ListView中如何进行精确的定位
- Android 在ListView中如何进行精确的定位
- Android入门 在ListView中如何进行精确的定位
- Android入门 在ListView中如何进行精确的定位
- Android入门 在ListView中如何进行精确的定位
- ArcGIS Engine开发的三维小程…
- iOS 如何在 VPN 中进行定位
- 在WPF中使用ArcGIS Engine
- 在Arcgis Engine中使用Arcgis Server的切片地图的一点心得
- 地球,请你不要颤抖!----如何解决ArcGIS Globe视角模式切换产生抖动的问题
- 在ArcGlobe三维环境中进行数据查询2(模型定位显示)
- 在ArcGlobe三维环境中进行数据查询2(模型定位显示)
- vmware server安装oracle rac(二) 之操作系统的配置
- 学生管理系统
- hibernate处理懒加载实例
- Axis2(10):使用soapmonitor模块监视soap请求与响应消息
- JavaWeb 服务启动时,在后台启动加载一个线程。
- 如何在ArcGIS Engine的Globe中进行三维定位
- 设计模式笔记(3)---抽象工厂模式(创建型)
- 【php博一博】php的include和require路径问题
- 动态内存空间初始化方式的比较
- Axis2(9):编写Axis2模块(Module)
- 通过宏代码自动解除excel工作表格保护
- UIImage,CGImage和CGImageRef详解
- Axis2(8):异步调用WebService
- Siverlight 动态生成datagrid复杂表头