using System;
using System.IO;
public partial class Banner : System.Web.UI.UserControl
{
private const string PreStart = "";
private const string PreEnd = "
";
private const string ErrorPageUrl = "~/Source Code Not Available in Beta.html";
protected void Page_Load(object sender, EventArgs e)
{
string filename = "Sample.aspx.cs";
string htmlFileName = filename.Replace(".cs", ".htm");
if (File.Exists(htmlFileName))
{
return;
}
string text;
try
{
using (StreamReader sr = new StreamReader(Server.MapPath(filename)))
{
text = sr.ReadToEnd();
}
text = PreStart + text + PreEnd;
using (StreamWriter sw = new StreamWriter(Server.MapPath(htmlFileName)))
{
sw.Write(text);
}
}
catch
{
htmlFileName = ErrorPageUrl;
}
return;
}
}
====Footer.ascx.cs====
using System;
public partial class Footer : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
====Sample.aspx.cs====
using System;
using System.Collections.ObjectModel;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.WebControls;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.WebEdition;
public partial class Sample : System.Web.UI.Page, ICallbackEventHandler
{
private string columnValue = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Map1.MapUnit = GeographyUnit.DecimalDegree;
Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.White);
Map1.OnClientClick = "mapClientClick";
WorldMapKitLayer worldLayer = new WorldMapKitLayer();
ShapeFileFeatureLayer shapeLayer = new ShapeFileFeatureLayer(Server.MapPath(@"/Data/FriscoHotels.shp"));
shapeLayer.Open();
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.Red, 12,GeoColor.StandardColors.Black,1);
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
shapeLayer.DrawingFeatures += new EventHandler(shapeLayer_DrawingFeatures);
Map1.StaticOverlay.Layers.Add("WorldMapLayer", worldLayer);
Map1.DynamicOverlay.Layers.Add("ShapeLayer", shapeLayer);
Map1.CurrentExtent = shapeLayer.GetBoundingBox();
DataTable data = GetDataTable(shapeLayer);
GridView1.DataSource = data;
GridView1.DataBind();
InMemoryFeatureLayer highLightLayer = new InMemoryFeatureLayer();
highLightLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.FromHtml("#2E9AFE"), 13, GeoColor.StandardColors.Black, 2);
highLightLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
Map1.DynamicOverlay.Layers.Add("HighLightLayer", highLightLayer);
Map1.DynamicOverlay.TransitionEffect = TransitionEffect.Stretching;
}
}
void shapeLayer_DrawingFeatures(object sender, DrawingFeaturesEventArgs e)
{
InMemoryFeatureLayer highLightLayer = (InMemoryFeatureLayer)Map1.DynamicOverlay.Layers["HighLightLayer"];
if (highLightLayer.InternalFeatures.Count > 0)
{
Feature feature = highLightLayer.InternalFeatures[0];
var featuresToRemove = e.FeaturesToDraw.Where(f => f.Id == feature.Id);
if (featuresToRemove.Count() > 0)
{
e.FeaturesToDraw.Remove(featuresToRemove.ElementAt(0));
}
}
}
public string GetCallbackResult()
{
return columnValue;
}
public void RaiseCallbackEvent(string eventArgument)
{
Collection features = new Collection();
ShapeFileFeatureLayer shapeLayer = (ShapeFileFeatureLayer)Map1.DynamicOverlay.Layers["ShapeLayer"];
shapeLayer.Open();
string columnName = shapeLayer.FeatureSource.GetColumns()[0].ColumnName;
if (eventArgument.StartsWith("^"))
{
string[] lonLat = eventArgument.TrimStart('^').Split(',');
float lon = 0;
float lat = 0;
if (float.TryParse(lonLat[0], NumberStyles.Number, CultureInfo.InvariantCulture, out lon)
&& float.TryParse(lonLat[1], NumberStyles.Number, CultureInfo.InvariantCulture, out lat))
{
PointShape point = new PointShape(lon, lat);
features = shapeLayer.QueryTools.GetFeaturesNearestTo(point, GeographyUnit.DecimalDegree, 1, new string[] { columnName }, 1, DistanceUnit.Kilometer);
}
}
else
{
features = shapeLayer.QueryTools.GetFeaturesByColumnValue(columnName, eventArgument);
}
InMemoryFeatureLayer highLightLayer = (InMemoryFeatureLayer)Map1.DynamicOverlay.Layers["HighLightLayer"];
highLightLayer.InternalFeatures.Clear();
if (features.Count > 0)
{
highLightLayer.InternalFeatures.Add(features[0].Id, features[0]);
columnValue = features[0].ColumnValues[columnName];
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Attributes.Add("onclick", "callServer('" + Server.HtmlDecode(e.Row.Cells[0].Text) + "')");
}
private static DataTable GetDataTable(ShapeFileFeatureLayer shapeLayer)
{
DataTable data = new DataTable();
Collection columns = shapeLayer.FeatureSource.GetColumns();
foreach (var item in columns)
{
data.Columns.Add(item.ColumnName);
}
Collection features = shapeLayer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);
foreach (var item in features)
{
DataRow row = data.NewRow();
foreach (var keyValuePaire in item.ColumnValues)
{
row[keyValuePaire.Key] = keyValuePaire.Value;
}
data.Rows.Add(row);
}
return data;
}
}
====InstructionsPanel.cs====
using System;
using System.ComponentModel;
using System.IO;
using System.Web.UI.WebControls;
namespace InteractWithMapPoints
{
// This class represents the "instructions" floating panel.
[ToolboxItem(false)]
public class InstructionPanel : Panel
{
protected override void OnPreRender(System.EventArgs e)
{
StreamReader reader = File.OpenText(Page.MapPath("~/Resources/InstructionsPanel/InstructionsPanel.js"));
string script = reader.ReadToEnd();
reader.Close();
Page.ClientScript.RegisterClientScriptBlock(GetType(), "PanelScript", script, true);
base.OnPreRender(e);
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
StreamReader reader = File.OpenText(Page.MapPath("~/Resources/InstructionsPanel/InstructionsPanel.htm"));
string[] script = reader.ReadToEnd().Split(new string[] { "" }, StringSplitOptions.RemoveEmptyEntries);
reader.Close();
writer.WriteLine(script[0].Trim());
base.Render(writer);
writer.WriteLine(script[1].Trim());
}
}
}
====Sample.aspx====
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Sample.aspx.cs" Inherits="Sample" %>
<%@ Register Assembly="WebEdition" Namespace="ThinkGeo.MapSuite.WebEdition" TagPrefix="cc1" %>
<%@ Register Src="Footer.ascx" TagName="Footer" TagPrefix="uc1" %>
<%@ Register Src="Banner.ascx" TagName="Banner" TagPrefix="uc2" %>
How to be interactive with map - Map Suite Web Sample application