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;
}
}