当前位置: 首页 > news >正文

MapGIS Objects Java三维地形如何实现坡度分析

三维地形如何实现坡度分析

一、介绍

MapGIS Objects SDK: 是一款组件式地理信息开发平台,提供全空间数据存储、管理、显示、编辑、查询、分析、制图输出等二三维一体化核心 GIS 功能,提供 C++、.NET、Java、Python 等开发资源,接口简单易用,性能优越,具备跨平台开发能力。

本篇内容将知道您如何使用MapGIS Objects SDKMapGIS Desktop SDK实现在三维场景中如何实现模型的捕捉功能。

二、开发环境

软件版本下载地址说明
MapGIS 10 x64 All In One SDK for Windows10.7开发包下载地址MapGIS 提供的一款地理信息开发平台,包含 MapGIS Objects Java 面向 Java 开发环境的跨平台组件式 GIS 开发资源。
MapGIS 开发授权\开发授权下载地址MapGIS 针对开发者提供开发授权,下载开发包并安装后,还需要获取开发授权才能正常使用。
IntelliJ IDEA2020.3 以上版本IDEA 下载地址一款适用于 Java 专业开发的集成开发环境(IDE)。
JDK1.8JDK 下载地址JDK 是 Java 语言的软件开发工具包,JDK 是整个 java 开发的核心,它包含了 JAVA 的运行环境(JVM+Java 系统类库)和 JAVA 工具。

三、应用场景及功能实现

坡度是指坡面的垂直高度与对应水平距离的比值,用于表示地面倾斜程度的一个重要地理参数。坡度值越大,表明地势越陡峭;反之,则表示地形较为平缓。基于 DEM 基础上进行坡度计算,是 GIS 空间分析的常用功能。本文将利用 MapGIS 二次开发库提供的 PolygonProjector 和 G3DBaseTool 对象实现交互工具在三维场景对 DEM 数据进行坡度分析功能。相关 API 的详细说明可参考MapGIS Objects Java 的开发入门文档,api 文档参考 MapGIS Objects Java API。

1、构建坡度坡向分析工具类(继承自 G3DTool)

publicclassSlopeAspectAnalysisToolextendsG3DBaseTool{privateinttoolType=1;//1-坡度;2-坡向privatePolygonProjectorpp;/** * @param sceneControl * @param type 1-坡度分析;2-坡向分析 */publicSlopeAspectAnalysisTool(SceneControlsceneControl,inttype){super(sceneControl);Scenescene=sceneControl.getMapGISScene();Rect3Drect3D=newRect3D();scene.getExtent(rect3D);this.pp=newPolygonProjector(this.sceneControl.getNativeHandle(),(float)rect3D.getZMax());this.toolType=type;}@Overridepublicvoidstart(){super.start();}@Overridepublicvoidstop(){super.stop();}@OverridepublicbooleanonMouseDown(MouseEvente){returnsuper.onMouseDown(e);}@OverridepublicbooleanonMouseUp(MouseEvente){returnsuper.onMouseUp(e);}@OverridepublicbooleanonMouseDragged(MouseEvente){returnsuper.onMouseDragged(e);}}

2、重载实现 G3DTool 相关方法

publicclassSlopeAspectAnalysisToolextendsG3DBaseTool{privateinttoolType=1;//1-坡度;2-坡向privatePolygonProjectorpp;/** * @param sceneControl * @param type 1-坡度分析;2-坡向分析 */publicSlopeAspectAnalysisTool(SceneControlsceneControl,inttype){super(sceneControl);Scenescene=sceneControl.getMapGISScene();Rect3Drect3D=newRect3D();scene.getExtent(rect3D);this.pp=newPolygonProjector(this.sceneControl.getNativeHandle(),(float)rect3D.getZMax());this.toolType=type;}@Overridepublicvoidstart(){this.pp.startSlopeAspec(this.toolType==1,SelectOperateType.Rectangle);super.start();}@Overridepublicvoidstop(){super.stop();this.pp.stopSlopeAspec();}@OverridepublicbooleanonMouseDown(MouseEvente){this.sceneControl.enableInputTool(false);if(e.getButton()==MouseButton.PRIMARY){this.pp.slopeOperate(MouseOperateType.LButtonDown,e.getX(),e.getY());}elseif(e.getButton()==MouseButton.SECONDARY){this.pp.slopeOperate(MouseOperateType.RButtonDown,e.getX(),e.getY());}returnsuper.onMouseDown(e);}@OverridepublicbooleanonMouseUp(MouseEvente){this.sceneControl.enableInputTool(true);if(e.getButton()==MouseButton.PRIMARY){this.pp.slopeOperate(MouseOperateType.LButtonUp,e.getX(),e.getY());}returnsuper.onMouseUp(e);}@OverridepublicbooleanonMouseDragged(MouseEvente){this.pp.slopeOperate(MouseOperateType.MouseMove,e.getX(),e.getY());returnsuper.onMouseDragged(e);}}

3、启动坡度坡向分析工具

SlopeAspectAnalysisTooltool=newSlopeAspectAnalysisTool(sceneControl,1);sceneControl.setActiveTool(tool);tool.start();

) == MouseButton.PRIMARY) {
this.pp.slopeOperate(MouseOperateType.LButtonDown, e.getX(), e.getY());
} else if (e.getButton() == MouseButton.SECONDARY) {
this.pp.slopeOperate(MouseOperateType.RButtonDown, e.getX(), e.getY());
}

return super.onMouseDown(e); } @Override public boolean onMouseUp(MouseEvent e) { this.sceneControl.enableInputTool(true); if (e.getButton() == MouseButton.PRIMARY) { this.pp.slopeOperate(MouseOperateT
http://www.jsqmd.com/news/101312/

相关文章:

  • windows11启动进入grub命令行解决方法
  • LobeChat能否对接Zoom?会议中实时AI字幕生成实验
  • Linux系统编程——线程
  • LobeChat能否支持神经渲染?虚拟形象动态表情生成
  • 绝区零游戏自动化终极指南:10分钟从小白到高手
  • Molecular Operating Environment (MOE) 终极完整安装指南:快速掌握药物设计利器
  • 图片转文字技术(三)提升图片转文字与AI翻译准确率的实用技巧与技术实践
  • 基于Java的奖学金评定评优系统的设计与实现
  • 今日总结2
  • 明日提醒
  • FeHelper前端工具终极指南:快速上手的完整教程
  • 汇川中型 PLC 纯 ST 语言双轴同步设备开发:初学者的友好指南
  • FeHelper:重新定义你的前端开发效率边界
  • LobeChat用户故事征集:分享你的创新应用场景
  • 12-16午夜盘思
  • MusicFree终极定制指南:3步打造你的专属音乐宇宙
  • Kafka单机搭建(二)
  • 【开题答辩全过程】以 基于Android的环卫人员管理系统设计与实现为例,包含答辩的问题和答案
  • BGE-Large-zh-v1.5终极部署指南:3步搞定文本嵌入模型实战
  • Mac微信防撤回插件WeChatIntercept:终极完整使用指南
  • 2.2新一代信息技术及应用
  • 【开题答辩全过程】以 高校电子教室在线考试系统为例,包含答辩的问题和答案
  • 无奖
  • FeHelper:颠覆传统的前端开发效率倍增器
  • C++ asio网络编程(2) buffer同步读写
  • Video DownloadHelper CoApp 深度解析:视频下载增强工具完整配置方案
  • pip - pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 200000
  • Flutter 进阶:构建高性能跨平台应用的实践与技巧
  • BetterNCM 安装器完整使用指南:从零开始掌握插件管理
  • 阴阳师百鬼夜行效率提升终极指南:5个自动化技巧快速掌握