cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1210回复:0

ArcGIS Server标注功能

楼主#
更多 发布于:2008-07-07 18:35
<br>饮食场所地图标注服务功能,即当客户端人员进行属性查询或者空间查询后,如果想进一步获取更加详细的信息,则点击电子地图中其位置图标,则页面将显
示企业的具体信息,如特色菜、详细介绍等。还可以通过移动、放大、缩小查看该饮食场所的周边信息。系统的后续工作还将进一步扩展此项相关功能,如到达该地
点的公交线路等。图1为系统界面图。</p>
<p>  <a href="http://www.cnblogs.com/images/cnblogs_com/chinazhousheng/WindowsLiveWriter/ArcGISServer_13DF3/DD6644C465AE%7D_2.jpg" target="_blank" ><img  alt="DD6644C465AE}" src="http://www.cnblogs.com/images/cnblogs_com/chinazhousheng/WindowsLiveWriter/ArcGISServer_13DF3/DD6644C465AE%7D_thumb.jpg" border="0" width="372" height="372"></a> <br>
            <图1><br>
图中彩色块体为目标点击物,左键点击后,系统界面的右边将出现其详细信息。如图2</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/chinazhousheng/WindowsLiveWriter/ArcGISServer_13DF3/2_2.jpg" target="_blank" ><img  alt="2" src="http://www.cnblogs.com/images/cnblogs_com/chinazhousheng/WindowsLiveWriter/ArcGISServer_13DF3/2_thumb.jpg" border="0" width="471" height="312"></a> </p>
<p>         <图2><br>
  实现原理为: <br>
(1)在工具栏中加入一个工具按钮。</p>
<p>  (2)服务器代码方面,首先查找要查询的图层,并将当前点转化成MapPoint</p>
<p>  (3)关键在于使用以上条件,并采用方法IQueryFunctionality.Identify获取到数据集</p>
  (4)适当处理,将信息显示在页面上。<br>
整个例子采用Ajax效果,达到无刷新效果,虽然没有Google的酷,但我相信,大家处理一下,采用层的显示是完全可以达到它的效果的.<br><br>using System.Drawing;<br>using System.Collections;<br>using System.Collections.Generic;<br>using ESRI.ArcGIS;<br>using ESRI.ArcGIS.ADF.Web;<br>using ESRI.ArcGIS.ADF.Web.DataSources;<br>using ESRI.ArcGIS.ADF.Web.Display.Graphics;<br>using ESRI.ArcGIS.ADF.Web.UI.WebControls;<br>using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;<br>using System.Data;<br>using System;<br>using System.Web.UI.WebControls;<br>using System.Web.UI;<br><br><br>using ESRI.ArcGIS.ADF.Web.UI.WebControls;<br><br><br>using ESRI.ArcGIS.ADF.Web;<br>using ESRI.ArcGIS.ADF;<br><br>using ESRI.ArcGIS.ADF.Web.DataSources;<br>using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;<br>using ESRI.ArcGIS.ADF.Web.DataSources.Graphics;<br>using ESRI.ArcGIS.ADF.ArcGISServer;<br><br><br>using ESRI.ArcGIS.Geometry;<br>using ESRI.ArcGIS.Server;<br>using ESRI.ArcGIS.Geodatabase;<br><br>using ESRI.ArcGIS.ADF.Connection;<br><br>/**//// <summary><br>/// MapIdentify 的摘要说明<br>/// </summary><br>public class MapIdentify :IMapServerToolAction<br>{<br>    public MapIdentify()<br>    {<br>        //<br>        // TOD 在此处添加构造函数逻辑<br>        //<br>    }<br><br>      IMapServerToolAction 成员#region IMapServerToolAction 成员<br><br>    public DataRow minus_row;<br><br>    public void ServerAction(ToolEventArgs args)<br>    {<br>        Map mapctrl = null;<br>        mapctrl = (Map)args.Control;<br><br>         IEnumerable func_enum = null;<br>        func_enum =mapctrl.GetFunctionalities();<br><br>        System.Data.DataTable datatable = null;<br>        PointN txt_Point = new PointN();<br><br><br>        //<br>        string name_eat = "null";<br>        <br><br>        foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality gisfunctionality in func_enum)<br>        {<br>           <br><br>            //对特定的数据库图层进行查询<br>            if (gisfunctionality.Resource.Name == "CsMap")<br>            {<br>                ESRI.ArcGIS.ADF.Web.DataSources.IMapResource gResource;<br>                gResource = (ESRI.ArcGIS.ADF.Web.DataSources.IMapResource)gisfunctionality.Resource;<br><br><br><br>                bool supported = false;<br>                ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = null;<br>                gisresource = gisfunctionality.Resource;<br>                supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));<br><br>                //如果支持<br>                if (supported)<br>                {<br>                    ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc;<br>                    qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);<br><br>                    string[] lids;<br>                    string[] lnames;<br><br>                    qfunc.GetQueryableLayers(null, out lids, out lnames);<br><br><br>                    //获取屏幕点<br>                    ESRI.ArcGIS.ADF.Web.Geometry.Point pnt = new ESRI.ArcGIS.ADF.Web.Geometry.Point() ;<br>                    ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs ptargs = null;<br>                    ptargs = (PointEventArgs)args;<br>                   <br><br>                   pnt= ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(ptargs.ScreenPoint.X,ptargs.ScreenPoint.Y, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);<br>      <br><br><br>                    System.Data.DataTable[] qdatatables = qfunc.Identify(null, pnt, 1, ESRI.ArcGIS.ADF.Web.IdentifyOption.AllLayers, lids);<br><br>                    //将指点的图层的表格数据赋给表<br>                     datatable = qdatatables[3];//为饮食所在图层<br>                     double pnt_xy = pnt.X + pnt.Y;<br>                     double minus_xy = 0;<br>                     double add_xy;<br>                   <br>                     int first_row=0;   //判断是否是第一行,为0为第一行;为1表示为其他行;<br><br><br>                    获取点的坐标#region 获取点的坐标<br>                     DataRowCollection drs = datatable.Rows;<br><br>                    int shpind = -1;<br>                    for (int i = 0; i < datatable.Columns.Count; i++)<br>                    {<br>                        if (datatable.Columns.DataType == typeof(ESRI.ArcGIS.ADF.Web.Geometry.Geometry))<br>                        {<br>                            shpind = i;<br>                            break;<br>                        }<br>                    }<br><br>                    try<br>                    {<br>                        foreach (DataRow dr in drs)<br>                        {<br>                            //ESRI.ArcGIS.ADF.Web.Geometry.Multipoint geom = (ESRI.ArcGIS.ADF.Web.Geometry.Multipoint)dr[shpind];<br>                            //ESRI.ArcGIS.ADF.Web.Geometry.PointCollection pointcol = geom.Points;<br>                            //txt_Point.X = pointcol[0].X;<br>                            //txt_Point.Y = pointcol[0].Y;<br>                            ESRI.ArcGIS.ADF.Web.Geometry.Point geom = (ESRI.ArcGIS.ADF.Web.Geometry.Point)dr[shpind];<br>                            //add_xy=pointcol[0].X+pointcol[0].Y;<br>                            add_xy = geom.X + geom.Y;<br><br>                            if(first_row==0)<br>                            {<br>                                minus_xy = System.Math.Abs(add_xy-pnt_xy);<br>                                minus_row = dr;<br>                                first_row = 1;<br>                                name_eat = minus_row["餐饮店名称"].ToString();<br>                                <br>                            }<br>                            else if(System.Math.Abs(pnt_xy-add_xy)<minus_xy)<br>                            {<br>                                minus_xy = System.Math.Abs(pnt_xy - add_xy);<br>                                minus_row = dr;<br>                                name_eat = minus_row["餐饮店名称"].ToString();<br><br>                            }<br><br>                          <br><br>                        }<br>                    }<br>                    catch (Exception q)<br>                    {<br>                    }<br><br>                    #endregion<br><br><br>                    if (gResource == null)<br>                        return;<br><br>                   //<br>                   <br>                  //  GridView gdview = (GridView)mapctrl.Page.FindControl("GridView1");<br>                    //TextBox txt_name = (TextBox)mapctrl.Page.FindControl("FloatingPanel9$Txt_Name");<br>                   <br>                    //设置图片<br>                    System.Web.UI.WebControls.Image Image1 = (System.Web.UI.WebControls.Image)mapctrl.Page.FindControl("Image1");<br>                    //Image1.ImageUrl = "~/Img/images_sk.jpg";//huogongdian<br>                    Image1.ImageUrl = "~/Img/huogongdian.jpg";<br>                    Image1.Visible = true;<br><br>                    //设置label<br><br>                    Label eat_name = (Label)mapctrl.Page.FindControl("eat_name");<br>                    eat_name.Text = "<br/><br/>;nbsp;;nbsp;;nbsp;;nbsp;餐饮名称:" + name_eat + "<br/>";<br>                    eat_name.Visible = true;<br>                    //<br>                    Label eat_cai = (Label)mapctrl.Page.FindControl("eat_cai");<br>                    eat_cai.Text = "<br/>;nbsp;;nbsp;;nbsp;;nbsp;特色菜系:" + minus_row["特色菜"].ToString() + "<br/>";<br>                    //<br>                    Label eat_demo = (Label)mapctrl.Page.FindControl("eat_demo");<br>                    eat_demo.Text = "<br/>;nbsp;;nbsp;;nbsp;;nbsp;详细介绍:" + minus_row["详细介绍"].ToString() + "<br/>"; <br>                    //<br><br>                     Label eat_tel = (Label)mapctrl.Page.FindControl("eat_tel");<br>                     eat_tel.Text = "<br/>;nbsp;;nbsp;;nbsp;;nbsp;订餐热线:" + minus_row["订餐热线"].ToString() + "<br/>";<br><br>                     Label eat_recom = (Label)mapctrl.Page.FindControl("eat_recom");<br>                     eat_recom.Text = "<br/>;nbsp;;nbsp;;nbsp;;nbsp;推荐指数:" + minus_row["推荐数"].ToString() + "<br/>"; <br><br>                    <br>                    object[] oa = new object[1];<br>                    string showtable = "'visible'";<br>                    <br>                    //设置数据源<br>                   // gdview.DataSource = datatable;<br>                    //gdview.DataBind();<br>                  //  txt_name.Text = datatable.Rows[0]["NAME"].ToString();<br>                   // txt_name.Visible = true;<br>                    string returnstring = null;<br><br>                    using (System.IO.StringWriter sw = new System.IO.StringWriter())<br>                    {<br>                        HtmlTextWriter htw = new HtmlTextWriter(sw);<br>                     //   txt_name.RenderControl(htw);<br>                       // gdview.RenderControl(htw);<br>                        Image1.RenderControl(htw);<br>                        eat_name.RenderControl(htw);<br>                        eat_cai.RenderControl(htw);<br>                       <br>                        eat_tel.RenderControl(htw);<br>                        eat_demo.RenderControl(htw);<br><br>                        htw.Flush();<br>                        returnstring = sw.ToString();<br>                    }<br><br>                    CallbackResult cr = new CallbackResult("div", "identify", "innercontent", returnstring);<br>                    mapctrl.CallbackResults.Add(cr);<br>                    CallbackResult cr1 = new CallbackResult("div", "img_div", "innercontent", returnstring);<br>                    mapctrl.CallbackResults.Add(cr1);<br>                    CallbackResult cr2 = new CallbackResult("div", "img_lab", "innercontent", returnstring);<br>                    mapctrl.CallbackResults.Add(cr2);<br><br>                    if (datatable.Rows.Count > 0)<br>                    {<br>                        showtable = "'visible'";<br>                        <br>                    }<br>                    else<br>                    {<br>                        showtable = "'hidden'";<br>                    }<br><br>                    // 设置griddiv是否显示<br>                    string sa = "var griddiv = document.getElementById('identify');";<br>                    sa += "griddiv.style.visibility = " + showtable + ";";<br>                    oa[0] = sa;<br><br>                    CallbackResult cr4 = new CallbackResult(null, null, "javascript", oa);<br>                    mapctrl.CallbackResults.Add(cr1);<br><br>                    if (mapctrl.ImageBlendingMode == ImageBlendingMode.WebTier)<br>                    {<br>                        mapctrl.Refresh();<br>                    }<br>                    else if (mapctrl.ImageBlendingMode == ImageBlendingMode.Browser)<br>                    {<br>                        mapctrl.RefreshResource(gResource.Name);<br>                    }<br>    <br>                }<br>            }<br>        }<br><br><br>                  <br><br>    }<br>      #endregion<br>}<br><br>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
游客

返回顶部