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.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Globalization; using System.Linq; using System.Text; using System.Web.UI.WebControls; using ThinkGeo.MapSuite.Core; using ThinkGeo.MapSuite.MapSuiteGeocoder; using ThinkGeo.MapSuite.WebEdition; namespace ThinkGeo.MapSuite.GeoCoderExamples { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // Initialize the map. Map1.MapUnit = GeographyUnit.DecimalDegree; Map1.CustomOverlays.Add(new WorldMapKitWmsWebOverlay("WMKOverlay")); Map1.CustomOverlays.Add(new SimpleMarkerOverlay("MarkerOverlay")); Map1.CurrentExtent = new RectangleShape(-88.3330001640625, 42.5966329101563, -86.9157638359375, 41.1629170898438); // Find result by default address. Collection<GeocoderMatch> matchedItems = SearchAddress(ddlGeoCoderDemoItems.SelectedValue); FillMarkers(matchedItems); FillResultTable(matchedItems); } } protected void BtnSearch_Click(object sender, EventArgs e) { Collection<GeocoderMatch> matchedItems = new Collection<GeocoderMatch>(); if (ddlSearchType.SelectedIndex == 0) { matchedItems = SearchAddress(ddlGeoCoderDemoItems.SelectedValue); } else { matchedItems = SearchAddress(ddlReverseGeoCoderDemoItems.SelectedValue); } FillMarkers(matchedItems); FillResultTable(matchedItems); } protected void BtnClear_Click(object sender, EventArgs e) { GridView1.DataSource = null; GridView1.DataBind(); SimpleMarkerOverlay simpleMarkerOverlay = (SimpleMarkerOverlay)Map1.CustomOverlays["MarkerOverlay"]; simpleMarkerOverlay.Markers.Clear(); } protected void GridView1_OnRowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Find") { ImageButton imageButton = (ImageButton)e.CommandSource; TableCellCollection cells = ((GridViewRow)imageButton.Parent.Parent).Cells; string shapeWkt = cells[cells.Count|- 1].Text; if (!string.IsNullOrEmpty(shapeWkt)) { BaseShape targetShape = BaseShape.CreateShapeFromWellKnownData(shapeWkt); PointShape targetWorldCenterPoint = targetShape as PointShape; if (targetWorldCenterPoint != null && targetWorldCenterPoint.X != 0) { Map1.ZoomTo(targetWorldCenterPoint, new ZoomLevelSet().ZoomLevel20.Scale); } } } } private Collection<GeocoderMatch> SearchAddress(string text) { Collection<GeocoderMatch> results; UsaGeocoder usaGeocoder = new UsaGeocoder(MapPath("~/App_Data/"), MatchMode.ExactMatch); try { usaGeocoder.Open(); results = usaGeocoder.Match(text); } finally { usaGeocoder.Close(); } Collection<GeocoderMatch> searchResultItems = new Collection<GeocoderMatch>(); string searchType = ddlSearchType.SelectedIndex == 0 ? "Street" : string.Empty; foreach (GeocoderMatch item in results) { if (string.IsNullOrEmpty(searchType) || item.NameValuePairs.ContainsKey(searchType)) { // Add address marker to map. searchResultItems.Add(item); } } return searchResultItems; } private void FillMarkers(IEnumerable<GeocoderMatch> matches) { MultipointShape resultPoints = new MultipointShape(); SimpleMarkerOverlay simpleMarkerOverlay = (SimpleMarkerOverlay)Map1.CustomOverlays["MarkerOverlay"]; simpleMarkerOverlay.Markers.Clear(); foreach (GeocoderMatch matchItem in matches) { PointShape point = new PointShape(matchItem.NameValuePairs["CentroidPoint"]); resultPoints.Points.Add(point); // Get the popup context. string popupContext = GetPopupContent(matchItem); CustomPopup popup = new CustomPopup("", point, popupContext); popup.BorderWidth = 1; popup.IsVisible = false; popup.AutoSize = true; Marker marker = new Marker(point) { WebImage = new WebImage("/Images/marker.png") }; marker.Popup = popup; simpleMarkerOverlay.Markers.Add(marker); } if (resultPoints.Points.Count == 1) { Map1.ZoomTo(resultPoints.Points[0], new ZoomLevelSet().ZoomLevel20.Scale); } else if (resultPoints.Points.Count > 1) { Map1.CurrentExtent = resultPoints.GetBoundingBox(); } } private void FillResultTable(IList<GeocoderMatch> searchResultItems) { DataTable resultTable = new DataTable(); if (searchResultItems.Count > 0) { foreach (var nameValuePair in searchResultItems[0].NameValuePairs) { DataColumn column = new DataColumn { ColumnName = nameValuePair.Key }; resultTable.Columns.Add(column); } foreach (var searchResultItem in searchResultItems) { DataRow row = resultTable.NewRow(); foreach (var nameValuePair in searchResultItem.NameValuePairs) { row[nameValuePair.Key] = nameValuePair.Value; } resultTable.Rows.Add(row); } } GridView1.DataSource = resultTable; GridView1.DataBind(); } private static string GetPopupContent(GeocoderMatch matchItem) { string[] streetkeyList = { "Street", "Zip", "State" }; StringBuilder keyValuesBuilder = new StringBuilder(); foreach (string item in streetkeyList) { keyValuesBuilder.Append(string.Format(CultureInfo.InvariantCulture, "{0} ", matchItem.NameValuePairs[item])); } string headerText = keyValuesBuilder.ToString(); StringBuilder popupHtml = new StringBuilder("<table>"); popupHtml.Append(string.Format(CultureInfo.InvariantCulture, "<tr><td colspan='2' class='popupTitle noBoder'>{0}</td></tr>", headerText)); popupHtml.Append("<tr><td colspan='2' class='noBoder'><div class='hrLine'></div></td></tr>"); foreach (var pair in matchItem.NameValuePairs.Take(5)) { popupHtml.Append(string.Format("<tr class='popupText'><td class='noBoder'>{0} : </td><td class='noBoder'>{1}</td></tr>", pair.Key, pair.Value)); } popupHtml.Append("</table>"); return popupHtml.ToString(); } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ThinkGeo.MapSuite.GeoCoderExamples.Default" %> <%@ Register Assembly="WebEdition" Namespace="ThinkGeo.MapSuite.WebEdition" TagPrefix="cc1" %> <!DOCTYPE html> <html xml:en-us"> <head id="Head1" runat="server"> <title>Chicago Address Locator</title> <link href="Images/MapSuite.ico" rel="shortcut icon" type="Images/x-icon" /> <link href="Styles/style.css" rel="stylesheet" type="text/css" /> <script src="Scripts/jquery-1.10.2.js" type="text/javascript"></script> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div id="container"> <div id="header"> <div id="left-header"> <span id="header-mapsuite">Map Suite</span> <span id="header-title">Chicago Address Locator</span> </div> </div> <div id="content-container"> <div id="left-content"> <div id="left-content-container"> <h4> Search Types: </h4> <asp:DropDownList ID="ddlSearchType" runat="server" Width="98%" onchange="JavaScript:selectChange(this);"> <asp:ListItem Selected="True" Value="0">Geocoder</asp:ListItem> <asp:ListItem Value="1">Reverse Geocoder</asp:ListItem> </asp:DropDownList> <h4 id="lblSelectAddress"> Select an Address: </h4> <div id="geocoderPanel"> <span class="titleDescrition">(ex: '5300 N Winthrop Ave' etc.) </span> <asp:DropDownList ID="ddlGeoCoderDemoItems" runat="server" Width="98%"> <asp:ListItem>5300 N Winthrop Ave</asp:ListItem> <asp:ListItem>1401 W Ainslie St</asp:ListItem> <asp:ListItem>1401 W Estes Ave</asp:ListItem> <asp:ListItem>7430 N Seeley Ave</asp:ListItem> <asp:ListItem>7400 N Greenview Ave</asp:ListItem> <asp:ListItem>1101 W Farwell Ave</asp:ListItem> </asp:DropDownList> </div> <div id="reverseGeoCoderPanel" style="display: none;"> <span class="titleDescrition">(ex: '42.011431 -87.678457' etc.) </span> <asp:DropDownList ID="ddlReverseGeoCoderDemoItems" runat="server" Width="98%"> <asp:ListItem>42.020431 -87.666757</asp:ListItem> <asp:ListItem>42.017069 -87.672102</asp:ListItem> <asp:ListItem>42.016106 -87.668558</asp:ListItem> <asp:ListItem>42.005451 -87.664937</asp:ListItem> <asp:ListItem>42.011431 -87.678457</asp:ListItem> <asp:ListItem>42.013912 -87.699847</asp:ListItem> </asp:DropDownList> </div> <div class="buttonRight"> <asp:Button ID="BtnSearch" runat="server" Text="Locate" OnClick="BtnSearch_Click" /> <asp:Button ID="BtnClear" runat="server" Text="Clear" OnClick="BtnClear_Click" /> </div> </div> </div> <div id="toggle"> <img id="collapse" alt="collapse" src="Images/collapse.gif" /> </div> <div id="right-content"> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <div id="mapContainer"> <cc1:Map ID="Map1" runat="server" Width="100%" Height="100%" MapUnit="DecimalDegree"> </cc1:Map> </div> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="BtnSearch" /> <asp:AsyncPostBackTrigger ControlID="BtnClear" /> </Triggers> </asp:UpdatePanel> <asp:UpdatePanel ID="UpdatePanel2" runat="server"> <ContentTemplate> <div id="resultContainer"> <div class="grid-contianer"> <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_OnRowCommand"> <EmptyDataTemplate> No match found </EmptyDataTemplate> <Columns> <asp:TemplateField> <ItemTemplate> <asp:ImageButton ID="Image1" runat="server" ImageUrl='/Images/find.png' CommandName="Find"> </asp:ImageButton> </ItemTemplate> </asp:TemplateField> </Columns> <HeaderStyle CssClass="result-header" /> </asp:GridView> </div> </div> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="BtnSearch" /> <asp:AsyncPostBackTrigger ControlID="BtnClear" /> </Triggers> </asp:UpdatePanel> </div> </div> </div> <div id="footer"> <span id="coordinate"></span> </div> <script type="text/javascript" src="Scripts/ready-functions.js"></script> </form> </body> </html>