三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课

三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课

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

 在SDK中为了方便三方数据的接入,引入了一个用户层接口。主要是完成三方数据的接入,含动态数据(如GPS),用户可自行控制UI及UI的交互,可实现如滴滴打车的车辆控制,公安应用中的UI按属性控制显示,并且该用户层的显示是由核心部分直接调用,在需要显示数据的调用下面的接口,这样可防止因为用户是从外部接入。而卡顿,影响用户使用体验。而UI的回收是由核心负责,不需要用户干预,二次开发时用户只用关心自己要承现的UI,及UI的交互:

 

     public interface UserGisData : INotifyPropertyChanged
    {
 
 
        NewGisBiao.Base.JunBiao.CenteType BiaoCenterType
        {
            get;  //这个UI对象的中心点类型
        }
 
        string LayName {
            get; //用户层名称
         
        }
 
     
 
 
        /// <summary>
        /// 标签整体缩放
        /// </summary>
        double  MScal
        {
            get; //UI整体缩放参数
        }
 
 
        Dictionary <string, GisLib.DrawPointData> DrawObject
       {
           get;  //访问当前已经存在UI对象
           set;
       }
 
        /// <summary>
        /// 是否显示
        /// </summary>
       bool ISShow
       {
           get;  //隐藏和显示该用户层
           set;
       }
 
        /// <summary>
        /// 最小显示层
        /// </summary>
       int MinZoom
       {
           get;  //该用户层的最小显示层
           set;
       }
 
        /// <summary>
        /// 最大显示层
        /// </summary>
       int MaxZoom
       {
           get; //该用户层的最大显示层
           set;
       }
 
 
 
 
        /// <summary>
        /// 返回一个图标表示这个层的图标
        /// </summary>
        System.Windows.Media.Imaging.BitmapImage MICon
        {
            get;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="centerx">查询中心点经度(如果没有会传入null) </param>
        /// <param name="centery">查询中心点纬度(如果没有会传入null)</param>
        /// <param name="info">查询的信息(如果是全部会传入*)</param>
        /// <param name="length">范围(如果没有会传入null)</param>
        /// <returns></returns>
        Dictionary<SechData, Point> SechPro(double centerx, double centery, string info, double length);
 
        Dictionary<SechData, Point> SechForLine(List<Point> Line, string info, double length);
        Dictionary<SechData, Point> SechForRect(List<Point> Line, string info, double length);
 
        /// <summary>
        /// 画用户物体
        /// </summary>
        /// <param name="centerx"></param>
        /// <param name="centery"></param>
        /// <returns></returns>
        List<DrawPointData> DrawData(double centerx, double centery);
 
 
        void OnUserBiaoClick(DrawPointData va); //UI点击的事件,现已作废,UI可自行响应所有交互事件
 
 
 
    }

List<DrawPointData> DrawData(double centerx, double centery); 为该接口的核心部分,传入参数为当前地图的中心 点经纬度,根据这个经纬度,二次开发用户需要从 数据(如mysql或者其它三方数据中)查询当前需要显示范围的 数据,并连通UI一起返回:例子如下:

 List<DrawPointData> UserGisData.DrawData(double centerx, double centery)
        {
 
            if (Con == null)
            {
                Con = new MySql.Data.MySqlClient.MySqlConnection(IniRead.IniReadWrite.GetMySqlDataConnstring());
                Con.Open();
            }
 
            int mmzoom = IniRead.IniReadWrite.MPareant.Zoom;
            int drawfanwei = 5;
            double bx, by, ex, ey;
            Int64 cx, cy;
            NewGisBiao.Help.MathHelp.MyConver(centerx, centery, out cx, out cy, (int)mmzoom - 1);
            NewGisBiao.Help.MathHelp.MyConver2(cx - drawfanwei, cy - drawfanwei, (int)mmzoom - 1, out bx, out by);
            NewGisBiao.Help.MathHelp.MyConver2(cx + drawfanwei, cy + drawfanwei, (int)mmzoom - 1, out ex, out ey);
            string t6 = " where (jingdu > " + bx.ToString() + " and jingdu<"
                               + ex.ToString() + " and weidu > "
                               + ey.ToString() + " and weidu < "
                               + by + ")";
            MySqlCommand cmd = Con.CreateCommand();
            cmd.CommandText = "select * from gw_shigu" + t6;
            MySqlDataReader read = cmd.ExecuteReader();
 
            try
            {
 
 
                if (read.HasRows)
                {
                    List<DrawPointData> y1 = new List<DrawPointData>();
                    while (read.Read())
                    {
                        if (MData.ContainsKey(read["number"].ToString() + "A") == false)
                        {
 
                            DrawPointData u1 = new DrawPointData();
 
                            u1.ISAutoAngle = true;
                            u1.ISAutoScal = true;
                            u1.MaxZoomScal = 15;
 
 
                            u1.ID = read["number"].ToString() + "A";
                            u1.MPoint = new Point(Convert.ToDouble(read["jingdu"].ToString()), Convert.ToDouble(read["weidu"].ToString()));
                            Image h1 = new Image();
                            u1.Hi = 0.05;
                            h1.Width = 45;
                            h1.Height = 70;
                            if (read["sgtype"].ToString().Trim() == "重伤")
                                h1.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "\\res\\重伤.png"));
                            if (read["sgtype"].ToString().Trim() == "轻伤")
                                h1.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "\\res\\轻伤.png"));
                            if (read["sgtype"].ToString().Trim() == "无伤")
                            {
                                BitmapImage u11 = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "\\res\\无伤.png"));
                                h1.Source = u11;
                                h1.Width = u11.Width;
                                h1.Height = u11.Height;
                            }
                            h1.Stretch = Stretch.Fill;
 
 
                            h1.Tag = read["number"].ToString() + ";" + u1.MPoint.X.ToString() + ";" + u1.MPoint.Y.ToString();
                            u1.UIObject = h1;
                            y1.Add(u1);
                        }
                    }
                    read.Close();
                  
                    return y1;
                }
                read.Close();
                return null;
            }
            catch
            {
                read.Close();
                return null;
            }
 
 
 
 
        }

上面的方法主要是从接口返回的中心点得到一 个范围内的用户数据,并根据用户的属性创建不同的UI,

这是根据车辆性制不同显示的不同车辆图标,也可以像下面这样,显示一些统计数据:

 

可以充分发挥WPF在UI上的优势,做出漂亮的标签

 

当UI显示完成后还可以通过调用:

 

 /// <summary>
        /// 更新用户层里的UI对象
        /// </summary>
        /// <param name="Layes">用户层名称</param>
        /// <param name="ID">用户层ID</param>
        /// <param name="NewPoint">新的经纬度</param>
        /// <param name="Angle">新的角度</param>
        /// <param name="NewUI">新的UI</param>
        /// <param name="Ami">是否动画</param>
        /// <returns></returns>
        public bool UpdateUserObject(string Layes, string ID, Point NewPoint, double Angle, FrameworkElement NewUI, bool Ami = true)

接口对已经有的UI进行更新,可实现如滴滴打车一样的车辆动态效果,该接口只对已经承现的UI有用。
————————————————

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

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

相关文章

Python豆瓣爬虫(最简洁的豆瓣250爬虫,随机选择电影)

案例背景 电影才是世界艺术&#xff0c;所以我一直想看完豆瓣250&#xff0c;那么就重新拾起我的爬虫知识。 以前刚学爬虫那啥也不会&#xff0c;python语法都没弄清楚&#xff0c;现在不一样了&#xff0c;能用最为简洁的代码写出爬虫250的代码。 代码实现 导入包&#xff…

clickhouse ssb-dbgen数据构造 及 clickhouse-benchmark简单压测

一、 测试数据构造 1. 数据样例 官方文档有给出一批数据样例。优点是比较真实&#xff0c;缺点是太大了&#xff0c;动辄上百G不适合简单小测试 Anonymized Yandex.Metrica DatasetStar Schema BenchmarkWikiStatTerabyte of Click Logs from CriteoAMPLab Big Data Benchma…

Jenkins自动化部署Vue项目

1、新建item&#xff0c;选择 Freestyle project 2、源码管理选择git&#xff0c;输入git仓库地址和授权账号&#xff0c;并指明要部署的分支 3、构建选择 Execute shell&#xff0c;输入vue项目打包命令 命令示例&#xff1a; source /etc/profile node -v npm config set re…

R语言快速生成三线表(1)

R语言的优势在于批量处理&#xff0c;常使用到循环和函数&#xff0c;三线表是科研文章中必备的内容。利用函数实现自动判断数据类型和计算。使用R包&#xff08;table1&#xff09;。 # 创建连续性变量 continuous_var1 <- c(1.2, 2.5, 3.7, 4.8, 5.9) continuous_var2 &l…

workbench连接MySQL8.0错误 bad conversion 外部组件 异常

阿里云搭建MySQL实用的版本是8.0 本地安装的版本是: workbench 6.3 需要升级到&#xff1a; workbench 8.0 https://dev.mysql.com/downloads/workbench/

时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现SO-CNN-BiL…

微调Llama2自我认知

一、概述 最近在学习了解大模型微调相关的内容&#xff0c;在学习的过程中也遇到了很多问题&#xff0c;所以将自己的学习过程记录下来&#xff0c;希望对大模型微调感兴趣的小伙伴提供一点帮助&#xff0c;本文主要介绍一下如何通过SFT微调Llama2的自我认知&#xff0c;先看一…

什么是网络中的服务质量 (QoS),其相关技术和关键指标有哪些?

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c;是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

学习笔记230816---vue项目中使用第三方组件{el-dropdown}如何设置禁止事件功能

问题描述 使用第三方组件elementui&#xff0c;在导航菜单el-menu的el-menu-item中嵌入一个下拉菜框el-dropdown。点击...icon弹出下拉菜单el-dropdown-menu&#xff0c;那么这时会触发事件冒泡&#xff0c;el-menu-item菜单项的点击事件也会触发。 解决方法 阻止事件冒泡&am…

Java【手撕双指针】LeetCode 57. “两数之和“, 图文详解思路分析 + 代码

文章目录 前言一、两数之和1, 题目2, 思路分析3, 代码展示 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表…

c++ day3

#include <iostream>using namespace std; class per {string name;int age;int *p;int *q; public:per(string name,int age,int a,int b){this->name(name);this->ageage;pnew int(a);qnew int(b);*qb;*pa;cout << "有参构造"<<endl;}void…

如何提取视频的音频到手机?这个音频提取方法很简单

提取视频中的音频可以帮助您获得视频的声音部分&#xff0c;而无需观看整个视频。这对于那些只想听视频的声音或想将视频的声音与其他音频内容混合使用的人来说非常方便。此外&#xff0c;提取音频也可以为需要创建音频剪辑或混音的音频制作者提供帮助。那么怎么提取呢&#xf…

Ant Design Vue 日期选择器DatePicker传给后台日期参数格式问题

花了一个下午才解决&#xff0c;官方组件文档里面是没有处理方案说明的。 项目版本&#xff1a;Ant Design Vue 2.0.2 前端部分代码&#xff1a; <template><a-modal:visible"visible":width"windowWidth":height"800":title"tit…

Golang Gorm 一对多关系 关系表创建

一对多关系 我们先从一对多开始多表关系的学习因为一对多的关系生活中到处都是&#xff0c;例如&#xff1a; 老板与员工女神和添狗老师和学生班级与学生用户与文章 在创建的时候先将没有依赖的创建。表名称ID就是外键。外键要和关联的外键的数据类型要保持一致。 package ma…

创建和分析二维桁架和梁结构研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

最小二乘法,残差,线性模型-线性回归

目录 什么是最小二乘法 残差是什么意思 线性模型 线性回归 方法一&#xff1a;解析解法 代码实战&#xff1a; 方法二&#xff1a;数值解法 代码实战&#xff1a; 解析法&#xff08;最小二乘&#xff09;还是数值法&#xff08;梯度下降&#xff09;&#xff0c;如何…

Unity 之 Start 与Update 方法的区别

文章目录 当谈论Unity中的 Start和 Update方法时&#xff0c;我们实际上是在讨论MonoBehaviour类中的两个常用方法&#xff0c;用于编写游戏逻辑。这两个方法在不同的时机被调用&#xff0c;因此您可以根据需要选择在哪个方法中编写特定的代码。 Start 方法&#xff1a; Start…

23款奔驰GLS450升级原厂电动吸合门,体验绅士的关门状态

电吸门的工作原理是在门框(或门板边缘)上安装一个电磁线圈。当门打开时&#xff0c;电流会流过线圈&#xff0c;形成电磁场。这样&#xff0c;由于磁力的作用&#xff0c;当门靠近门框关闭时&#xff0c;门会自动关闭。 另外&#xff0c;电吸门也有有用的一面。如果下车&#…

在线ppt转pdf如何转换?用这一个方法就够了

在线PPT转PDF是一种将PPT文件转换为PDF格式的便捷且常用的工具。随着科技的发展&#xff0c;PPT已经成为了商务、教育等领域中最常用的演示工具之一。PDF格式具有较好的稳定性和兼容性。PPT文件可能因为不同的操作系统、软件版本或字体缺失等原因而导致显示不一致或乱码等问题&…