三维虚拟电子沙盘数字沙盘态势推演教程第12课

三维虚拟电子沙盘数字沙盘态势推演教程第12课

设置system.ini 如下内容
Server=122.112.229.220
user=GisTest
Password=chinamtouch.com

该数据库中只提供 成都市火车南站附近的数据请注意,104.0648,30.61658

SDK中自带了一套 导航系统,用的是比较详细的导航数据,你们懂的,修正了一下在使用互联网服务器时候的一个BUG,请在使用这部分功能时务必下载上面地址中的核心更新包覆盖。 截图如下:

 

该导航图为切片导航图。年份嘛,你们懂的,另外导航系统为线程异步工作。因需要数据库支持,所以如果你是用的互联网服务器

导航算法得到路径的时间会有所增长,建议是把数据库下载到本地才可以看到真实的导航算法速度。

  导航算法在单独的ShortRoad.dll中(可独立使用,担需要相关数据文件。)导航算法可根据权值进行微调,目前有高速优先和,最短路径两种。

ShortRoad.ShortPath.MyPareant = this.Dispatcher;  //因为导航算法为异步委托+多线程方式完成,需要一个异步委托主对象(静态)。

            ShortRoad.ShortPath.chuslhi(); //初始化数据(静态)

          MyShort = new ShortRoad.ShortPath();

//初始化导航类

            MyShort.OnShortPath += new ShortRoad.ShortPath.PathOver(ShortPath_OnShortPath);

//导航数据回调事件

            MyShort.OnPro += new ShortRoad.ShortPath.ChuLiPro(ShortPath_OnPro);

//导航算法信息事件。

   MyShort.GetShortPath(BeginPoint.X, BeginPoint.Y, EndPoint.X, EndPoint.Y,false);

//获取最短路径:

参数起点经度,纬度,终点经度,纬度,是否启用高速优先。

路径回调事件:
     void ShortPath_OnShortPath(System.Collections.Generic.Dictionary<string, System.Collections.Generic.List<System.Drawing.PointF>> value,System.Windows.Point bx,System.Windows.Point ey)

        {            double Totolength = 0;

            Pareant.PlayPath.Add(new Point3D(BeginPoint.X, BeginPoint.Y, 0));

            foreach (string key in value.Keys)

            {

                Totolength += Convert.ToDouble(key.Split('#')[1].Split(',')[12]);

                foreach (System.Drawing.PointF y1 in value[key])

                {

                    Pareant.PlayPath.Add(new Point3D(y1.X, y1.Y, 0));

                }

            }

}

事件参数1:System.Collections.Generic.Dictionary<string,System.Collections.Generic.List<System.Drawing.PointF>>

存放有所有的路径数据 KEY为路径详细信息内容如下(Value中为经纬度数据):

"清江东路#464400 , 49559714 , 1 , 0302 , 130 , 3 , 2 , 1 ,  , 47106369 , 5880354 , 3 , 0.012 , 1 , 1 ,  , 0 , 1 , 0 , 510105 , 510105 , 1 ,  ,  , 5 ,  , 4 , 3 , 11110001110000000000000000000000 , 0 , 0 ,  ,  ,  , 600 ,  , 1 , 1 ,  , 清江东路"

该KEY描述了这条路的所有信息。可参看下表:

 

下面上代码,先要引用shortroad.dll

 ShortRoad.ShortPath.MyPareant = this.Dispatcher;  //因为导航算法为异步委托+多线程方式完成,需要一个异步委托主对象(静态)。
            ShortRoad.ShortPath.chuslhi(); //初始化数据(静态)
            MyShort = new ShortRoad.ShortPath();
            //初始化导航类
            MyShort.OnShortPath += this.MyShort_OnShortPath;
            //导航数据回调事件
 
 
            MyShort.OnPro += MyShort_OnPro;
            //导航算法信息事件。
 

  #region 导航系统
        System.Windows.Point FirstJW= new System.Windows.Point();
        System.Windows.Point secJW = new System.Windows.Point();
        private void Button_Click_15(object sender, RoutedEventArgs e)
        {
            gis3d.State = GisLib.WindowsMT.GisState.获取经纬度;
            gis3d.GetJWEvent += Gis3d_GetJWEvent2;
                
        }
 
        private void Gis3d_GetJWEvent2(System.Windows.Media.Media3D.Point3D value)
        {
            gis3d.GetJWEvent -= Gis3d_GetJWEvent2;
            FirstJW = new System.Windows.Point(value.X, value.Y);
            gis3d.State = GisLib.WindowsMT.GisState.漫游;
        }
 
        private void Button_Click_16(object sender, RoutedEventArgs e)
        {
            gis3d.State = GisLib.WindowsMT.GisState.获取经纬度;
            gis3d.GetJWEvent += Gis3d_GetJWEvent3;
        }
 
        private void Gis3d_GetJWEvent3(System.Windows.Media.Media3D.Point3D value)
        {
            gis3d.GetJWEvent -= Gis3d_GetJWEvent2;
            secJW = new System.Windows.Point(value.X, value.Y);
            MyShort.GetShortPath(FirstJW.X, FirstJW.Y, secJW.X, secJW.Y, true);
            gis3d.State = GisLib.WindowsMT.GisState.漫游;
        }
 
        private void MyShort_OnPro(string value)
        {
            FirstShort.Content = value;
        }
 
        private void MyShort_OnShortPath(Dictionary<string, List<PointF>> value, System.Windows.Point mbegin, System.Windows.Point mend)
        {
            if (value == null)
                return;
            if (value.Count == 0)
                return;
 
 
 
            List<Point3D> PlayPath = new List<Point3D>();
 
            double Totolength = 0;
 
            // Pareant.PlayPath.Add(new Point3D(BeginPoint.X, BeginPoint.Y, 0));
            foreach (string key in value.Keys)
            {
                if (key.Length > 12)
                {
                    if (key.Split('#').Length >= 2)
                        Totolength += Convert.ToDouble(key.Split('#')[1].Split(',')[12]);
                }
 
                foreach (System.Drawing.PointF y1 in value[key])
                {
                    PlayPath.Add(new Point3D(y1.X, y1.Y, 0));
                }
 
            }
            PlayPath.Add(new Point3D(secJW.X, secJW.Y, 0));
            Random t1 = new System.Random();
 
            System.Windows.Media.Color pp = new System.Windows.Media.Color();
           
                pp = Colors.Red;
 
            //调用SDK提供的画路方法把路画出来
            gis3d.RemoveShotPath("导航路径");
            gis3d.DrawShortPath(PlayPath, "导航路径", pp, true);
 
 
 
        }
        #endregion
 

 效果如下:再三强调数据库配合,所以用互联网服务器的时候。在计算时会比较慢,担因为使用的是线程模式,所以不影响主进程做其它事。SDK自带的drashortpath方法支持自动抽稀,可以显示很长的导航路线。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller&#xff08;控制器存储&#xff09; 1.2.2 Service&#xff08;服务存储&#xff09; 1.2.3 Repository&#xff08;仓库存储&#xff09; 1.2.4 Component&#xff08;组件存储&…

java项目之网络视频播放器(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络视频播放器。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

react经验4:动态组件

什么是动态组件&#xff1f; 在页面的一小块区域切换显示不同的组件 实现方法 1.声明示例组件 //写在component1.tsx中 const Component1()>{return (<div>组件1</div>) } //写在component2.tsx中 const Component2()>{return (<div>组件2</div…

ElementUI tabs标签页样式改造美化

今天针对ElementUI的Tabs标签页进行了样式修改&#xff0c;更改为如下图所属的样子。 在线运行地址&#xff1a;JSRUN项目-ElementUI tabs标签页样式改造 大家如果有需要可以拿来修改使用&#xff0c;下面我也简单的贴上代码&#xff0c;代码没有注释&#xff0c;很抱歉&#x…

【C++】开源:Muduo网络库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

解决gopsutil/disk报 Access is denied的问题

用gopsutil/disk库编写脚本&#xff0c;下列代码执行报错Access is denied&#xff1a; stats, err : disk.IOCounters("C:")if err ! nil {fmt.Println("Error:", err)return 切换到管理员模式仍然报错&#xff0c;开始排查。 1 排查到是引用库中的这部…

TSINGSEE青犀视频安防监控视频平台EasyCVR新增密码复杂度提示

智能视频监控平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTM…

anaconda安装dlib包提示python版本不匹配

事件起因 今天使用conda install -c menpo dlib来安装dlib包时&#xff0c;提示了以下信息 (photo-repaire) PS D:\Bringing-Old-Photos-Back-to-Life-master> conda install -c menpo dlib Collecting package metadata (current_repodata.json): done Solving environme…

pdf压缩到指定大小?纯压缩干货分享

在现代生活中&#xff0c;我们经常需要通过电子邮件或其他方式共享PDF文件&#xff0c;但是较大的PDF文件可能会遇到限制&#xff0c;这时候就需要将PDF文件压缩到指定大小。 很多朋友可能不知道怎么压缩PDF文件&#xff0c;我们可以首先了解下PDF文件压缩的原理&#xff0c;主…

opencv-17 脸部打码及解码

使用掩模和按位运算方式实现的对脸部打码、解码实例 代码如下&#xff1a; import cv2 import numpy as np #读取原始载体图像 lenacv2.imread("lena.png",0) #读取原始载体图像的 shape 值 r,clena.shape masknp.zeros((r,c),dtypenp.uint8) mask[220:400,250:350…

IP xfrm 命令说明1-sa

SA命令 ip xfrm state { add | update } ID [ ALGO-LIST ] [ mode MODE ] [ mark MARK [ mask MASK ] ] [ reqid REQID ] [seq SEQ ] [ replay-window SIZE ] [ replay-seq SEQ ] [ replay-oseq SEQ ] [ flag FLAG-LIST ] [ selSELECTOR ] [ LIMIT-LIST ] [ encap ENCAP ] [ co…

Java spring Aop实战

0目录 Spring AOP 1.实战 1.实战 创建工程和依赖 数据库建表 实体类 Mapper 接口 方法一 方法二 Service包 接口1&#xff1a; 实现接口 Mapper Mapper 1 Mapper 2 配置xml文件 Xml 1 Xml 2 Spring 配置文件 Mybatis配置文件 测试类 数据库结果 …

异地远程访问连接家里的群晖NAS【内网穿透】

文章目录 异地远程访问连接家里的群晖NAS【内网穿透】 异地远程访问连接家里的群晖NAS【内网穿透】 在现代企业中&#xff0c;协同办公和数据共享的作用已经受到广泛认可&#xff0c;而群晖作为小型数据处理中心&#xff0c;也已经进入很多公司&#xff0c;并成为局域网内的数…

Redis复制 (replica)

是什么 官网地址&#xff1a;Redis replication | Redis 其实就是主从复制&#xff0c;Master以写为主&#xff0c;Slave以读为主&#xff0c;当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库。 能干嘛 读写分离容灾恢复数据备份水平扩容支撑高并…

OpenCV buffer转cv::Mat

void convertBuf2Mat(void* input_ptr, vx_uint32 width, vx_uint32 height, cv::Mat& frame) { // 计算亮度通道和色度通道的大小 size_t y_size width * height; size_t uv_size y_size / 2; // 创建一个只包含亮度通道的 cv::Mat 对象 cv::Mat y_chan…

罗马数字转整数

题记&#xff1a; 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符------------数值 I---------------->1 V--------------->5 X--------------->10 L--------------->50 C--------------->100…

听GPT 讲K8s源代码--pkg(七)

k8s项目中 pkg/kubelet/config&#xff0c;pkg/kubelet/configmap&#xff0c;pkg/kubelet/container&#xff0c;pkg/kubelet/cri 这几个目录处理与 kubelet 配置、ConfigMap、容器管理和容器运行时交互相关的功能。它们共同构成了 kubelet 的核心功能&#xff0c;使其能够在 …

JAVA解析EXCEL(JExcelAPI,POI,EasyExcel)

前言 文章目录 前言JExcelAPIDemo POIHSSFWorkBookXSSFWorkBookDemo SXSSFWorkBookDemo XSSFReaderDemo EasyExcelDemo demo代码&#xff1a;https://github.com/RwTo/excel-demo JAVA解析Excel 一般有三种方式 JExcelAPI POI EasyExcel JExcelAPI 官网&#xff1a;https://je…

Vben Admin学习笔记

Modal 弹窗 modal弹窗一般作为单文件组件被引用&#xff0c;下面是两段示例代码&#xff1a; 弹窗文件 Modal.vue // Modal.vue <template><BasicModal v-bind"$attrs" title"Modal Title" :helpMessage"[提示1, 提示2]">Modal I…

【PostgreSQL内核学习(九)—— 查询执行(数据定义语句执行)】

数据定义语句执行 概述数据定义语句执行流程执行示例 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL…