User Tools

Site Tools


source_code_webeditionsample_interactwithmappoints_cs_120130.zip

Source Code WebEditionSample InteractWithMapPoints CS 120130.zip

Banner.ascx.cs

using System;
using System.IO;
public partial class Banner : System.Web.UI.UserControl
{
    private const string PreStart = "<body oncontextmenu='return false;'><pre name='code' class='c-sharp:nocontrols'>";
    private const string PreEnd = "</pre><link type='text/css' rel='stylesheet' href='../Resources/SyntaxHighlighter/SyntaxHighlighter.css'></link><script language='javascript' src='../Resources/SyntaxHighlighter/shCore.js'></script><script language='javascript' src='../Resources/SyntaxHighlighter/shBrushCSharp.js'></script><script language='javascript' src='../Resources/SyntaxHighlighter/shBrushXml.js'></script><script language='javascript'>dp.SyntaxHighlighter.HighlightAll('code');</script></body>";
    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<DrawingFeaturesEventArgs>(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<Feature> features = new Collection<Feature>();
        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<FeatureSourceColumn> columns = shapeLayer.FeatureSource.GetColumns();
        foreach (var item in columns)
        {
            data.Columns.Add(item.ColumnName);
        }
        Collection<Feature> 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[] { "<!--Split-->" }, 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" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <link href="Resources/css.css" rel="stylesheet" type="text/css" />
    <title>How to be interactive with map - Map Suite Web Sample application</title>
    <script type="text/javascript">
        function callServer(param){
            <%= ClientScript.GetCallbackEventReference(this, "param", "receiveServerData", null)%>;
        }
        function mapClientClick(e){
            var map = Map1.GetOpenLayersMap();
            var screenPoint = new OpenLayers.Pixel(e.xy.x, e.xy.y);
            var mapPoint = map.getLonLatFromViewPortPx(screenPoint);
            callServer('^'+mapPoint.lon + ','+mapPoint.lat);
        }
        function receiveServerData(columnValue){
            var map = Map1.GetOpenLayersMap();
            var layers = map.getLayersByName('DynamicOverlay');
            if (layers.length > 0){
                layers[0].mergeNewParams({extra:parseInt(Math.random() * 10)});
                layers[0].redraw(true);
            }
            var table = document.getElementById('<%=GridView1.ClientID %>');
            for (var i = 0; i < table.rows.length; i++) {
                if (table.rows[i].cells[0].innerText == columnValue)
                {
                    table.rows[i].style.backgroundColor = "#2E9AFE";
                }
                else
                {
                    table.rows[i].style.backgroundColor = "white";
                }
            }
        }
    </script>
</head>
<body onresize="resizeElementHeight()">
    <form id="form1" runat="server">
    <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 90%;">
        <tr>
            <td>
                <uc2:Banner ID="Header1" runat="server" />
            </td>
        </tr>
        <tr>
            <td align="left">
                <div id="TabContainer">
                    <a id="A1" runat="server" class="tab selected" href="#" onclick="this.className='tab selected';document.getElementById('A2').className='tab';document.getElementById('maptoggle').style.display='block';document.getElementById('sourcecode').style.display='none';">
                        Map View</a> <a id="A2" runat="server" class="tab" href="#" onclick="this.className='tab selected';document.getElementById('A1').className='tab';document.getElementById('sourcecode').style.display='block';document.getElementById('maptoggle').style.display='none';">
                            Source Code</a>
                </div>
            </td>
        </tr>
        <tr>
            <td align="center" style="height: 100%; width: 100%;">
                <div id="MapContainer">
                    <div id="maptoggle">
                        <asp:ScriptManager ID="ScriptManager1" runat="server">
                        </asp:ScriptManager>
                        <cc1:Map ID="Map1" runat="server" Height="100%" Width="100%">
                        </cc1:Map>
                        <Instruction:InstructionPanel ID="FunctionPanel" runat="server" Width="292px">
                            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" EnableModelValidation="True"
                                Style="margin-top: 0px" Height="51px" Width="95%" OnRowDataBound="GridView1_RowDataBound">
                                <%--<Columns>
                                    <asp:BoundField HeaderText="Name" DataField="Name">
                                        <ItemStyle HorizontalAlign="Center" />
                                    </asp:BoundField>
                                </Columns>--%>
                            </asp:GridView>
                        </Instruction:InstructionPanel>
                    </div>
                    <div id="sourcecode" style="display: none;">
                        <iframe height="100%" width="100%" id="sourcepage" runat="server" src="Sample.aspx.htm">
                        </iframe>
                    </div>
                </div>
            </td>
        </tr>
        <tr>
            <td>
                <uc1:Footer ID="Footer1" runat="server" />
            </td>
        </tr>
    </table>
    </form>
</body>
<script type="text/javascript">
    function resizeElementHeight() {
        var height = 0;
        var body = window.document.body;
        if (window.innerHeight) {
            height = window.innerHeight;
        } else if (body.parentElement.clientHeight) {
            height = body.parentElement.clientHeight;
        } else if (body && body.clientHeight) {
            height = body.clientHeight;
        }
        document.getElementById('MapContainer').style.height = ((height - 170) + "px");
    }
    var alreadyrun = 0
    if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", function () { alreadyrun = 1; resizeElementHeight() }, false)
    else if (document.all && !window.opera) {
        document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>')
        var contentloadtag = document.getElementById("contentloadtag")
        contentloadtag.onreadystatechange = function () {
            if (this.readyState == "complete") {
                alreadyrun = 1
                resizeElementHeight()
            }
        }
    }
    window.onload = function () {
        setTimeout("if (!alreadyrun) resizeElementHeight()", 0)
    }
</script>
</html>
source_code_webeditionsample_interactwithmappoints_cs_120130.zip.txt · Last modified: 2015/09/09 03:37 by admin