ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
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; } } } }
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; } } }
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; } } }
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) { } } }
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) { } } }
<%@ 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>