Common_AddGraphics_VBNet\Default_JavaScriptMapTips.aspx.vb
' Copyright 2010 ESRI ' ' All rights reserved under the copyright laws of the United States ' and applicable international laws, treaties, and conventions. ' ' You may freely redistribute and use this sample code, with or ' without modification, provided you include the original copyright ' notice and use restrictions. ' ' See the use restrictions. ' Imports Microsoft.VisualBasic Imports System Public Partial Class Default_JavaScriptMapTips Inherits System.Web.UI.Page #Region "ASP.NET Page Event Handlers" Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) ' Make sure the page is not in a postback, so the code enclosed in the if block ' only executes on initial page load If (Not Page.IsPostBack) Then ' Call the method that will populate the graphics resource ' included in the MapResourceManager AddGraphics() End If End Sub #End Region #Region "Instance Methods" Private Sub AddGraphics() Try ' Get the graphics map functionality for the graphics resource specified in the ' MapResourceManager. Note that this MapFunctionality type is data-source specific ' (graphics). Also, the code assumes the resource is named "ADFGraphicsResource" Dim graphicsMapFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality = CType(Map1.GetFunctionality("ADFGraphicsResource"), ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality) ' Get the common map functionality for the map resource named "California." This ' MapFunctionality type is NOT data-source specific. Dim commonMapFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality = CType(Map1.GetFunctionality("California"), ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality) ' Get a reference to the underlying GIS resource from the common map functionality Dim gisResource As ESRI.ArcGIS.ADF.Web.DataSources.IGISResource = commonMapFunctionality.Resource ' Create a non-data source specific query functionality object from the GIS resource Dim queryFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality = CType(gisResource.CreateFunctionality (GetType(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), Nothing), ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality) ' Declare string arrays to store layer IDs and names Dim layerIDs As String() = Nothing Dim layerNames As String() = Nothing ' Get the queryable layers contained in the "California" map resource via the ' query functionality object created by this resource. Store the output in ' the layer ID and name arrays. queryFunctionality.GetQueryableLayers(Nothing, layerIDs, layerNames) ' Set the name of the layer to query and that will be used to generate map tips Dim queryLayerName As String = "counties" ' Declare a variable to hold the ID of the query layer Dim queryLayerID As String = Nothing ' Iterate through the layer names array to find the ID of the query layer Dim index As Integer = 0 Do While index < layerNames.Length ' Check to see whether the layer name at the current index of the array matches ' the name of the query layer. If so, retrieve the ID at the same index from ' the layer ID array and assign it to the query layer ID variable If layerNames(index).ToLower() = queryLayerName.ToLower() Then queryLayerID = layerIDs(index) Exit Do End If index += 1 Loop ' Instantiate a Web ADF SpatialFilter to use in executing the query Dim adfSpatialFilter As ESRI.ArcGIS.ADF.Web.SpatialFilter = New ESRI.ArcGIS.ADF.Web.SpatialFilter() ' Set the property that will cause feature geometries to be return with the query results adfSpatialFilter.ReturnADFGeometries = True ' Execute a query on the COUNTIES layer of the California map resource. Since the spatial ' filter does not have a geometry defined, the query will return all the features in the ' COUNTIES layer. Note that the name from either commonMapFunctionality or ' graphicsMapFunctionality could have been used for the mapFunctionalityName parameter, ' as these both refer ultimately to Map1's map functionality. Dim resultDataTable As System.Data.DataTable = queryFunctionality.Query(commonMapFunctionality.Name, queryLayerID, adfSpatialFilter) ' Convert the data table containing the query results to an ADF feature graphics layer. ' This is done by using the ADF's Converter utility class, and then casting the resulting ' GraphicsLayer to a FeatureGraphicsLayer. Note that this can be done because the ' data table contains Web ADF feature data, including the ADF geometries. Dim featureGraphicsLayer As ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer = CType(ESRI.ArcGIS.ADF.Web.Converter.ToGraphicsLayer(resultDataTable), ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer) ' Set the property to draw the feature graphics layer on the client. The layer ' will not be visible if this property is set to false. featureGraphicsLayer.RenderOnClient = True ' Get the layer format from the COUNTIES layer of the California map resource. The ' layer format specifies how selected features appear, field aliases, which fields ' are visible, the primary display field, and how attribute displays are formatted Dim layerFormat As ESRI.ArcGIS.ADF.Web.UI.WebControls.LayerFormat = ESRI.ArcGIS.ADF.Web.UI.WebControls.LayerFormat.FromMapResourceManager(MapResourceManager1, "California", queryLayerID) ' Remove any other graphics from ADFGraphicsResource graphicsMapFunctionality.GraphicsDataSet.Tables.Clear() ' Add the feature graphics layer to ADFGraphicsResource graphicsMapFunctionality.GraphicsDataSet.Tables.Add(featureGraphicsLayer) ' Apply the layer format from the COUNTIES layer to the feature graphics layer. layerFormat.Apply(featureGraphicsLayer) ' Determine which column in the data table underlying the feature graphics layer ' is the one to store whether the feature is selected or not. Dim selectedColumn As System.Data.DataColumn = featureGraphicsLayer.IsSelectedColumn ' Set each row in the data table underlying the feature graphics layer to have ' a selected value of true, thus displaying the feature composed of that row ' as selected. The combination of applying the layer format to and selecting ' each feature within the feature graphics layer will have the effect of enabling ' the out-of-the-box on hover and on click functionalities for selected features ' for each feature within the graphics layer. Since every county contained in the ' COUNTIES layer is also in the feature graphics layer, the end result is an ' in-memory copy of the COUNTIES layer that highlights and shows a map-tip for ' each county on hover, and shows detailed attribute information on click. Note ' that, to modify the appearance of the highlight, map-tip, or attribute information, ' users can simply edit the LayerDefinition of the COUNTIES layer via the ' MapResourceManager in Visual Studio's design view. For Each row As System.Data.DataRow In featureGraphicsLayer.Rows row(selectedColumn) = True Next row Catch exception As System.Exception Dim jsErrorAlert As String = String.Format("<script>{0}</script>", Utility.GetJavaScriptErrorString(exception)) Response.Write(jsErrorAlert) End Try End Sub #End Region End Class