WebGIS的书签 MapXtreme VS2008(C#) Sql Server2005

来源:互联网 发布:6x6摇头矩阵灯 编辑:程序博客网 时间:2024/05/01 19:35

1.功能概述

(1)初始化打开网页,加载书签

(2)双击书签,地图跳转到选择的书签

(3)添加书签

(4)删除书签

2.基本思路

(1)数据库中建表BookMark(ID、Name、MapX、MapY、Zoom)

(2)书签界面

     <div>
         <form id="form1" name="form1" method="post" action="">
             <div style="font-size:9pt">名称:</div>
             <input id = "BookMarkName" name="Name" type="text"/>
             <input name="AddBookMark" type="button" value="添加" onclick="AddBookMarkToSql();"/>
             <input name="DeleteBookMark" type="button" value="删除"

              onclick="DeleteBookMarkFromSql();" />
         </form>
         <form id="form2" name="form2" method="post" action="">

             <select id="BookMarkList" name="BookMarkList" size="27" style="width:90%"

              ondblclick = "GoToBookMark()">
             </select>
         </form>
     </div>

(3)各个功能的实现:

    //定义书签的操作

     //书签操作
    function BookMark(Name,MapX,MapY,Zoom) {
        this.Name = Name;
        this.MapX = MapX;
        this.MapY = MapY;
        this.Zoom = Zoom;
    }
    function BookMarkData() {
        this.BookMarks = new Array();
    }
    BookMarkData.prototype.AddBookMarkData = function(Name, MapX, MapY, Zoom) {
        this.BookMarks[this.BookMarks.length] = new BookMark(Name, MapX, MapY, Zoom);
    }
    BookMarkData.prototype.DeleteBookMarkData = function(index) {
        this.BookMarks.splice(index, 1);
    }
    BookMarkData.prototype.GetBookMarkData = function(index)
    {
        return this.BookMarks[index];
     }

    //书签

    var MyBookMarks = new BookMarkData();

     a.初始化打开网页,加载书签

     JS代码:

     function InitialBookMarkList() {

         var MapImage = FindElement("MainMap_Image");
         var url = "MapController.ashx?Command=GetBookMarks" + "&Ran=" + Math.random();

         if (MapImage.mapAlias) {
             url += "&MapAlias=" + MapImage.mapAlias;
         }
    
        var xmlHttp = CreateXMLHttp();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);

        var result = xmlHttp.responseText;
        var BookMarkList = FindElement("BookMarkList");
        if (result.indexOf("!") != -1) {
            var BookMarks = result.split("!");

            for (var i = 1; i < BookMarks.length; i++) {
                var BookMark = BookMarks[i].split(",");
                var Name = BookMark[0];
                var MapX = BookMark[1];
                var MapY = BookMark[2];
                var Zoom = BookMark[3];
                BookMarkList.options.add(new Option(Name));
                MyBookMarks.AddBookMarkData(Name, MapX, MapY, Zoom);  
             }

         }
     }

     C#代码:

    [Serializable]
    public class GetBookMarks : MapInfo.WebControls.MapBaseCommand
    {

        public GetBookMarks()
        {
            Name = "GetBookMarks";
        }
        public override void Process()
        {
            var BookMarks = "";

            MapInfo.Data.Table BookMark = MapInfo.Engine.Session.Current.Catalog.GetTable  

            ("BookMark");

            if (BookMark == null)
            {
                MapInfo.Data.TableInfoServer ti = new MapInfo.Data.TableInfoServer 

                ("BookMark", "Driver={SQL Server};Server=192.168.1.4;Database=MapXtreme; 

                Uid=sa;Pwd=68620154;DLG=0", "select * from BookMark",

                MapInfo.Data.ServerToolkit.Odbc);
                ti.CacheSettings.CacheType = CacheOption.Off;

                BookMark = MapInfo.Engine.Session.Current.Catalog.OpenTable(ti);
            }

            MIConnection con = new MIConnection();
            MICommand tc = con.CreateCommand();
            tc.CommandText = "select * from " + BookMark.Alias;
            con.Open();
            MIDataReader tr = tc.ExecuteReader();

            while (tr.Read())
            {
                var Name = tr.GetString("Name");
                var MapX = tr.GetString("MapX");
                var MapY = tr.GetString("MapY");
                var Zoom = tr.GetString("Zoom");

                BookMarks +="!" + (Name + "," + MapX + "," + MapY + "," + Zoom);
            }
            tr.Close();
            tc.Cancel();
            tc.Dispose();
           
            con.Close();
            HttpContext.Current.Response.Output.Write(BookMarks);
         }
     }

     b.双击书签,地图跳转到选择的书签

    JS代码:

    function GoToBookMark() {
        var BookMarkList = FindElement("BookMarkList");
        var index = BookMarkList.selectedIndex;
        var CurrentBookMark = MyBookMarks.GetBookMarkData(index);

        var Name = CurrentBookMark.Name;
        var MapX = CurrentBookMark.MapX;
        var MapY = CurrentBookMark.MapY;
        var Zoom = CurrentBookMark.Zoom;

        var MapImage = FindElement("MainMap_Image");
        var url = "MapController.ashx?Command=GoToBookMark&Width=" + MapImage.width +
                    "&Height=" + MapImage.height +
                    "&ExportFormat=" + MapImage.exportFormat + "&Ran=" + Math.random();


        if (MapImage.mapAlias) {
            url += "&MapAlias=" + MapImage.mapAlias;
        }
        url += "&MapX=" + MapX;
        url += "&MapY=" + MapY;
        url += "&Zoom=" + Zoom;

        var xmlHttp = CreateXMLHttp();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);
        try {
            MapImage.src = url;
        }
        catch (e) {
        }

     }

     C#代码:

     [Serializable]
     public class GoToBookMark : MapInfo.WebControls.MapBaseCommand
     {
        public GoToBookMark()
        {
            Name = "GoToBookMark";
        }
        public override void Process()
        {
            double MapX = System.Convert.ToDouble(HttpContext.Current.Request["MapX"]);
            double MapY = System.Convert.ToDouble(HttpContext.Current.Request["MapY"]);
            double Zoom = System.Convert.ToDouble(HttpContext.Current.Request["Zoom"]);

            MapControlModel model = MapControlModel.GetModelFromSession();
            MapInfo.Mapping.Map map = model.GetMapObj(MapAlias);

            map.Zoom = new MapInfo.Geometry.Distance(Zoom, map.Zoom.Unit);

            MapInfo.Geometry.DPoint center = new MapInfo.Geometry.DPoint(MapX, MapY);
            map.Center = center;

            MemoryStream ms = model.GetMap(MapAlias, MapWidth, MapHeight, ExportFormat);
            StreamImageToClient(ms);
        }
     }

     c.添加书签

     JS代码:

    function AddBookMarkToSql() {

        var MapImage = FindElement("MainMap_Image");
        var url = "MapController.ashx?Command=AddBookMarkToSql&Ran=" + Math.random();
   
        if (MapImage.mapAlias) {
            url += "&MapAlias=" + MapImage.mapAlias;
        }
        var BookMarkName = FindElement("BookMarkName");

        if (BookMarkName.value == "") {
            alert("请输入书签名称!");
            return
        }
        url += "&BookMarkName=" + BookMarkName.value;

        var xmlHttp = CreateXMLHttp();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);

        var result = xmlHttp.responseText;
        var BookMarkValue = result.split(",");

        var Name = BookMarkValue[0];
        var MapX = BookMarkValue[1];
        var MapY = BookMarkValue[2];
        var Zoom = BookMarkValue[3];
        var BookMarkList = FindElement("BookMarkList");

        BookMarkList.options.add(new Option(Name));

        MyBookMarks.AddBookMarkData(Name, MapX, MapY, Zoom);

        BookMarkName.value = "";

    }

     C#代码:

     [Serializable]
     public class AddBookMarkToSql : MapInfo.WebControls.MapBaseCommand
     {
        public AddBookMarkToSql()
        {
            Name = "AddBookMarkToSql";
        }
        public override void Process()
        {
            MapControlModel model = MapControlModel.GetModelFromSession();
            MapInfo.Mapping.Map map = model.GetMapObj(MapAlias);

            //书签的名称、中心点经纬度、比例
            var BookMarkName = HttpContext.Current.Request["BookMarkName"];
            var MapX = map.Center.x;
            var MapY = map.Center.y;
            var Zoom = map.Zoom.Value;
            //书签插入SQl数据库
            MapInfo.Data.Table BookMark = MapInfo.Engine.Session.Current.Catalog.GetTable

            ("BookMark");

            if (BookMark == null)
            {
                MapInfo.Data.TableInfoServer ti = new MapInfo.Data.TableInfoServer

                ("BookMark", "Driver={SQL Server};Server=192.168.1.4;Database=MapXtreme;

                 Uid=sa;Pwd=68620154;DLG=0", "select * from BookMark",

                 MapInfo.Data.ServerToolkit.Odbc);
                ti.CacheSettings.CacheType = CacheOption.Off;

                BookMark = MapInfo.Engine.Session.Current.Catalog.OpenTable(ti);
            }

            MIConnection con = new MIConnection();
            MICommand tc = con.CreateCommand();
            tc.CommandText = "insert into BookMark(Name,MapX,MapY,Zoom)values(

            '"+BookMarkName+"','"+MapX+"','"+MapY+"','"+Zoom+"')";

            con.Open();
            tc.ExecuteNonQuery();
            tc.Cancel();
            tc.Dispose();
            con.Close();

            //返回客户端书签的名称、中心点经纬度、比例
            HttpContext.Current.Response.Output.Write

           (BookMarkName + "," + MapX + "," + MapY + "," + Zoom);
        }
     }

     d.删除书签

     JS代码:

    function DeleteBookMarkFromSql() {
        var MapImage = FindElement("MainMap_Image");
        var url = "MapController.ashx?Command=DeleteBookMarkFromSql&Ran=" + Math.random();
        if (MapImage.mapAlias) {
            url += "&MapAlias=" + MapImage.mapAlias;
        }
        var BookMarkList = FindElement("BookMarkList");
        var index = BookMarkList.selectedIndex;
        if (index == -1) {
            alert("请选择要删除的书签!");
            return
        }
        var CurrentBookMark = MyBookMarks.GetBookMarkData(index);
        url += "&BookMarkName=" + CurrentBookMark.Name;

        var xmlHttp = CreateXMLHttp();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);

        MyBookMarks.DeleteBookMarkData(index);
        BookMarkList.options.remove(index);
    }

     C#代码:

   [Serializable]
    public class DeleteBookMarkFromSql : MapInfo.WebControls.MapBaseCommand
    {
        public DeleteBookMarkFromSql()
        {
            Name = "DeleteBookMarkFromSql";
        }
        public override void Process()
        {
            var BookMarkName = HttpContext.Current.Request["BookMarkName"];
            //删除SQL数据库的书签
            MapInfo.Data.Table BookMark = MapInfo.Engine.Session.Current.Catalog.GetTable

            ("BookMark");

            if (BookMark == null)
            {
                MapInfo.Data.TableInfoServer ti = new

                ("BookMark", "Driver={SQL Server};Server=192.168.1.4;

                MapInfo.Data.TableInfoServer   Database=MapXtreme;Uid=sa;Pwd=68620154;DLG=0",

                "select * from BookMark", MapInfo.Data.ServerToolkit.Odbc);

                ti.CacheSettings.CacheType = CacheOption.Off;

                BookMark = MapInfo.Engine.Session.Current.Catalog.OpenTable(ti);
            }

            MIConnection con = new MIConnection();
            MICommand tc = con.CreateCommand();
            tc.CommandText = "delete from BookMark where Name = '" + BookMarkName + "'";
            con.Open();
            tc.ExecuteNonQuery();
            tc.Cancel();
            tc.Dispose();
            con.Close();  
            }
        }

原创粉丝点击