功能:功能实现了现在网络流行的定位后在地图上画一个图标,点击图标后弹出消息框。
思路:根据查询条件获得一个点的地图坐标,然后转换为屏幕坐标,利用js脚本动态图片到相应位置。
效果图如下:
主要实现步骤:
1、SearchMapIdentity.cs,该类主要实现查询获取点的地图坐标,地图坐标转换为屏幕坐标的方法,点击小图标时的回发调用,代码如下:
using System; using System.Data; using System.Collections; using System.Collections.Specialized; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using ESRI.ArcGIS.ADF.Web; using ESRI.ArcGIS.ADF.Web.UI.WebControls; using ESRI.ArcGIS.ADF.Web.DataSources; using ESRI.ArcGIS.ADF.Web.Geometry; using ESRI.ArcGIS.ADF.Web.Display.Graphics; using System.Collections.Generic; namespace SearchMapIdentityTask{ public class SearchMapIdentity { #region 私有字段 private Page m_page; private Map m_map; private ArrayList mapPoints = null; private string content; private string m_callbackInvocation = ""; private string m_filePath = ""; private string queryText = ""; private DataTable queryResult = null; private string queryField = ""; private string readFields = ""; #endregion #region 相关属性 public Map Map { get { return m_map; } set { m_map = value; } } public Page Page { get { return m_page; } set { m_page = value; } } public string ClientCallbackInvocation { get { return m_callbackInvocation; } set { m_callbackInvocation = value; } } public string FilePath { get { return m_filePath; } set { m_filePath = value; } } public string QueryText { get { return queryText; } set { queryText = value; } } public ArrayList MapPoints { get { return mapPoints; } set { mapPoints = value; } } public string Content { get { return content; } set { content = value; } } public DataTable QueryResult { get { return queryResult; } set { queryResult = value; } } //需要用来作为Where条件的查询字段 public string QueryField { get { return queryField; } set { queryField = value; } } //需要显示在详细信息里的字段 public string ReadFields { get { return readFields; } set { readFields = value; } } #endregion #region 构造函数 public SearchMapIdentity() { } public SearchMapIdentity(Map map) { if (map != null) { m_map = map; } } public SearchMapIdentity(Map map, string filePath) { m_map = map; m_filePath = filePath; } #endregion #region 处理点击查询回调的函数 public void Identify(bool isFirstIdentify,string layername) { int x = 0; int y = 0; ArrayList xy = null; if (this.MapPoints == null || isFirstIdentify == true) { xy = GetXY(this.Map,layername); } else { xy = this.MapPoints as ArrayList; } foreach (object o in xy) { object[] arrayPoints = o as object[]; ESRI.ArcGIS.ADF.Web.Geometry.Point p = (ESRI.ArcGIS.ADF.Web.Geometry.Point)arrayPoints[0]; System.Drawing.Point screenPoint = MapToScreenPoint(p.X, p.Y); x = screenPoint.X; y = screenPoint.Y; string content = arrayPoints[1] as string; string oa = string.Format("ReDrawZommToPoint({0},{1},{2},{3},/'{4}/');", x, y, p.X, p.Y, content); CallbackResult cr1 = new CallbackResult(null, null, "javascript", oa); this.Map.CallbackResults.Add(cr1); } } #endregion #region 处理点击小图片时回调的函数 public void DrawInfoWin(double mapX, double mapY, string content) { System.Drawing.Point screen_point = MapToScreenPoint(mapX, mapY); int[] rate = { screen_point.X, screen_point.Y - 38 }; object[] oa = new object[1]; string sa = "showInfoWindow(" + rate[0].ToString() + "," + rate[1].ToString() + ",'" + content + "');"; oa[0] = sa; CallbackResult cr1 = new CallbackResult(null, null, "javascript", oa); this.Map.CallbackResults.Add(cr1); } #endregion #region 获得查询点的结果集 public ArrayList GetXY(Map Map1,string layername) { ArrayList XY = new ArrayList(); IEnumerable func_enum = Map1.GetFunctionalities(); System.Data.DataTable datatable = null; foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisfunctionality in func_enum) { ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = gisfunctionality.Resource; if (gisfunctionality.Resource.DataSource.DataSourceDefinition == "In Memory") { continue; } bool supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)); if (supported)