GIS2004鹰眼

转载 2007年09月18日 09:08:00

要实现鹰眼功能有两个主要问题:用户在鹰眼窗口上点击的时候地图自动定位到相应的位置;当地图视图(包括缩放比例和中心)发生变化的时候,鹰眼窗口上的导航矩形框相应

变化以指示用户当前所处的位置。
第一个问题可以通过客户端捕获用户在鹰眼窗口上点击的位置,发送到服务器,服务器端把该位置转换为地图坐标并更新地图的中心点来实现。为了便于保持地图或者页面上其它

Web Control的状态,这个回发应该用HTTP POST来实现。
第二个问题复杂一些,需要在地图的视图改变的时候根据地图当前的边距生成一个矩形框,然后把这个矩形框放到一个临时图层里面并添加到鹰眼窗口上。因为地图视图改变事件

难以捕获,可以在MapControl的PreRender事件里来实现这个功能,这样在每次页面生成的时候都生成一次导航矩形框。

首先在.aspx文件上添加两个MapInfo.Web.UI.WebControls.MapControl。一个叫mcEagle,小一些做为鹰眼窗口。一个叫mcMain,用来显示主地图。
<MapInfoWebUIWebControls:MapControl id="mcEagle" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"
WorkspaceFileName="WebForm1mcEagle.mws" Height="150px" Width="200px" BorderStyle="Solid" BorderWidth="1px" MapAlias="Map11"
UseDesigntimeWorkspace="True" Format="Gif"></MapInfoWebUIWebControls:MapControl>
<mapinfowebuiwebcontrols:MapControl id="mcMain" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 168px" runat="server"
WorkspaceFileName="WebForm1mcMain.mws" Height="600px" Width="800px" BorderStyle="Solid" BorderWidth="1px" MapAlias="Map12"
DisplayCoordSys="经度/纬度" UseDesigntimeWorkspace="True" Format="Gif" Zoom="3000"></mapinfowebuiwebcontrols:MapControl>

再放置一个隐藏的input来保存用户点击鹰眼窗口的位置
<INPUT id="iPoint" type="hidden" runat="server" NAME="iPoint">

在页面的Page_Load事件里写以下代码
mcEagle.Attributes.Add("onclick","Form1.iPoint.value=event.offsetX + '|' + event.offsetY;Form1.submit()");

if(iPoint.Value != "")
{
string []point;
int screenX = -1;
int screenY = -1;

point = iPoint.Value.Split('|');

try
{
screenX = Convert.ToInt32(point[0]);
screenY = Convert.ToInt32(point[1]);
}
catch(Exception)
{
}

if ( screenX >= 0 && screenY >= 0 )
{
System.Drawing.Point pntClick = new System.Drawing.Point(screenX,screenY);
DPoint pntCenter = new DPoint(0,0);
mcEagle.Map.DisplayTransform.FromDisplay(pntClick, out pntCenter);
mcMain.Map.Center = pntCenter;
}

iPoint.Value = "";
}

为mcMain的PreRender事件添加事件处理方法
private void mcMain_PreRender(object sender, System.EventArgs e)
{
if(mcMain.Map.Layers.Count == 0)
return;

//创建样式
MapInfo.Geometry.Rectangle rectangle = new MapInfo.Geometry.Rectangle(mcEagle.Map.GetDisplayCoordSys(),mcMain.Map.Bounds);
MapInfo.Styles.AreaStyle aStyle = new AreaStyle();
aStyle.Border = StockStyles.RedLineStyle();
aStyle.Interior = new SimpleInterior(0);
CompositeStyle cStyle = new MapInfo.Styles.CompositeStyle(aStyle);


//创建内存临时表
TableInfoMemTable tableInfo = new TableInfoMemTable("EagleEyeTemp");
tableInfo.Temporary = true;

Column column;
column = new GeometryColumn(mcEagle.Map.GetDisplayCoordSys());
column.Alias = "MI_Geometry";
column.DataType = MIDbType.FeatureGeometry;
tableInfo.Columns.Add(column);

column = new Column();
column.Alias = "MI_Style";
column.DataType = MIDbType.Style;
tableInfo.Columns.Add(column);

MapInfo.Data.Table map_table;
MIConnection conn = new MIConnection();
conn.Open();
MICommand cmd = conn.CreateCommand();

if(MapInfo.Engine.Session.Current.Catalog["EagleEyeTemp"] == null)
{
map_table = MapInfo.Engine.Session.Current.Catalog.CreateTable(tableInfo);

cmd.Parameters.Add("geometry",MIDbType.FeatureGeometry);
cmd.Parameters.Add("style",MIDbType.Style);
cmd.CommandText = "Insert Into EagleEyeTemp (MI_Geometry,MI_Style) values (geometry,style)";
cmd.Prepare();
cmd.Parameters[0].Value = rectangle;
cmd.Parameters[1].Value = cStyle;
int nchanged = cmd.ExecuteNonQuery();
}
else
{
map_table = MapInfo.Engine.Session.Current.Catalog["EagleEyeTemp"];

cmd.Parameters.Add("geometry",MIDbType.FeatureGeometry);
cmd.CommandText = "Update EagleEyeTemp Set MI_Geometry = geometry";
cmd.Prepare();
cmd.Parameters[0].Value = rectangle;
int nchanged = cmd.ExecuteNonQuery();
}

//创建临时图层
MapInfo.Mapping.FeatureLayer temp_layer = new FeatureLayer(map_table,"EagleEyeTemp");

for(int i = 0;i < mcEagle.Map.Layers.Count;i++)
{
if(mcEagle.Map.Layers[i].Alias == "EagleEyeTemp")
{
mcEagle.Map.Layers.Remove("EagleEyeTemp");
break;
}
}

mcEagle.Map.Layers.Add(temp_layer);
}

建议将
this.MapControl1.Map.Layers.Add(temp_layer);
改为
this.MapControl1.Map.Layers.Insert(1,temp_layer);

不然会被后面的图层覆盖

function cc()
{
document.Form1.iPoint.Value=event.x+ '|' + event.y;
document.Form1.txtSpotType.value=document.Form1.iPoint.Value;
Form1.submit();
}
 

隐藏文本框的赋值 直接会丢 但是再导一遍就不会了

百度鹰眼的感受

之前我也写过一些博客,但我表达能力不是很强,所以没有坚持下去!!我目前在学习反汇编和手机安全这方面的知识,等我懂了,我会写一下反汇编和手机安全方面的知识来和大家分享,共同学习!!  好了,废话我也不多...
  • qq_37189314
  • qq_37189314
  • 2016年12月28日 21:59
  • 811

【AE二次开发】实现鹰眼的联动

鹰眼是GIS软件中的一个必备的功能。主要作用就是在GIS软件中有一个鹰眼视图和一个主视图,鹰眼视图用一个框来“框起来”,当拖动这个框的时候,主视图也会随之变化。这个功能非常的实用。 效果展示(这...
  • lucahan
  • lucahan
  • 2016年06月22日 11:16
  • 2737

Android百度鹰眼轨迹

拿外卖配送为例,配送员从接单开始上传行驶轨迹,用户端可以实时查看配送员的行驶轨迹,对于点外卖的用户来说可以更直接地观察到自己的订单是否在配送过程中,不再需要一遍一遍地拨打商户电话催促。...
  • duangongbang
  • duangongbang
  • 2016年05月05日 09:36
  • 7275

调用百度鹰眼api实现实时轨迹绘制

自己想做一个跑步路径轨迹记录的app,刚好百度地图有鹰眼api,就拿过来调用了,这里给出鹰眼api调用的一个完整实现的例子HelloTrace,放在了完整包的下载链接为: 最近缺下载积分,所以需要一个...
  • sinat_22013331
  • sinat_22013331
  • 2015年12月03日 15:28
  • 18308

研发解决方案介绍#Tracing(鹰眼)

分布式系统为什么需要 Tracing?   先介绍一个概念:分布式跟踪,或分布式追踪。   电商平台由数以百计的分布式服务构成,每一个请求路由过来后,会经过多个业务系统并留下足迹,并产生对各种Ca...
  • mbugatti
  • mbugatti
  • 2016年11月30日 11:01
  • 2258

鹰眼摄像头(OV7725)的使用

原载:http://blog.csdn.net/lxk7280/article/details/26975233?utm_source=tuicool 凭借着OV7620,将已经调好...
  • u012802702
  • u012802702
  • 2015年05月07日 09:38
  • 7161

openlayers3 自定义鹰眼缩略图

openlayers3自带的鹰眼缩略图控件功能很局限,想到自己动手去做,结果很容易就做出来了,这里主要用到的是两个map互相联动...
  • u014529917
  • u014529917
  • 2017年03月15日 11:08
  • 1062

ArcGIS 鹰眼地图功能实现

ArcGIS地图鹰眼功能实现:
  • liuhuazhong
  • liuhuazhong
  • 2014年10月11日 21:57
  • 1134

百度鹰眼Android SDK 运行配置

下载百度鹰眼轨迹Android SDK V2.1.10示例代码 ,也可能是其他版本,demo需要配置 开发者申请的移动端AK:api_key 鹰眼轨迹服务,获得servie_id    后方可正...
  • xiaobijia
  • xiaobijia
  • 2016年06月23日 18:54
  • 1485

全功能智能车之野火鹰眼7225摄像头最后完成总结(第六篇)

野火鹰眼7225摄像头最后完成总结: 1.鹰眼摄像头设置摄像头输出数据大小是不能够实现的,就是说配置摄像头寄存器想要的大小并不能够实现摄像头数据输出自己想要的大小,这个或许是和二值化电路有关,具体不再...
  • chengdong1314
  • chengdong1314
  • 2015年11月09日 22:04
  • 2294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GIS2004鹰眼
举报原因:
原因补充:

(最多只允许输入30个字)