原文:利用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)的更多相关文章

  1. 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  2. 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  3. 利用WPF建立自己的3d gis软件(非axhost方式)(十)SDK中一些自带的展示面板应用

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十)SDK中一些自带的展示面板应用 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV ...

  4. 利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew密 ...

  5. 利用WPF建立自己的3d gis软件(非axhost方式)(八)拖动一个UI到地球上

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(八)拖动一个UI到地球上 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  6. 利用WPF建立自己的3d gis软件(非axhost方式)(九)SDK自带部分面板的调用

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(九)SDK自带部分面板的调用 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ...

  7. 利用WPF建立自己的3d gis软件(非axhost方式)(六)跳转,增加外部三维模型

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(六)跳转,增加外部三维模型 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPe ...

  8. 利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ...

  9. 利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUw ...

随机推荐

  1. Scala在挖财的应用实践--转载

    原文地址:http://www.infoq.com/cn/articles/scala-architecture-wacai 编者按:本文是根据ArchSummit大会上挖财资深架构师王宏江的演讲&l ...

  2. iOS_02_什么是ios开发

    什么是ios开发? * 已知:ios是iphone,ipad等手持设备操作系统. * ios开发就是开发运行在ios系统上的应用或者游戏软件,比如手机QQ,微博或者游戏,说白了,就是开发手机软件:当然 ...

  3. 全双工 串口 stm32

  4. WPF应用程序启动的问题(自定义Main函数启动)

    问题引入: 一般WPF创建之后可以直接运行并不需要编写Main函数指定入口,但是在开发的过程中会遇到一些情况需要自定义Main让WPF从指定的Main函数中进行启动,这样可能会更好控制一点.但是我们再 ...

  5. Python数据结构之树

    二叉树 嵌套列表方式 # coding:utf-8 # 列表嵌套法 def BinaryTree(r): return [r, [], []] def insertLeft(root, newBran ...

  6. 制作Kinect体感控制小车教程 &lt;一&gt;

    转载请注明出处:http://blog.csdn.net/lxk7280                                        Kinect体感控制小车        Kine ...

  7. POI操作Excel常用方法总结 分类: B1_JAVA 2013-08-23 10:01 349人阅读 评论(0) 收藏

    转载自:http://blog.csdn.net/xjun15/article/details/5805429     一. POI简介               Apache POI是Apache ...

  8. js导出报表

    原文链接:https://blog.csdn.net/qq_37936542/article/details/78376156 需求:项目中有一个学生签到模块需要导出每天的签到数据,一开始用poi在后 ...

  9. Linux下 kprobe工具的使用

    此处转载: 一.Kprobe简单介绍 kprobe是一个动态地收集调试和性能信息的工具,它从Dprobe项目派生而来,是一种非破坏性工具,用户用它差点儿能够跟踪不论什么函数或被运行的指令以及一些异步事 ...

  10. Django表单上传

    任务描述:实现表单提交(上传文件) 1.项目目录: 2.源代码: regist.html <!DOCTYPE html> <html lang="en"> ...