Sunday, August 23, 2009

ArcIMS equivalency in ArcGIS Server?

In May of 2000, ArcIMS 3.0 was released and over the next few years it took the Web GIS world by storm. There were few competitors, so the market was ripe. While it was considered complicated initially, most folks were able to buckle down and wrap their head around the technology - and build some rock solid solutions. HTML Viewer based applications, servlet connectors, and custom solutions using the ActiveX, ColdFusion or Java connector started popping up all over the Web. Turns out, ArcIMS was actually simple – all interaction was stateless and anything it could do on the server was dictated by ArcXML – so its boundaries were well defined. Plus it did its job very well. Dynamic mapping, feature streaming, queries, geocoding, extract... all were quick and efficient.

In the Web mapping world of late 2009, ESRI brings its wealth of GIS intelligence to a party that includes companies originally founded on search engines, operating systems, and business software. The market has expanded dramatically since ArcIMS was first released, and it continues to grow. ArcGIS Server now provides a comprehensive enterprise GIS solution for the Web with seemingly unlimited capabilities, especially when you factor in access to ArcObjects on the server. In general, it integrates with a diverse range of back-end data stores, utilizes an effective and robust authoring environment to build data and logic into a service, and it exposes numerous public Web service formats and protocols to support a wide range of consumers. In addition, a bevy of Web clients are available… server-side AJAX solutions using the ADFs, lightweight browser clients using the JavaScript API, and rich Web clients using Silverlight or Flex. With the sheer volume of features, functionality, frameworks and APIs in the ArcGIS Server suite, it remains unmatched as a complete enterprise GIS solution.

So with all this said, we know that ArcGIS Server can do so much more than ArcIMS in many areas, but are there still some things ArcIMS can do that ArcGIS Server can’t – or can’t do very easily? Yes. Let’s step through the ArcIMS service (virtual server) types as see:

Geocode? Yes, ArcGIS Server has it covered in the geocode service.

Route? Yes, ArcGIS Server has it covered in the network analyst extension on a map service.

Metadata? Yes. The GIS Portal Toolkit was added as an extension to 9.3. At 9.3.1 it was termed the ArcGIS Server Geoportal extension.

Extract? Yes, but it’s not as simple as ArcIMS. In ArcGIS Server you can emulate an extract virtual server with a custom tool (model) in a GP service. Granted GP can be very complex, but also very powerful... a good trade-off. Geodata services do provide an extract option, but the service was primary designed for the ArcGIS desktop client and functionality is limited to working with a geodatabase.

Feature? Yes, except it’s handled via a query operation on a feature layer in map service. The feature virtual server was primarily designed for the Java Viewer - the “rich” Web client when ArcIMS was first released. ArcGIS Server 9.4 will include a feature service with much greater functionality that that provided in ArcIMS.

ArcMap? Not quite. In general the ArcMap virtual server just exposes a subset of ArcGIS Server map service capabilities... so generating dynamic maps and querying layers is covered. One notable difference involves access to page layouts. In ArcIMS you can use GET_LAYOUT to generate printable output from a page layout in an mxd hosted by an ArcMap image service. In ArcGIS Server this capability is not available via a Web service protocol or format. Instead you must use ArcObjects (remote) and QI to IMapServerLayout from the map server object -or- use the Web ADF's PageLayout control which only works with local ArcGIS Server data sources. In either case interaction usually remains stateless.

Image (map) and query? No, but ArcGIS Server is crossing things off the list. On the server customization side, ArcGIS Server is unmatched. You can extend a server object in ArcGIS Server using .NET or Java –or- create and access ArcObjects remotely. In ArcIMS customizing a virtual server using C++ was rare and relatively difficult. There's also the issue of performance. Dynamic mapping in ArcIMS is notoriously fast. To match and exceed ArcIMS performance, ArcGIS Server provides the ability to pre-cache map tiles (9.2+) and to generate “fast” dynamic maps with optimized services (9.3.1+). One notable addition to ArcIMS 9.0 was the ability to reproject geometry using GET_PROJECT. This was covered in ArcGIS Server 9.3 with the release of the Geometry service.

With this out of the way, let’s focus on comparing the stateless capabilities of ArcIMS image\query and ArcGIS Server map services. Below I’ve listed six stateless capability categories that are popular in ArcIMS and still deficient at some level in ArcGIS Server:

  1. Reorder layers (including graphics) – It’s possible in ArcGIS Server but requires a stateful change and you must work with fine-grained ArcObjects.
  2. Change layer renderers – It’s possible in ArcGIS Server but requires a stateful change and you must work with fine-grained ArcObjects.
  3. Enable use of variable transparency for symbols (applied to graphic elements, selection sets, etc.) – Right now symbol transparency can be either 0% or 100%.
  4. Add dynamic layers – It’s possible in ArcGIS Server but requires a stateful change and you must work with fine-grained ArcObjects. If dynamic layers can be added, two additional capabilities will be necessary for equivalency:
    1. Enable joins in dynamic layers
    2. Query dynamic layers
  5. Support related data in query results - All ArcGIS Server map service query operations support returning joined data. In 9.3 the identify operation returns related data (SOAP only), but other query operations do not. So, to retrieve related rows in an ArcGIS Server map service right now, you have to use fine-grained ArcObjects and traverse the relationship class collection on a feature layer. This will change in 9.4; query operations will return related data.
  6. Fully support scale dependent rendering on a single layer - This is relatively easy to do with ArcXML in a map configuration file, but in ArcMap it requires VBA and the symbology is not readily accessible – namely the Toc swatches are empty. A better solution involves using a group layer in ArcMap. Essentially you add a reference to the same layer multiple times within a group and set the scale dependency and symbology for each layer. Unfortunately all the layers show up in the Toc (even those outside scale range) so the experience isn’t exactly like ArcIMS, which seems cleaner.

For the most part, ArcIMS equivalency can be found in ArcGIS Server. My interest in posting the exceptions is three-fold: to provide awareness of these issues, to mention resolutions pending in future versions, and to provide guidance on a current solutions or workarounds. If you’re aware of another ArcIMS equivalency issue in ArcGIS Server, I encourage you to add a comment below. Hope this was helpful.

Friday, August 14, 2009

ArcGIS Silverlight/WPF API and ESRI MapIt blogs up and running

The ArcGIS API for Microsoft Silverlight/WPF and ESRI MapIt, two new products in the ESRI suite, were released during the 2009 Users Conference in early July. Now, each has it's own blog hosted by ESRI.

Silverlight/WPF Blog:
ESRI MapIt Blog:

Both are available their respective resource centers as well (
Silverlight/WPF, MapIt).

I'm the lead product engineer for both products, so I've been busy working with a group of extremely talented developers at ESRI to build and get them out the door. The ESRI blogs should provide you with some great information about both products... good times ahead for sure.