当前位置: 首页 > 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.cnnetsun.cn/news/93616.html

相关文章:

  • 速藏!AI大模型工程师进阶手册:从入门到实战的全攻略
  • NVIDIA Profile Inspector终极优化指南:解锁显卡隐藏性能
  • Ubuntu执行apt-get update报错:W: 无法下载 http://cn.mirrors.ustc.edu.cn/ubuntu/dists/bionic/InRelease 连接失败
  • LobeChat能否对接古籍数据库?中华传统文化智能问答系统
  • 微信多设备登录难题的终极解决方案
  • PlayCover深度解密:在Mac上畅享iOS应用的终极方案
  • RGBD slam
  • BBDown完全指南:轻松下载B站视频的5大实用技巧
  • 历时两年多,“水下大疆”IPO又有新进展! 深之蓝海洋科技股
  • MusicFree插件完全指南:解锁个性化音乐体验的终极教程
  • 显卡驱动终极清理方案:Display Driver Uninstaller完整使用指南
  • 5分钟从入门到精通!PandaWiki:零代码小白的AI编程助手
  • 基于JAVA的图书馆图书资源检索借阅系统
  • 原神自动化脚本7大实用技巧:新手也能快速上手的完整指南
  • 基于Java的奖学金评定评优系统的设计与实现
  • 03-编写和运行Playbook
  • 如何用Locale Emulator实现完美区域语言模拟:新手终极指南
  • Java与操作系统常用命令交互全解析
  • Mac微信防撤回插件WeChatIntercept:终极完整使用指南
  • LobeChat能否实现AI律师函撰写?法律文书自动化产出
  • 基于Python的在线零食购物商城系统的设计与实现
  • 小爱音箱AI升级终极指南:三步打造你的智能语音管家
  • 如何设计吸引眼球的放假通知图片
  • Wallpaper Engine终极下载指南:免费获取创意工坊壁纸的完整教程
  • 终极指南:如何用QtScrcpy实现零延迟Android投屏控制
  • 华为认证的证书含金量到底怎么样?谁适合考?谁没必要浪费时间?
  • 六音音源重生之路:让洛雪音乐重获新生
  • QtScrcpy跨平台投屏终极指南:让你的手机在电脑上“活“起来
  • 鸣潮自动化工具终极指南:5分钟实现全自动游戏体验
  • 百度网盘提取码智能获取工具使用全攻略