User Tools

Site Tools


source_code_webeditionsample_callbackforfleettracker_cs.zip

Source Code WebEditionSample CallbackForFleetTracker CS.zip

JsonSerializeHelper.cs

using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
namespace CallbackForFleetTracker {
    /// <summary>
    /// This class helps to serialize object to Json string and deserialize Json string to Object.
    /// </summary>
    public static class JsonSerializeHelper {
        /// <summary>
        /// This method serialzies an object to Json string.
        /// </summary>
        /// <param name="targetValue">An object value which uses for serialization.</param>
        /// <returns>A string value indicates the serialized Json string</returns>
        public static string Serialize<T>(T targetValue) {
            string result = String.Empty;
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(targetValue.GetType());
            using (MemoryStream jsonStream = new MemoryStream()) {
                jsonSerializer.WriteObject(jsonStream, targetValue);
                result = Encoding.Default.GetString(jsonStream.GetBuffer());
                jsonStream.Close();
            }
            return result.Trim('\0');
        }
        /// <summary>
        /// This method deserialized a Json string back to the specified object.
        /// </summary>
        /// <param name="targetValue">A Json string which is used for deserialization.</param>
        /// <param name="targetType">Target type of current deserialization.</param>
        /// <returns>An object which is deserialized from the Json string.</returns>
        public static T Deserialize<T>(string targetValue) {
            T obj = Activator.CreateInstance<T>();
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
            byte[] buffer = Encoding.Default.GetBytes(targetValue);
            using (MemoryStream stream = new MemoryStream(buffer)) {
                T result = (T)jsonSerializer.ReadObject(stream);
                return result;
            }
        }
    }
}

TestForm.aspx.cs

using System;
using System.Collections.ObjectModel;
using System.Web.UI;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.WebEdition;
namespace CallbackForFleetTracker {
    public partial class TestForm : System.Web.UI.Page, ICallbackEventHandler {
        private static string result = string.Empty;
        //Start position for the six vehicles
        private static double[,] startPositions = { { -95.26095, 38.93926 }, { -95.26086, 38.96956 }, { -95.25919, 38.96758 }, { -95.29056, 38.95703 }, { -95.22653, 38.94278 }, { -95.26987, 38.93531 } };
        Collection<JsonVehicle> vehicles = new Collection<JsonVehicle>();
        protected void Page_Load(object sender, EventArgs e) {
            if (!Page.IsPostBack) {
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                Map1.MapUnit = GeographyUnit.DecimalDegree;
                Map1.CurrentExtent = new RectangleShape(-95.31105, 38.98184, -95.20359, 38.92185);
                Map1.MapTools.OverlaySwitcher.Enabled = true;
                Map1.MapTools.MouseCoordinate.Enabled = true;
                Map1.MapTools.MiniMap.Enabled = true;
                WorldMapKitWmsWebOverlay worldMapKitWmsWebOverlay = new WorldMapKitWmsWebOverlay();
                Map1.CustomOverlays.Add(worldMapKitWmsWebOverlay);
            }
        }
        public void RaiseCallbackEvent(String eventArgument) {
            vehicles.Clear();
            for (int i = 0; i < startPositions.GetLength(0); i++) {
                double lon = startPositions[i,|0] + new Random().Next(-12, 20) / 5000.0;
                double lat = startPositions[i,|1] + new Random().Next(-11, 26) / 5000.0;
                startPositions[i,|0] = lon;
                startPositions[i,|1] = lat;
                JsonVehicle vehicle = new JsonVehicle("vehicle" + (i + 1), "vehicle_van_" + (i + 1) + ".png", lon, lat);
                vehicles.Add(vehicle);
            }
            result = JsonSerializeHelper.Serialize<Collection<JsonVehicle>>(vehicles);
        }
        public string GetCallbackResult() {
            //Return the vehicle data to client using callback
            return result;
        }
    }
}

Vehicle.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ThinkGeo.MapSuite.Core;
using System.Runtime.Serialization;
using System.Globalization;
namespace CallbackForFleetTracker {
    /// <summary>
    /// Summary description for VehicleStatus
    /// </summary>
    [DataContract(Name|= "Vehicle")]
    public class JsonVehicle {
        public JsonVehicle()
            : this(String.Empty, String.Empty, double.NaN, double.NaN) { }
        public JsonVehicle(string id, string imageName, double longitude, double latitude)
            : base() {
            Id = id;
            ImageName = imageName;
            Longitude = longitude;
            Latitude = latitude;
        }
        [DataMember(Name = "id")]
        public string Id { get; set; }
        [DataMember(Name = "n")]
        public string ImageName { get; set; }
        [DataMember(Name = "x")]
        public double Longitude { get; set; }
        [DataMember(Name = "y")]
        public double Latitude { get; set; }
    }
}

Footer.ascx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CenterMapBasedOnLatLong.UC
{
    public partial class Footer : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

Header.ascx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CenterMapBasedOnLatLong.UC
{
    public partial class Header : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

TestForm.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestForm.aspx.cs" Inherits="CallbackForFleetTracker.TestForm" %>
<%@ Register Assembly="WebEdition" Namespace="ThinkGeo.MapSuite.WebEdition" TagPrefix="cc1" %>
<%@ Register Src="UC/Footer.ascx" TagName="Footer" TagPrefix="uc1" %>
<%@ Register Src="UC/Header.ascx" TagName="Header" TagPrefix="uc2" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <link href="Theme/css.css" rel="stylesheet" type="text/css" />
    <title>CallbackForFleetTracker</title>
    <script type="text/javascript">
        var olMap = null;
        var markers = null;
        var OnMapCreating = function(map) {
            markers = new OpenLayers.Layer.Markers("Markers");
            Map1.GetOpenLayersMap().addLayer(markers);
        };
        var OnMapCreated = function(map) {
            var timer = window.setInterval(Function.createDelegate({ 'args': "args", 'context': document.getElementById('message') }, function(evt) {
                var args = this.args;
                var context = this.context;
                <%=ClientScript.GetCallbackEventReference(this, "args", "Success", "context", "Error", true) %>;
            }), 3000);
        };
        function Success(args, context) {
            var vehicles = Sys.Serialization.JavaScriptSerializer.deserialize(args);
            if (markers.markers != null) {
                 while (markers.markers.length > 0) {
                        markers.markers[0].destroy();
                        markers.removeMarker(markers.markers[0]);
                    }
            }
            olMap = Map1.GetOpenLayersMap();
            if (olMap.popups != null) {
                while (olMap.popups.length > 0) {
                    olMap.popups[0].destroy();
                }
            }
            for(var i = 0; i<vehicles.length; i++)
            {
                var vehicle = vehicles[i];
                var size = new OpenLayers.Size(32, 32);
                var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
                var icon = new OpenLayers.Icon('../../theme/' + vehicle.n, size, offset);
                var marker = new OpenLayers.Marker(new OpenLayers.LonLat(vehicle.x, vehicle.y), icon);
                markers.addMarker(marker);
                AddPopup(marker, vehicle.id, vehicle.y, vehicle.x, "siteDesc", "DisplayText");
            }
        }
        function Error(args, context) {
            message.innerText = 'EXCEPTION';
        }
        function AddPopup(marker, siteId, lat, lon, siteDesc, DisplayText) {
            var tmp_X = 0;
            var tmp_Y = 0;
            var content = "<span class='popup'>\r\n"
            content = content + "<div>" + siteId + "</div>\r\n"
            content = content + "<div>" + siteDesc + "</div>\r\n"
            content = content + "<div>" + DisplayText + "</div>\r\n"
            content = content + "</span>"
            var popup = new OpenLayers.Popup.FramedCloud(siteId,
                   new OpenLayers.LonLat(parseFloat(lon), parseFloat(lat)),
                   new OpenLayers.Size(200, 200),
                   content,
                   null,
                   true);
            olMap = Map1.GetOpenLayersMap();
            olMap.addPopup(popup);
            popup.hide();
            for (i in olMap.popups) {
                if (olMap.popups[i].visible && olMap.popups[i] != popup) {
                    olMap.popups[i].hide();
                }
            }
            marker.events.register('mouseover', popup, function(evt) {
                popup.show();
            });
            marker.events.register('mouseout', popup, function(evt) {
                for (i in olMap.popups) {
                    if (olMap.popups[i].visible) {
                        olMap.popups[i].hide();
                    }
                }
            });
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <table border="0px" width="100%" cellpadding="0px" cellspacing="0px" style="height: 100%;">
        <tr>
            <td style="height: 80px;">
                <uc2:Header ID="Header1" runat="server" />
            </td>
        </tr>
        <tr>
            <td style="height: 100%; border-top: solid 1px #ece9d8;">
                <asp:ScriptManager ID="ScriptManager1" runat="server">
                </asp:ScriptManager>
                <cc1:Map ID="Map1" runat="server" Height="100%" Width="100%">
                </cc1:Map>
            </td>
        </tr>
        <tr>
            <td style="height: 50px; border-top: outset 0px #666666; background-color: #ece9d8;">
                <uc1:Footer ID="Footer1" runat="server" />
            </td>
        </tr>
    </table>
    <div id="Message">
    </div>
    </form>
</body>
</html>
source_code_webeditionsample_callbackforfleettracker_cs.zip.txt · Last modified: 2015/09/09 05:41 by admin