利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF)
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF)
先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew密码:1te1
地图数据包(sqlserver2008R2版本,也可以不下载): https://pan.baidu.com/s/1PjcNamad7OVpCrsVJ7dwFQ 密码:uw9r
下载 核心SDK升级包:https://pan.baidu.com/s/1Q3dlM-Va-RmlEYbnmi8Xuw 并覆盖到SDK目录中。里面有也每一篇的例子代码
完整的视频演示:http://v.youku.com/v_show/id_XMTU4MTI5NTE4NA==.html 再三强调一下,用互联网的服务器使用速度上会卡顿,建议最好的效果一定要下载sql数据库,本地建服务。
下载完成以后,解压出来,将30-1.exe 拖动到 把授权拖到我上面install.bat上完成授权安装。。。
设置system.ini 如下内容
Server=122.112.229.220
user=GisTest
Password=chinamtouch.com
该数据库中只提供 成都市火车南站附近的数据请注意,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.chinamtouch.com QQ:40140203 微信公众号:m3dgis2001
利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF)的更多相关文章
- 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(十)SDK中一些自带的展示面板应用
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(十)SDK中一些自带的展示面板应用 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew密 ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(八)拖动一个UI到地球上
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(八)拖动一个UI到地球上 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(九)SDK自带部分面板的调用
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(九)SDK自带部分面板的调用 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(六)跳转,增加外部三维模型
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(六)跳转,增加外部三维模型 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPe ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement
		原文:利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUw ... 
随机推荐
- jmeter--基本组件介绍
			一.JMeter 介绍 Apache JMeter是100%纯Java桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ... 
- 【Codeforces Round #301 (Div. 2) C】 Ice Cave
			[链接] 我是链接,点我呀:) [题意] 给你一个n*m的地图. 每个地图为0的时候可以安全走过,且走过后变成1. (一定要离开之后才会变成1) 而为1的则走过之后会掉入下一层. 你一开始在初始位置( ... 
- 程序员的困境 - R中国用户组-炼数成金
			原文:http://www.oschina.net/news/43389/the-plight-of-programmer 在大型公司中不能腐蚀自己的学习能力和时间能力. 最近我为一个内核程序员的职位 ... 
- 基于bootstrap的主流框架有哪些
			基于bootstrap的主流框架有哪些 一.总结 一句话总结:其实可以直接百度bootstrap后台模板,出来一大堆,想用哪个用哪个. 二.[前端框架系列]浅谈当前基于bootstrap框架的几种主流 ... 
- Oracle 带回滚的存储过程
			create or replace procedure PROC_insertUserAmount ( userid number, msgtype number, amountvalue numbe ... 
- 学习redis--安装(二)
			安装前准备,我是在虚拟机中安装centos,然后安装redis. 安装 1.安装VMware,并安转centos系统 2.将redis的压缩包,上传到linux系统中(将下载到pc中的文件,拖到cen ... 
- 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议
			摘要: 本文简单介绍了网络层理论知识,详细讲解了IP数据报各个字段,并从Wireshark俘获分组中选取IP数据报进行分析,也阐述了分组和分片的区别. 一.IPv4数据报 网络层是 ... 
- ztree实现左边动态生成树,右边为具体信息功能
			页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="styleshe ... 
- docker nginx实现一个主机部署多个站点
			原文:docker nginx实现一个主机部署多个站点 在某站租赁的虚拟机快到期了,续费得花200多,想到在阿里云新买的服务器,不如把这个也转移过去.域名我就用真实的吧,大家别黑我网站就好了,谢谢各位 ... 
- HDOJ 5001 Walk
			概率DP dp[j][d] 表示不经过i点走d步到j的概率, dp[j][d]=sigma ( dp[k][d-1] * Probability ) ans = sigma ( dp[j][D] ) ... 
