三维模拟推演电子沙盘虚拟数字沙盘开发教程第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有用。
————————————————
相关文章:

三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课
三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课 该数据库中只提供 成都市火车南站附近的数据请注意,104.0648,30.61658 在SDK中为了方便三方数据的接入,引入了一个用户层接口。主要是完成三方数据的接入,含动态数据(如GPS&…...
flask中GET和POST的区别
GET和POST是HTTP协议中两种常用的请求方法,它们在如何向服务器发送数据以及数据传输方式上有所不同。下面是GET和POST的主要区别: 一、数据传输位置: GET:将数据通过URL的查询字符串部分(即URL的参数)传递…...

基于Spring Boot的游泳馆管理系统的设计与实现(Java+spring boot+MySQL)
获取源码或者论文请私信博主 演示视频: 基于Spring Boot的游泳馆管理系统的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java spring…...
git冲突处理(已commit但忘pull的情况)
一般来说,你只要记得先拉再传就不会有问题,但如果pull后没有立刻push,这段时间刚好有人push了,就会导致冲突,那么你可以使用以下方法进行版本回退之后合并代码 步骤: git log查看所有的commit,…...

嵌入式设备应用开发(发现需求和提升价值)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 很多做技术的同学,都会陷入到技术的窠臼之中。对于如何做具体的产品、实现具体的技术,他们可能很感兴趣。但是做出来的东西做什么用,或者说是有没有竞争力,事实上他们不是很关心…...
Redis Replication
Redis Replication 1、前言 在单节点搞事情, 存在的问题包括存量问题和增量问题两类, 解决方案就是1个不行上N个, 做到单机维度宕机但服务维度是可用的。 1.1 存量问题 如果目前的单节点QPS满足(也就是综合瓶颈还没达到), 那么只有宕机能影响到。如果业务量不大, 又是出于成…...

软件研发CI/CD流水线图解
当谈到现代软件开发流程时,持续集成(Continuous Integration,简称CI)和持续交付(Continuous Delivery,简称CD)是两个关键的实践。它们旨在加速开发流程、提高软件质量,并使软件发布更…...
代码随想录第五十九天
代码随想录第五十九天 Leetcode 503. 下一个更大元素 IILeetcode 42. 接雨水 Leetcode 503. 下一个更大元素 II 题目链接: 下一个更大元素 II 自己的思路:没想到哈哈哈哈!! 正确思路:这个题在单调栈的情况下转了一个弯,就是需要取一个模操作…...
“yarn“、“npm“、“cnpm“和“pnpm“的区别
"yarn"、"npm"、"cnpm"和"pnpm"的区别 npm优点:缺点: yarn优点:缺点: cnpm优点:缺点: pnpm优点:缺点: 总结: npm npm…...
批量将txt文件转化为excel文件
可以使用Python的内置库csv和openpyxl来完成这个任务。以下是一个基本的代码示例: import csv from openpyxl import Workbook # 遍历目录中的所有.txt文件 for filename in glob.glob(*.txt): with open(filename, r) as infile: reader csv.reader(…...
StringIndexOutOfBoundsException: String index out of range: 458
报错信息: org.springframework.dao.TransientDataAccessResourceException: ### Error updating database. Cause: java.sql.SQLException: java.lang.StringIndexOutOfBoundsException: String index out of range: 458 ... ... ... 问题原因: <i…...

R语言主成分分析
R语言主成分分析 之前介绍过怎么用SPSS进行主成分分析(PCA),已经忘了的朋友们可以到主页看看 今天主要介绍下R语言主成分分析的几种方法。都是入门级别,跟着我一步步走,一点都不难哈~ 首先调用R语言自带的数据集,USArrests。这…...

单片机学习-蜂鸣器如何发出声音
硬件电路 软件编写 ①发出声音 #include "reg52.h" typedef unsigned int u16; // 重新定义 类型 typedef unsigned char u8; // 重新定义 类型sbit BEEP P2^5; //定义 P2第五个管教 为BEEP // 延时函数 void delay_time(u16 times) {while(times--); } vo…...

利用敏捷开发工具实现敏捷项目管理的实践经验分享
Scrum中非常强调公开、透明、直接有效的沟通,这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求,故事,任务之间的流转状态,可以使团队成员更加快速适应敏捷开发流程。 …...
代码随想录训练营 贪心02
代码随想录训练营 贪心01 🌸55. 跳跃游戏🌸代码 122. 买卖股票的最佳时机 II45. 跳跃游戏 II 🌸55. 跳跃游戏🌸 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的…...
Linux安装NVM(简洁版)
安装目录 mkdir /opt/nvm && cd /opt/nvm 安装包下载 wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.5.tar.gz 注意:https://github.com/nvm-sh/nvm/tags获取下载链接并替换 安装包解压 for file in *.tar.gz; do tar -zxvf "$file&quo…...

vue 弹出框 引入另一个vue页面
为什么要这么做,适用于在一个页面逻辑比较多的时候,可以搞多个页面,防止出错 index页面点击解约按钮,弹出框 进入jieyue.vue 核心代码 <el-buttonsize"mini"type"text"icon"el-icon-edit"v-if"scope.row.delFlag 0"click"j…...

为Android做一个ShowModal窗口
大家知道,用Delphi实现一个Form,并用ShowModal显示出来,在Android平台是非阻塞的,即执行了Form.ShowModal,代码会继续往下执行而不是等待,这跟在Windows平台是完全不一样的。如果我们需要类似阻塞的效果&am…...

神经网络的工作原理
目录 神经网络的介绍 神经网络的组成 神经网络的工作原理 Numpy 实现神经元 Numpy 实现前向传播 Numpy 实现一个可学习的神经网络 神经网络的介绍 神经网络受人类大脑启发的算法。简单来说,当你睁开眼睛时,你看到的物体叫做数据,再由你…...
Pandas数据分析教程-数据清洗-字符串处理
pandas-02-数据清洗&预处理 D. 字符串处理1. Python自带的字符串处理函数2. 正则表达式3. Series的str属性-pandas的字符串函数文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...