此处所说的动态标注,是指动态显示地图上某一要素的动态信息。还是通过熟悉的Callback机制来实现。由于获取地图上某一要素的动态信息过程可能不同。本文只描述过程以及共享部分代码。
1、首先写一个javascript函数用来间隔一定时间不停的执行,以保证要素信息的动态性。另外需要在MapResourcemanager 中加入一临时图层(GraphicsLayer),标注的信息就在此图层上显示。
<script type="text/javascript">
function Show() {
SetCustomOperation(“FSShow”) // Callback前台函数
}
//每间隔20秒执行一次show函数
Ext.onReady(function() {
setInterval(Show, 20000);
});
function SetCustomOperation(sVal)
{
var message ='';
message +=',' + sVal;
var context ='Map1';
<%=sCallBack%>
}
</script>
2、后台首先要从数据库去动态获取要标注的地图要素的实时信息以及获取到此要素的坐标值。接着就是就是标注了。主要代码如下:
ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer glayer = null;
//查找ElementGraphicsLayer
ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality Tempfunc = map.GetFunctionality("TempEle"); // TempEle为动态资源图层名
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = Tempfunc.Resource as ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource;
foreach (System.Data.DataTable dt in gResource.Graphics.Tables)
{
if (dt is ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)
{
glayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dt;
break;
}
}
//如果没有ElementGraphicsLayer就新增加一个ElementGraphicsLayer
if (glayer == null)
{
glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
gResource.Graphics.Tables.Add(glayer);
}
ESRI.ArcGIS.ADF.Web.Geometry.Point point = new ESRI.ArcGIS.ADF.Web.Geometry.Point(X, Y);
//此处X,Y即为需要标注的某一点要素的X,Y坐标值
ESRI.ArcGIS.ADF.Web.Display.Symbol.TextMarkerSymbol pMarkerSymbol = new ESRI.ArcGIS.ADF.Web.Display.Symbol.TextMarkerSymbol();
pMarkerSymbol.Text = string.Format("{0}", str);
/*此处str即为标注要素的动态信息字符串,此处是通过间隔一定时间从数据库获取的*/
pMarkerSymbol.Font.Size = 20;
pMarkerSymbol.Transparency = 0;
ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge1 = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(point, pMarkerSymbol);
glayer.Add(ge1);
Map1.RefreshResource(gResource.Name);