MapXtreme+Asp.net 动态轨迹
MapXtreme+Asp.net 动态轨迹(请求大神指点)
功能简介:在MapXtreme+Asp.net的环境下实现轨迹回放功能,经过两天的努力基本实现此功能。但还有部分问题需要解决,求大神们指点迷津,问题会在结尾处提出。

客户端前台页面 <asp:ScriptManager ID="ScriptManager1" runat="server" /> <%--该js方法写在scriptmanager之后,防止出现Sys未定义错误--%>
<script type="text/javascript">
//获取pagerequestmanager实例后添加事件
//在因同步回发或因异步回发而刷新页面上所有内容后触发
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(TrackPlayBack); //轨迹回放函数
function TrackPlayBack()
{
var myInput1 = document.getElementById("input1");//用来存放X坐标的控件
var myInput2 = document.getElementById("input2");
if(myInput1 != null && myInput2 != null)
{
var pointX = myInput1.value.toString();//地图上X坐标点
var pointY = myInput2.value.toString();//地图上Y坐标点
if(pointX != "" && pointY != "")
{
var mapImage = document.getElementById("MapControl1_Image");//获取地图控件
if(mapImage != null)
{
//传递URL数据
var url = "MapController.ashx?Command=TrackPlayBack&PointX=" + pointX +"&PointY=" + pointY
+ "&MapAlias=" + mapImage.mapAlias + "&Width=" + mapImage.width +"&Height=" + mapImage.height
+ "&ExportFormat=" + mapImage.exportFormat + "&Ran=" + Math.random(); //使用Ajax局部刷新更新地图
var xmlHttp = CreateXMLHttp();
xmlHttp.open("GET",url,false);
xmlHttp.send();
mapImage.src = url;
}
}
}
}
</script> <cc1:MapControl ID="MapControl1" runat="server" Width="800" Height="600" ExportFormat="Jpeg" MapAlias="Map1"/> <asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<input id="input1" runat="server" type="text" style="width:200;" />
<input id="input2" runat="server" type="text" style="width:200;" /> <input id="input3" runat="server" type="text" style="width:200;" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
</asp:UpdatePanel> <asp:Timer ID="Timer1" runat="server" Enabled="true" Interval="50"
ontick="Timer1_Tick" />


客户端中调用的自定义服务器MapBaseCommand类
/// <summary>
/// 轨迹回放
/// </summary>
[Serializable]
public class TrackPlayBack : MapBaseCommand
{
private Catalog myCatalog = MapInfo.Engine.Session.Current.Catalog;
/// <summary>
/// 动画回放图层别名
/// </summary>
private string animationName = "动画回放";
/// <summary>
/// 动画回放图元Style
/// </summary>
private MapInfo.Styles.BitmapPointStyle trackBmpPointStyle = new MapInfo.Styles.BitmapPointStyle("TRUC1-32.BMP", MapInfo.Styles.BitmapStyles.NativeSize, System.Drawing.Color.Blue, 24); public TrackPlayBack(string _animationName, MapInfo.Styles.BitmapPointStyle _trackBmpPointStyle)
{
Name = "TrackPlayBack"; animationName = _animationName;
trackBmpPointStyle = _trackBmpPointStyle;
} public override void Process()
{
//获取分站坐标
double pointX, pointY;
double.TryParse(HttpContext.Current.Request["PointX"].ToString(), out pointX);
double.TryParse(HttpContext.Current.Request["PointY"].ToString(), out pointY);
//获取实现与执行各种操作的MapContorlModel实例
MapControlModel myCtrlModel = MapControlModel.GetModelFromSession();
try
{
//获取地图实例
Map myMap = myCtrlModel.GetMapObj(MapAlias);
if(myMap != null)
{
//清空地图轨迹回放图元
MapInfo.Data.Table myTable = myCatalog.GetTable(animationName);
if(myTable != null)
{
#region 清空图元
SearchInfo mySearchInfo = MapInfo.Data.SearchInfoFactory.SearchWhere("");
IResultSetFeatureCollection myIRetFeaColl = myCatalog.Search(myTable, mySearchInfo);
if(myIRetFeaColl != null)
{
foreach(Feature myObj in myIRetFeaColl)
{
myTable.DeleteFeature(myObj);
}
}
#endregion #region 添加图元
MapInfo.Geometry.Point myPoint = new MapInfo.Geometry.Point(myMap.GetDisplayCoordSys(), new MapInfo.Geometry.DPoint(pointX, pointY)); Feature myFeature = new Feature(myTable.TableInfo.Columns);
myFeature.Geometry = myPoint;
myFeature.Style = trackBmpPointStyle; myTable.InsertFeature(myFeature);
#endregion
}
}
}
finally
{
System.IO.MemoryStream ms = myCtrlModel.GetMap(MapAlias, MapWidth, MapHeight, ExportFormat);
StreamImageToClient(ms);
} }
}


后台代码 //此处使用Timer模拟生成的点作为动态轨迹的坐标点
protected void Timer1_Tick(object sender, EventArgs e)
{
double pointX = 4999 + myRandom.NextDouble() * 2;
double pointY = pointX; this.input1.Value = pointX.ToString();
this.input2.Value = pointY.ToString();
}

问题:该功能采用异步更新图元位置,并设置Timer的Interval为50ms(甚至更小),使用IE浏览器坐标点更新速度1-3次/s,使用搜狗浏览器坐标点的更新速度则更慢。怎么样才能使更新速度更快,问题出在何处?是MapXtreme异步更新本身的问题吗?
MapXtreme+Asp.net 动态轨迹的更多相关文章
- MapXtreme+Asp.net 动态轨迹(请求大神指点)
功能简介:在MapXtreme+Asp.net的环境下实现轨迹回放功能,经过两天的努力基本实现此功能.但还有部分问题需要解决,求大神们指点迷津,问题会在结尾处提出. 客户端前台页面 <asp:S ...
- asp.net 动态添加自定义控件
前两天一直纠结asp.net动态添加控件后,后台获取不到控件的问题,查看了网上很多的回答,可能自己的理解有误或者自己所掌握的知识有限,都没有解决我遇到的问题,经过两天的研究,终于把问题解决了. 我这里 ...
- asp.net动态输出透明gif图片
要使用asp.net动态输出透明gif图片,也就是用Response.ContentType = "image/GIF". 查了国内几个中文资料都没解决,最后是在一个英文博客上找到 ...
- ASP.NET 动态编译、预编译和 WebDeployment 项目(转)
概述 在 Web 服务器上,既可以部署源文件,也可以部署编译后程序集. 若部署源文件,则当用户访问时,Web 应用程序会被动态编译,并缓存该程序集,以便下次访问. 否则,若部署程序集,Web 应用程序 ...
- ASP.NET动态的网页增删查改
动态页面的增删查改,不多说了,直接上代码 跟前面的一般处理程序一样我上用的同一套三层,只是UI层的东西不一样,在纠结着要不要重新在上一次以前上过的代码: 纠结来纠结去,最后我觉得还上上吧,毕竟不上为我 ...
- VC动态轨迹画线
分类: 2.4 线程/图形学2010-04-30 22:14 1878人阅读 评论(0) 收藏 举报 文档null 这是一个绘制直线的简单绘图程序,能过实现动态轨迹画线,在拖动时产生临时线来表示可能画 ...
- asp.net动态加载ascx用户控件
原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或T ...
- asp.net动态网站repeater控件使用及分页操作介绍
asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...
- asp.net动态为网页添加关键词的代码
如下资料是关于asp.net动态为网页添加关键词的代码,希望能对小伙伴们有较大用.HtmlMeta keywords = new HtmlMeta();keywords.Name = "ke ...
随机推荐
- AngularJS之使用服务封装可复用代码
创建服务组件 在AngularJS中创建一个服务组件很简单,只需要定义一个具有$get方法的构造函数, 然后使用模块的provider方法进行登记: //定义构造函数 var myServicePro ...
- 在打包程序中自动安装SQL Server数据库 .
原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...
- Java设计模式偷跑系列(六)Singleton模式的建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种经常使用的设计模式. 在Java应用中 ...
- YUV格式转换RGB(基于opencv)
在编写代码将需要处理YUV格从每个视频帧中提取,然后将其保存为图片.有两种常见的方法在线,第一种是通过opencv自带cvCvtColor,可是这样的方法有bug.得到的图片会泛白.另外一种方法是公式 ...
- SQL点滴35—SQL语句中的exists
原文:SQL点滴35-SQL语句中的exists 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHE ...
- jQuery EasyUI API - Grid - DataGrid [原创汉化官方API]
最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...
- MySQL之自定义函数
引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,比如我前面提到过的聚合函数SUM().AVG()以及日期时间函数等等,可是我们总会出现其他的需求:我们需要 ...
- 【转】Android 系统菜单与自定义菜单
Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import ...
- Oracle中join left,join right,inner join,(+) 等
Oracle中join left,join right,inner join,(+) 等 博客分类: Oracle 建表create table TEST1create table TEST1( ...
- 构建日均千万PV Web站点1
如何构建日均千万PV Web站点 (一) 其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活.所谓的用 ...