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.Configuration; using System.Collections.ObjectModel; using ThinkGeo.MapSuite.Core; using ThinkGeo.MapSuite.WebEdition; namespace GetFeatureClickedOnWeb { public partial class TestForm : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF")); Map1.CurrentExtent = new RectangleShape(-97.7583, 30.2714, -97.7444, 30.2632); Map1.MapUnit = GeographyUnit.DecimalDegree; Map1.MapTools.MouseCoordinate.Enabled = true; LayerOverlay streetOverlay = new LayerOverlay("StreetOverlay", false, TileType.SingleTile); streetOverlay.IsBaseOverlay = false; string shapePath = MapPath("App_Data Streets.shp"); ShapeFileFeatureLayer streetLayer = new ShapeFileFeatureLayer(shapePath); streetLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1; streetLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; streetOverlay.Layers.Add("StreetLayer", streetLayer); Map1.CustomOverlays.Add(streetOverlay); //InMemoryFeature to show the selected feature (the feature clicked on). InMemoryFeatureLayer selectLayer = new InMemoryFeatureLayer(); selectLayer.Open(); selectLayer.Columns.Add(new FeatureSourceColumn("FENAME")); selectLayer.Close(); selectLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.FromArgb(150, GeoColor.StandardColors.Red), 10, true); selectLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.LocalRoad1("FENAME"); selectLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; LayerOverlay selectOverlay = new LayerOverlay(); selectOverlay.Layers.Add("SelectLayer", selectLayer); selectOverlay.IsBaseOverlay = false; Map1.CustomOverlays.Add(selectOverlay); } } protected void Map1_Click(object sender, MapClickedEventArgs e) { //Here we use a buffer of 15 in screen coordinate. This means that regardless of the zoom level, we will always find the nearest feature //within 15 pixels to where we clicked. int screenBuffer = 15; //Here we have to use the ToScreencoordinate function because the MapClickedEventArgs does not provide the mouse screen position, only the //mouse world position. ScreenPointF clickedPointF = ExtentHelper.ToScreenCoordinate(Map1.CurrentExtent, e.Position, (float)Map1.Width.Value, (float)Map1.Height.Value); ScreenPointF bufferPointF = new ScreenPointF(clickedPointF.X + screenBuffer, clickedPointF.Y); //Logic for converting screen coordinate values to world coordinate for the spatial query. Notice that the distance buffer for the spatial query //will change according to the zoom level while it remains the same for the screen buffer distance. double distanceBuffer = ExtentHelper.GetWorldDistanceBetweenTwoScreenPoints(Map1.CurrentExtent, clickedPointF, bufferPointF, (float)Map1.Width.Value, (float)Map1.Height.Value, Map1.MapUnit, DistanceUnit.Meter); LayerOverlay streetOverlay = (LayerOverlay)Map1.CustomOverlays[0]; ShapeFileFeatureLayer streetLayer = (ShapeFileFeatureLayer)streetOverlay.Layers["StreetLayer"]; Collection<string> columnNames = new Collection<string>(); columnNames.Add("FENAME"); streetLayer.Open(); Collection<Feature> features = streetLayer.FeatureSource.GetFeaturesNearestTo(new PointShape(e.Position.X, e.Position.Y), Map1.MapUnit, 1, columnNames, distanceBuffer, DistanceUnit.Meter); streetLayer.Close(); //Adds the feature clicked on to the selected layer to be displayed as highlighed and with the name labeled. LayerOverlay selectOverlay = (LayerOverlay)Map1.CustomOverlays[1]; InMemoryFeatureLayer selectLayer = (InMemoryFeatureLayer)selectOverlay.Layers["SelectLayer"]; selectLayer.InternalFeatures.Clear(); if (features.Count > 0) { selectLayer.InternalFeatures.Add(features[0]); } selectOverlay.Redraw(); } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestForm.aspx.cs" Inherits="GetFeatureClickedOnWeb.TestForm" %> <%@ Register Assembly="WebEdition" Namespace="ThinkGeo.MapSuite.WebEdition" TagPrefix="cc1" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <link href="~/theme/default/samplepic/style.css" rel="stylesheet" type="text/css" /> <title>Get Feature Clicked On</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <cc1:Map ID="Map1" runat="server" Height="100%" Width="100%" onclick="Map1_Click"> </cc1:Map> <%-- <description:descriptionpanel ID="DescPanel" runat="server"> This sample shows how to get the feature clicked on. <br /> <br /> <asp:Button CssClass="btn" ID="btnRoad" runat="server" Text="Normal" OnClientClick="Map1.SetCurrentBackgroundMapType(G_NORMAL_MAP); return false;" /> <asp:Button CssClass="btn" ID="btnAerial" runat="server" Text="Hybrid" OnClientClick="Map1.SetCurrentBackgroundMapType(G_HYBRID_MAP); return false;" /><br /> <asp:Button CssClass="btn" ID="btnSatellite" runat="server" Text="Satellite" OnClientClick="Map1.SetCurrentBackgroundMapType(G_SATELLITE_MAP); return false;" /> <asp:Button CssClass="btn" ID="btnPhysical" runat="server" Text="Physical" OnClientClick="Map1.SetCurrentBackgroundMapType(G_PHYSICAL_MAP); return false;" /> </description:descriptionpanel>--%> </form> </body> </html>