User Tools

Site Tools


source_code_webeditionsample_getfeatureclickedon2_cs_100726.zip

Source Code WebEditionSample GetFeatureClickedOn2 CS 100726.zip

TestForm.aspx.cs

using System;
using System.Configuration;
using System.Collections.ObjectModel;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.WebEdition;
namespace GetFeatureClickedOnWeb2
{
    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.7567,30.2701,-97.7361,30.2592);
                Map1.MapUnit = GeographyUnit.DecimalDegree;
                Map1.MapTools.MouseCoordinate.Enabled = true;
                LayerOverlay layerOverlay = new LayerOverlay("StreetOverlay", false, TileType.SingleTile);
                layerOverlay.IsBaseOverlay = false;
                string polygonPath = MapPath("App_Data
polygons.shp");
                ShapeFileFeatureLayer polygonLayer = new ShapeFileFeatureLayer(polygonPath);
                polygonLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightGreen);
                polygonLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layerOverlay.Layers.Add("PolygonLayer", polygonLayer);
                string polygonPath2 = MapPath("App_Data
polygons2.shp");
                ShapeFileFeatureLayer polygonLayer2 = new ShapeFileFeatureLayer(polygonPath2);
                polygonLayer2.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightSteelBlue);
                polygonLayer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layerOverlay.Layers.Add("PolygonLayer2", polygonLayer2);
                string streetPath = MapPath("App_Data
Streets.shp");
                ShapeFileFeatureLayer streetLayer = new ShapeFileFeatureLayer(streetPath);
                streetLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1;
                streetLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layerOverlay.Layers.Add("StreetLayer", streetLayer);
                string pointPath = MapPath("App_Data
points.shp");
                ShapeFileFeatureLayer pointLayer = new ShapeFileFeatureLayer(pointPath);
                pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.LightPink,
                                                                          GeoColor.StandardColors.Black,10);
                pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layerOverlay.Layers.Add("PointLayer", pointLayer);
                string pointPath2 = MapPath("App_Data
points2.shp");
                ShapeFileFeatureLayer pointLayer2 = new ShapeFileFeatureLayer(pointPath2);
                pointLayer2.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.LightSeaGreen,
                                                                          GeoColor.StandardColors.Black, 10);
                pointLayer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layerOverlay.Layers.Add("PointLayer2", pointLayer2);
                Map1.CustomOverlays.Add(layerOverlay);
                //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.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.FromArgb(150, GeoColor.StandardColors.Red), 10);
                selectLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(150, GeoColor.StandardColors.Red));
                selectLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                LayerOverlay selectOverlay = new LayerOverlay();
                selectOverlay.Layers.Add("SelectLayer", selectLayer);
                selectOverlay.IsBaseOverlay = false;
                Map1.CustomOverlays.Add(selectOverlay);
 
                ScaleBarAdornmentLayer scaleBar = new ScaleBarAdornmentLayer();
                scaleBar.UnitFamily = UnitSystem.Metric;
                scaleBar.Location = AdornmentLocation.LowerLeft;
                LayerOverlay adornmentLayerOverlay = new LayerOverlay("AdornmentOverlay", false, TileType.SingleTile);
                adornmentLayerOverlay.Layers.Add(scaleBar);
                Map1.CustomOverlays.Add(adornmentLayerOverlay);
             }
        }
        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 1 pixels to where we clicked.
            int screenBuffer = 1;
            //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 layerOverlay = (LayerOverlay)Map1.CustomOverlays[0];
            //Loops thru all the layers to find the nearest feature clicked on giving priority to point features, then line features and
            //last to polygon features.
            //We have that priority order because due to the gemetric nature polygons and then lines are more likely to be clicked on.
            Feature closestPointFeature = new Feature();
            Feature closestLineFeature = new Feature();
            Feature closestPolygonFeature = new Feature();
            double minPointDist=  double.MaxValue ;
            double minLineDist = double.MaxValue;
            double minPolygonDist = double.MaxValue;
            foreach (ShapeFileFeatureLayer shapefileLayer in layerOverlay.Layers)
            {
                shapefileLayer.Open();
                PointShape pointShape = new PointShape(e.Position.X, e.Position.Y);
                Collection<Feature> tempFeatures = shapefileLayer.FeatureSource.GetFeaturesNearestTo(pointShape, Map1.MapUnit, 1,
                                                                                                ReturningColumnsType.NoColumns);
                shapefileLayer.Close();
                if (tempFeatures.Count > 0)
                {
                    BaseShape baseShape = tempFeatures[0].GetShape();
                    double currentDist = baseShape.GetDistanceTo(pointShape, Map1.MapUnit, DistanceUnit.Meter);
                    switch (baseShape.GetType().Name)
                    {
                        case "MultipolygonShape":
                            if ((currentDist < minPolygonDist)&& (currentDist <= distanceBuffer))
                            {
                                closestPolygonFeature = tempFeatures[0];
                                minPolygonDist = currentDist;
                            }
                            break;
                        case "MultilineShape":
                            if ((currentDist < minLineDist)&& (currentDist <= distanceBuffer))
                            {
                                closestLineFeature = tempFeatures[0];
                                minLineDist = currentDist;
                            }
                            break;
                        case "PointShape":
                            if ((currentDist < minPointDist)&& (currentDist <= distanceBuffer))
                            {
                                closestPointFeature = tempFeatures[0];
                                minPointDist = currentDist;
                            }
                            break;
                    }
                }
            }
            LayerOverlay selectOverlay = (LayerOverlay)Map1.CustomOverlays[1];
            InMemoryFeatureLayer selectLayer = (InMemoryFeatureLayer)selectOverlay.Layers["SelectLayer"];
            selectLayer.InternalFeatures.Clear();
            if (minPointDist < double.MaxValue)
            {
                selectLayer.InternalFeatures.Add(closestPointFeature);
            }
            else if (minLineDist < double.MaxValue)
            {
                selectLayer.InternalFeatures.Add(closestLineFeature);
            }
            else if (minPolygonDist < double.MaxValue)
            {
                selectLayer.InternalFeatures.Add(closestPolygonFeature);
            }
            selectOverlay.Redraw();
        }
    }
}

TestForm.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestForm.aspx.cs" Inherits="GetFeatureClickedOnWeb2.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>
source_code_webeditionsample_getfeatureclickedon2_cs_100726.zip.txt · Last modified: 2015/09/09 03:37 by admin