Monthly Archives: December 2006

Using the Callback control framework with a map resource

Let's build on the sample that Ryan put together and use the callback control framework to refresh a map control.  In this case we need to send back callback results of the map control to the control being called back to (the callback button).  To illustrate this lets add a map, map control, and a couple of Callback Button controls to the map design time in Microsoft's Visual Studio 2005.  We want to give the user the ability to add and remove a dynamic dataset via the CallbackButtonCustomControl.
 

To do this we need a method that adds a dynamic resource to the MapResourceManagerInstance.
 

private void createAndAddResource(string resourceName, GISResourceItemDefinition definition, bool insertIntoBeginning)

    {

        MapResourceItem resourceItem = new MapResourceItem();

        resourceItem.Definition = definition;

        resourceItem.Name = resourceName;

        resourceItem.DisplaySettings = new ESRI.ArcGIS.ADF.Web.DisplaySettings();

        resourceItem.DisplaySettings.Visible = true;

        resourceItem.DisplaySettings.Transparency = 20;

        resourceItem.DisplaySettings.DisplayInTableOfContents = false;

        resourceItem.DisplaySettings.ImageDescriptor.TransparentBackground = true;

        resourceItem.DisplaySettings.ImageDescriptor.TransparentColor = System.Drawing.Color.FromArgb(1, 2, 3);

        if (insertIntoBeginning)

        {

            Map1.MapResourceManagerInstance.ResourceItems.Insert(0, resourceItem);

        }

        else

        {

            Map1.MapResourceManagerInstance.ResourceItems.Add(resourceItem);

        }

        resourceItem.CreateResource();

        Map1.InitializeFunctionalities();

    }

 

 

Within the CallbackButton1_Clicked event we call the method to create and display the dynamic resource and then use the callback control framework to pass the CallbackResults from the map to the control.
 

  string resourceName = "Dynamic Data";

        GISResourceItemDefinition definition = null;

        definition = new GISResourceItemDefinition();

        definition.ResourceDefinition = "(default)@DGCountyAerialPhotos";

        definition.DataSourceDefinition = "http://localhost/arcgis/services";

        definition.DataSourceType = "ArcGIS Server Internet";

        definition.DataSourceShared = true;

        createAndAddResource(resourceName, definition, false);

        if (Map1.ImageBlendingMode == ImageBlendingMode.WebTier)

        {

            Map1.Refresh();

        }

        else

        {

            Map1.RefreshResource(resourceName);

        }

        CallbackButton1.CallbackResults.CopyFrom(Map1.CallbackResults);

 

So now we can add dynamic data to a map on a callback.

Try the sample app out here:  http://serverx.esri.com/callbackbuttonsample/map.aspx 

Jeremy 

Posted in Services | Tagged , | 2 Comments

Using the Callback control framework

Ryan Olson of the Web ADF development team contributed the following code sample that demonstrates how to use the callback framework from within the ESRI Web ADF for the Microsoft .NET Framework. 

This control is very useful for testing things during the context of a callback.  When called, it fires a server-side event in the context of a page callback so that you can attach to that event at design time or programmatically and act on the event.  You can return "javascript" as the event argument to execute a JavaScript function or you can refresh the contents of a non-AJAX-enabled control (like the Gridview) without having to write a line of JavaScript.  

The code is extremely simple and yet it shows how to use the Web ADF CallbackResults and the WebControl base class Callback implementation.

 

Here is some sample code to execute some javascript

    protected void CallbackButton1_Clicked(object sender, EventArgs args)

    {

        CallbackButton1.CallbackResults.Add(new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(CallbackButton1, "javascript", "alert('hello');"));

    }

Here is some sample code to refresh a control that doesn’t inherit from our webcontrols with the CallbackButton (like a gridview):

    protected void CallbackButton1_Clicked(object sender, EventArgs args)

    {

        CallbackButton1.CallbackResults.Add(RefreshControlHtml(GridView1));

    }

    private CallbackResult RefreshControlHtml(Control control)

    {

        System.IO.StringWriter sw = new System.IO.StringWriter();

        HtmlTextWriter writer = new HtmlTextWriter(sw);

        control.RenderControl(writer);

        string htmlContent = sw.ToString();

        sw.Close();

        return new CallbackResult(control, "content", htmlContent);

    }

 

Try out a sample application illustrating the usage here:  http://serverx.esri.com/callbackbuttonSample/ 

 

Posted in Services | Tagged , | 2 Comments

Publishing globe services to enhance your ArcGIS Explorer base map

Sterling Quinn of the ArcGIS Server team contributed the following post.  The ability to publish data as a globe service and to have that data be consumed in a rich client like ArcGIS Explorer is very powerful.
 

As you work on projects with ArcGIS Explorer, you’ll probably want to improve the default image and terrain resolution to create a suitable base map for your area of interest. Globe services are an efficient way to get high-resolution imagery and terrain data to your Explorer maps.

 

If you’ve worked with ArcIMS and ArcGIS Server before, you’re probably familiar with map services, which are two-dimensional. A globe service is three-dimensional, and represents an ArcGlobe document that is being made available to network and Internet clients through an ArcGIS Server system. In fact, the default satellite image you see when you open Explorer is from a globe service hosted by ESRI.  

 

To create a globe service, you need ArcGlobe, some data, and ArcGIS Server. After you create the globe service, you can improve its performance by creating a globe cache. 

 

This example uses two globe services created from publicly-available data:

  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     

  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolution color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     
  1. A globe service displaying 1-foot resolutio
    n color orthoimagery of Bountiful, Utah. This imagery was created by the United States Geological Survey (USGS) and is made available through the Utah Automated Geographic Reference Center (AGRC). In this example we’ve added four images to an unmanaged raster catalog so that ArcGlobe treats them as one layer.
  2. A service containing 1/3 arc second (about 10 meter) resolution elevation data obtained from USGS Seamless Data Distribution.
     

To create a globe service like the ones we’ve used in this example, you’ll need to do the following:

 

Add your data to an ArcGlobe document. Symbolize it just the way you want the clients of your globe service to see it. Save the globe document to a location that’s visible to all of the machines in your ArcGIS Server system. If you’re creating a globe service that will just provide elevation measurements, remove all other layers from your globe document.

 

Below are some views of the two globe documents that we'll publish as services to enhance our Explorer base map. The second view shows a wireframe because that service will contain elevation only.

 

 

 

 

 

Use ArcGIS Server to publish the globe document as a globe service. You can easily do this in ArcGIS Server Manage, or you can use ArcCatalog. If you need detailed instructions, consult the Globe Services topic in the ArcGIS Server Help: http://webhelp.esri.com/arcgisserver/9.2/dotNet/index.htm#manager/publishing/globe_service.htm

 

Create a globe cache for the service. A globe cache consists of pre-created globe tiles that exist on the server and can be distributed quickly to clients who request them.

 

When you display the globe service’s properties in ArcCatalog, there’s a Caching tab that contains the tools you need to create globe caches. It's not always practical to generate a full cache for all layers, but generating a cache for as many levels of detail as possible can improve performance for the first users that access the service. If you can’t create a full cache, the tiles that you do not create are created on demand as they are visited by clients. The map imagery cache in this example was cached from State (1:312500) to City Block (1:610) Note: Elevation globe services need the full cache built before you can use the service.

  

Once you’ve created the globe document, published the service, and created the cache, you can add the globe service to your Explorer maps. Below is what our image and elevation globe services look like in Explorer.

 

 

 

 

Of course, the power of Explorer lies in its ability to display your own data and perform GIS analysis on it. A high-resolution base map can enhance the effectiveness of your GIS work. Consider your impressions of the two screen captures below that overlay a geologic fault lines shapefile with the Explorer base map. The first image uses the original Explorer base map, while the second image uses the enhanced base map. Not only does our enhanced base map look more realistic, but specific buildings and streets crossed by the faults are more easily identifiable, providing for clearer analysis.

 

 

 

 

 

Try it out for yourself here:  http://serverx.esri.com/ArcGIS/explorer/maps/bountiful.nmf

 

What do you think?

 

 

Posted in Services | Tagged , | 1 Comment

Querying ArcGIS Server Web Services

One of the ways to connect to ArcGIS Server is through Web services.  When you make an Internet connection to the server, you will use a URL in this format:  http://<server name>/<instance name>/services 

This is an endpoint to your ArcGIS Server service catalog url. 

Where <server name> is the name of your server, which can be an IP address, a domain name (serverx.esri.com), or simply “localhost”.  The <instance name> is the name of your ArcGIS Server instance.  The instance gets defined when you install ArcGIS server.  You can review it by looking at server properties at your root folder in ArcCatalog.
 

So what can I do with this services catalog URL?  This URL can be used to establish an Internet connection to an ArcGIS Server instance in ArcCatalog.  It can be used as a connection in the ArcGIS Server Web ADF.  It can also be used in custom applications that work with Web services.  Today I am going to build a simple web application using the Microsoft .NET Framework in ASP.NET that consumes the catalog URL for my ArcGIS Server instance and lists the services, types, and service URL in a simple web page.

The first step after creating your new web site is to register the services catalog URL for your ArcGIS Server Web service.  To do this you need to add a web reference to your project (in VS2005 right click on the project name and Add Web Reference).  In the web reference dialog enter your server catalog URL. 


 

Once we have registered the Web service we just need to use it. 
 

//Create an instance of the service catalog web service

WebCatalog.Catalog webCat = new WebCatalog.Catalog();

//Set the url to your ArcGIS Server services url

String serverUrl = “http://localhost/arcgis/services”;

webCat.Url = serverUrl;

//Get the all the service descriptions from the Catalog

WebCatalog.ServiceDescription[] sds = webCat.GetServiceDescriptions();

//extract the name, type, and URL for each service in the

//servicedescriptions array

foreach (WebCatalog.ServiceDescription sd in sds)

{

  Response.Write(“<b>Service Name</b> = “ + sd.Name + “<br>”);

  Response.Write(“<b>Service Type = </b>” + sd.Type + “<br>”);

  Response.Write(“<b>Service URL  = </b>” + sd.Name + “<br>”);

  Response.Write(“<br><hr>”);

}

So try it out here:  http://serverx.esri.com/InterrorgateServer 

You can download the Visual Studio project here

Over the next few weeks I will explore working with the Web services for some of the ArcGIS Server service types (MapServer, GPServer).

Jeremy
 

 

 

Posted in Services | Tagged , , | 6 Comments

Publishing and using a geoprocessing model within a map document

One of the exciting new aspects of ArcGIS Server 9.2 is the ability to publish geoprocessing models and scripts to the server.  A model can be published either as a tool that can be used directly on top of any map service, or it can be published with an associated map service so that you can control the symbology of the generated layer. 

 

To illustrate the power of geoprocessing on the server, I built an example that uses a map service and an embedded model that allows users to execute an interpolation on the server and view those results in the web mapping application.  The map service contains a point dataset describing the potential water yield from water wells drilled in Douglas County, Kansas (data courtesy of the Kansas Geological Survey and the Kansas Geospatial Community Commons).  The model takes in the water well dataset and a user-defined cell size.  This information is passed as input parameters to the Natural Neighbors GP tool.  The output is a raster dataset.  The output is then rendered using a predefined layer symbology file (a layer file).

 

 

If you looked closely, you may have noticed that the model includes an embedded Python script.  This script allows me to put a limit on the input cell size parameter.  I want to allow the user to set the cell size (in meters) of the output raster dataset from within the web application.  However, I want to make sure that the user does not enter so small of a cell size that it will negatively affect the speed of the web application.  The script ensures that if the user enters anything less than 30 meters, the application will default to a cell size of 30 meters.  I will have more on this in a future post. 

 

Here are some key steps to remember when publishing a geoprocessing tool embedded in a map service.

 

  • Create an MXD with the input layer and any other background layers that you want in your map service.
  • Create a toolbox in your project directory.
  • Add a new model to your new toolbox.
  • The model should use one of the layers in the map document as an input parameter.
  • Ensure that your map document and input map layers are at the same projection.
  • Your output dataset should be written to the scratch workspace.
  • Set your toolbox scratch workspace environment variable equal to a directory that is visible to your ArcGIS Server Object Container (SOC) account.
  • Move your finished model to your ArcMap table of contents. This is called a tool layer.
  • Execute the model from within ArcMap and verify the results.
  • Turn off the output layer in ArcMap and publish to the server.

 

The easiest way to publish a map service with an embedded geoprocessing service is to publish the map document (using the right-click option on the map document, “Publish to ArcGIS Server”).  ArcGIS Server will see that the map service has a tool layer and will load that tool as a geoprocessing service. 

 

Once deployed to the server, it is relatively straightforward to deploy the map service and associated geoprocessing task as a web application using ArcGIS Server Manager. 

 

Check it out here:  http://serverx.esri.com/interpolationexample

 

Try building and publishing your own models.

 

What do you think?

Jeremy

Posted in Services | Tagged , , | 6 Comments

Configuring accounts and permissions in a distributed installation

Sterling Quinn of the ArcGIS Server team contributed the following post.  This information will ultimately end up in the ArcGIS Server Help site in a few weeks. 

 

ArcGIS Server for the Microsoft® .NET Framework has a scalable architecture that allows you to distribute its components among multiple machines. When you set up a distributed installation, there are a number of post installs, accounts, and operating system groups that you’ll need to configure. These requirements have changed at 9.2, so even if you have configured a distributed installation in the past, you may not be familiar with the latest requirements.

Below is a guide that shows what you’ll need to do on each machine. Each machine in the diagram contains some green text denoting which post install you must run on that machine. Items in blue are accomplished by the post install. Items in red are things that you must do. Note especially that you must manually add the ArcGIS Web services account on each dedicated SOC machine.

 

 

 

Posted in Services | Tagged , | 2 Comments

Changing zoom direction with mouse wheel

In the ESRI Web ADF for the Microsoft .NET Framework the default behavior for the mouse scroll wheel is to zoom in to the map control as you move the scroll wheel forward.  Enter the following code snippet in the Default.aspx after all the Web ADF control declarations in your web application if you would like to change the behavior of the scroll wheel so that it zooms out as you move the mouse wheel forward (which is also how ArcGIS Explorer behaves).

  
<script language="javascript" type="text/javascript">

        mouseWheelAwayZoomIn = false;

 </script>

 

Here is an example of the default behavior:   http://serverx.esri.com/bendenaquadsp/

Here is an example of the changed behavior:   http://serverx.esri.com/bendenaquadspreversescroll/

 
Jeremy 

 

Posted in Services | Tagged , | 2 Comments

Building an Application with ArcGIS Server and the Web ADF

Hi All,

Welcome to the first of many posts on building, using, consuming, and deploying ArcGIS Server services.  Today I want to touch on building a simple web application in the Web ADF for the Microsoft .NET Framework with cached data and a couple of Geoprocessing Tasks. 

Have you ever developed a really nice TIN dataset?  TINs are nice in that they can be built quickly, contain a lot of detail, and can be used to perform traditional GIS analysis.  Let’s take the TIN dataset to the next step.  Say we want to publish an application that uses a TIN in the new Web ADF but we want it to perform lightening fast AND be able to do analysis on it? 

I have a TIN that I created with tagged vector contour data that I downloaded from the GIS Clearinghouse for the State of Kansas. 

 

This TIN took about 20 seconds to draw to the screen from ArcMap.  That is too slow to be useful for web mapping applications.  Fortunately we can take advantage of ArcGIS Server 9.2 caching capabilities.  The steps to publish data to server are as follows:

  1. Set up map document in ArcMap with featured dataset(s) rendered appropriately,
  2. Publish MXD to Server,
  3. Build fused map cache.

The map cache option in ArcGIS Server 9.2 is a really powerful feature.  This allows you to create high performance web applications.  Look for many more posts in the future about designing, building, deploying, and using map caches.  It is a fascinating subject.

Back to work.  The map cache that I created contains the following specifications:

  • Tile size 256×256 pixels
  • Image type PNG
  • Fused map cache
  • Cached at the following scales: 100k, 75k, 50k, 24k, 12k, 6k 

 

Now that the service is ready we can build the web mapping application to consume it.  The team has really done a lot here to help the developer AND the non-developer build web applications.  The web application can be completely built and deployed remotely from the ArcGIS Server Manager.  If the default application does not meet your needs you can customize the application in MS Visual Studio 2005. 

 
 

It is really as easy as that.  Try it out here

 

Now while we get the performance of the cached TIN elevation data in the map service, we don’t want to lose the analytical capabilities of the original data.   This is where Geoprocessing (GP) Services come into play.  With GP services we can build models that run off of the original data using model builder and then publish those models to ArcGIS Server which can then be used in our web applications.  In this example I want to build a line of sight GP service.  This will take in as input the original TIN dataset along with a feature set input (allowing the user to draw points, lines, & polygons as input to the model).  Here is the model:

 

 

Once we deploy the model to the server, we can then access the GP service directly from the web mapping application.  Again just like map caching, GP services are very powerful yet require careful consideration.  When you publish a GP toolbox to the server everything has to be set up to allow the web user to give input, execute, and visualize.  The process must do everything for the user.  That includes assigning layer files to the output of the model for rendering.  We will be revisiting this in detail in future posts. 

I want to add one more model to the application that allows users to draw linear features on the map, extract the vertices from the points of the line, and then add elevation values from the original TIN to the point data set.  Check out the model here:
 

The real test is in the deployment of the application.  Give it a try here.

So, what do you think?  

Jeremy 

 

Posted in Services | Tagged , , , | 10 Comments

Welcome!

This blog is written directly by the ArcGIS Server Development
Team.  We are very excited about the ArcGIS Server 9.2 release.  We
have so much to share with the user community.  Topics will range from
detailed programming information ("What is a page life cycle in the Web ADF?") to GIS methodology ("What is the best methodology to
produce map caches?") for serving spatial data with ArcGIS Server.  One
of the key parts to this blog will be the use of an example site.  We
intend to post useful entries for our users which are linked directly
to examples that we have built that you can access live from the
Internet.

All examples are hosted on the following server:

  • Dual Pentium 3.2GHz CPU
  • Microsoft Windows Server 2003 Standard x64 Edition
  • 4GB of RAM
  • 240GB disk space

 

It is an exciting time to be a GIS professional. 

So stay tuned for more…

Posted in Services | Leave a comment