Category: Web

ArcGIS Viewer for Microsoft Silverlight 1.0 Beta now available!

We are very excited to announce the initial release of the ArcGIS Viewer for Microsoft Silverlight.  To get the bits, just go to our new Beta Community Web site, sign up, and download the setup.   The newest member of the ArcGIS family allows you to quickly create rich web mapping applications using a fully interactive configuration experience. With the product, you can set up and modify an application’s basemap, operational layers, tools, colors, title, logo, layout, links, and more without writing any code or editing any configuration files. Moreover, the Viewer is fully extensible, so designers and developers can implement new tools and create new layouts and easily integrate them into the Viewer.  The Viewer includes the following:

  • Configurable Viewer – This is a ready-to-deploy configurable rich internet application (RIA) built on the ArcGIS API for Microsoft Silverlight 2.2 Beta. As a Web client, it works with your own ArcGIS Server services and data content from ArcGIS Online.  The Viewer’s configuration is stored in configuration files and provides extensibility endpoints to plug in tools, behaviors, and layouts.
  • Application Builder – The Application Builder allows the quick and easy creation of Viewers through an interactive, WYSIWYG user interface. You can configure map content, tools (including GP services), and the overall look and feel of the viewer. As you configure your Viewer, the interactive Viewer preview will update in real-time, eliminating any guessing as to what your changes might look like. Once you are satisfied with your Viewer, click deploy or save to push it to a new website or update an existing one.

  • Visual Studio Template (for developers) – Along with the Viewer, we have made a Visual Studio template available for download from the Beta Community site, allowing developers to easily create new add-ins for the Viewer.  An “add-in” is a modular chunk of code that can be shared and include tools, behaviors, and layouts. Within an add-in, you may leverage any Silverlight library, including the ArcGIS API for Microsoft Silverlight and the libraries offered by the Silverlight Platform.  The template includes a fully functional, debuggable Viewer, a project to implement tools and behaviors, and another project to design layouts.

Once registered for the beta program, view the product overview video and download the software via the Software Download link under the Project Resources section in the sidebar.  Use the Online Help link under the Other Product Resources section  to peruse the help.   Be sure to review the My To-Do list to complete surveys and provide feedback on problems you encounter or recommendations you want to provide.  Use the forums to ask questions and work with the beta community to resolve issues.  The screenshot below highlights a couple of these key areas of interest on the beta program home page:

We look forward to hearing your feedback on the new Beta Community site.


The ArcGIS Silverlight Development Team

Posted in Web | Tagged , | 10 Comments

Version 2.2 Beta of the ArcGIS API for Microsoft Silverlight, WPF, and Windows Phone is available!


Version 2.2 beta of the ArcGIS API for Microsoft Silverlight, WPF, and Windows Phone is now available for download from our new Beta Community Web site.  This new site provides a place where ArcGIS users can test Esri software products before they are released to the public and provide us with feedback on the features and functionality in those products.   You’ll need to login with an Esri Global account and walkthrough an initial survey to gain access.  Once in the Beta Community you can register for any of the products listed.  This includes the 2.2 beta for the ArcGIS API for Microsoft Silverlight, ArcGIS API for Microsoft WPF, and ArcGIS API for Windows Phone.


Here are a few highlights of what’s new in the Silverlight, WPF, and Windows Phone APIs included with 2.2 beta:


  • Silverlight API and WPF API now packaged as separate installs
  • New Windows Phone API install
  • Map and task support for continuous pan, wrap-around mode
  • Support for Map Notes and Popups in WebMaps
  • Draw new graphic shape types arrow, triangle, circle, and ellipse
  • Scale and rotate graphics interactively
  • New ScaleLine and Attribution controls
  • New GpsLayer integrates with location services (Windows Phone only)


Once registered for a beta program, you can download the software via the Software Download link under the Project Resources section in the sidebar.  Use the Resource Center link under the Other Product Resources section  to peruse the help.   Be sure to review the My To-Do list to complete surveys and provide feedback on problems you encounter or recommendations you want to provide.  Use the forums to ask questions and work with the beta community to resolve issues.  The screenshot below highlights a couple of these key areas of interest on the ArcGIS API for Microsoft Silverlight beta program home page:




The ArcGIS Silverlight, WPF, and Windows Phone Development Teams


Posted in Web | Tagged , , , | 2 Comments

FanMap: Super Bowl Edition

Esri is hosting a Super Bowl survey. Please vote and explorer the results coming from around the country. Feel free to send the link to everyone you know that is interested in the Super Bowl.

Hold the SHIFT key and drag to zoom in, hold down CTRL SHIFT and drag to zoom out.

Note – Built with the ArcGIS API for Flex



Posted in ArcGIS Online, Mapping, Web | Tagged , , , , , | 1 Comment

Strut your Silverlight at the 2011 Developer Summit

The upcoming 2011 Esri Developer Summit (Palm Springs, March 7–10) offers a number of opportunties to show off your Silverlight prowess. 

First, showcase your work in a presentation.  We have a great community of Silverlight developers and we would love to have you share your knowledge.  Whether you’re building Silverlight Web applications, Windows Phone apps, SharePoint extensions, light-weight WPF apps, WCF services to power the backend or pushing your stuff into Azure – show it off.  Celebrate your epiphanies, provide tips and tricks, walk through case studies, go into the juicy details, bask in the glory.  Just be sure to submit your abstract by January 7, 2011. 

And second, the inaugural Light Up the Night Challenge for Silverlight developers will commence the first night of the Dev Summit, March 7 at 6pm.  We’ll provide the challenge details that night, along with ample food and drinks to power your creativity.  Developers of all skill levels are encouraged to participate.  The first 100 submissions will get a coveted t-shirt, bound to be an instant classic.  Place in the top three and you’ll go home with a prize compliments of Redmond. What will the first place trophy be? A golden atlas? A shiny globe? A wooden canoe?  Come join us and find out.  Sign up now and start the Dev Summit off right. 


The ArcGIS Silverlight/WPF, Windows Phone, and SharePoint Development Teams

Posted in Web | Tagged , , , | Leave a comment

Adding GPS location to the Map

Windows Phone has a built-in API for retrieving the current location of the phone, and we can use this to place a marker on the phone.  The GeoCoordinateWatcher in the System.Device.dll is class to use for this. Basically you new up a new class, and use the PositionChanged event to listen for changes to the current location, speed and course.

var geowatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
geowatcher.PositionChanged += watcher_PositionChanged;

In the event handler we can grab the latitude/longitude, project it to the map’s spatial reference and use the point to update a graphic in a graphics layer. Example:

private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs e)
   GraphicsLayer gps = MyMap.Layers["gpsLayer"] as GraphicsLayer;
   if (gps == null) //First Time. Create layer
      gps = new GraphicsLayer() { ID = gps };
      Graphic g = new Graphic() { Symbol = new SimpleMarkerSymbol() };
   var coord = e.Position.Location;
   MapPoint p = new MapPoint(coord.Longitude, coord.Latitude);
   // Project point to Map's spatial reference, use ESRI.ArcGIS.Client.Projection.WebMercator or Geometry Service
   gps.Graphics[0].Geometry = p;

The GeoCoordinate object returned also contains information about Course, Speed and Accuracy. You can use these values to create an arrow that shows direction when speed is greater than 0, or display an “error circle” around the point using a Polygon to give the user an indication of the accuracy of the position.

We can create a new Layer Class that inherits from GraphicsLayer and encapsulates this. Below you can download an example of a GPS Layer that does exactly this, and implements the direction and error circle. The rest of this blog post talks about this layer.

To use the layer first add a reference to GpsLayer.dll included in the download as well as System.Device.dll. Second import the namespace in the page that contains the map:


Next add the GPS layer to the map:

<esri:Map x:Name="MyMap" Loaded="MyMap_Loaded" >
	<esri:ArcGISTiledMapServiceLayer ID="BaseLayer"
              Url="" />
	<gps:GpsLayer ID="gpsLayer"
              GeometryServiceUrl="" />

The layer has a geometry service url property to be able to project the point from WGS84 geographic coordinates to the map’s projection. If your map is already using WGS84 or is using the WebMercator projection, you do not need to set this since the projection is handled on the client.

When you run the app and zoom to your current location, you will see something like this:

The white triangle displays the course the phone is currently moving in, and the circle the accuracy of the measurement. As the GPS updates the location and error circle are smoothly animated. When the speed drops below 1m/s, the arrow automatically disappears. If you don’t like the symbols used, you can set your own MarkerSymbol for the location and fill symbol for the error circle. Example:

<gps:GpsLayer ID="gpsLayer">
		<esriSymbols:SimpleMarkerSymbol />
		<esriSymbols:SimpleFillSymbol Fill="#22FF4532" />

There’re two events on the layer that are useful: GeoCoordinateChanged and PositionChanged. GeoCoordinateChanged is fired when Layer.GeoCoordinate is updated. PositionChanged is fired when the point you see on the map has been projected and animated to the new location. By using these events we can automatically recenter the map, rotate the map based on the direction, or display information to the user about location, speed etc. The included sample application has a “Follow Me” option that enables auto-recenter and rotate.

GPS Simulation

If you are using the Windows Phone emulator, or you are inside and get poor GPS reception, testing a GPS layer is not really possible. The GpsLayer includes a GPS Simulator that is automatically used when you use the emulator. The included sample starts out at ESRI and moves west, constantly randomizing the distance travelled and course. If you need it to start it elsewhere, open the source for the GpsLayer and change the initial values used when constructing  the GeoCoordinateSimulator at line 100.

Download the sample

Morten Nielsen
Senior Software Engineer
Silverlight/WPF, Windows Phone

Posted in Web | Tagged , , , | 2 Comments

Version 2.1 of the ArcGIS API for Silverlight/WPF and ArcGIS API for Windows Phone now available!


Version 2.1 of the ArcGIS API for Microsoft Silverlight/WPF is now available for download on the ArcGIS Resource Center. This is a significant release for the Silverlight/WPF platform that includes numerous enhancements and fixes.

Version 2.1 of the ArcGIS API for Windows Phone is also available for download as our first public ArcGIS API for the Silverlight development platform on Windows Phone 7.  The Windows Phone API shares much of the same functionality present in the Silverlight/WPF API – in fact, they target the same source code and thus share the same version.  However, there are some minor differences, such as the Windows Phone API does not include a BehaviorsActions library, a few client-side toolkit data sources are not supported (HeatMap and GeoRSS), graphics layer map tips are not available (although InfoWindow in the toolkit will work), and the toolkit has only a few controls that have been refactored for the Windows Phone experience.   Note, Silverlight for the Windows Phone does not include some key functionality provided in Silverlight 4, such as dictionary binding, custom namespace schemas, and support for commanding.

Here are a few highlights of what’s new in the Silverlight/WPF API and included in the first release of the Windows Phone API:


  • Integrated support for gestures on touch-enabled devices
  • New InfoWindows and Legend controls, and a new KML data source available in the ESRI Silverlight Toolkit (source code available on CodePlex)
  • Convert a FeatureSet to/from JSON
  • Support for WebMaps
  • Store and use a local cache of tiles using the new TileLoaded and TileLoading events on the TiledLayer class
  • Touch-enabled magnifier for interactively drawing features using the Editor or Draw objects


To get started with version 2.1 of the ArcGIS API for Silverlight/WPF see our new Concepts, Interactive SDK, and Library Reference documentation online.

To get started with version 2.1 of the ArcGIS API for Windows Phone, see our Concepts, Interactive SDK, and Library Reference documentation.  Note, the Interactive SDK is merely a simulation of the Windows Phone developer experience and provides easy access to XAML and code-behind for Windows Phone Silverlight developers.  Download the Windows Phone Interactive SDK and deploy to an emulator or a Windows Phone device for a true developer experience.

Be sure to use the Silverlight/WPF forum or Windows Phone forum to ask questions and work with the community to resolve issues you may encounter.




The ArcGIS Silverlight/WPF and Windows Phone Development Teams


Posted in Web | Tagged , , , | 5 Comments

ArcGIS Mapping for SharePoint 2.0 is available!

We are very excited to announce the release of version 2.0 of ArcGIS Mapping for SharePoint.  Version 2.0 leverages the SharePoint 2010 platform and offers a wealth of new features and enhancements.  A few of the highlights include:

  • New look and feel – a sleek new look and feel integrates with the SharePoint 2010 ribbon and maximizes the screen area available for your map.
  • Extensibility – The Map Web Part is extensible. Developers can create Silverlight extensions to interact with the map and layers, display Silverlight content inside the web part, and communicate with web services and other external components.
  • Geoprocessing – ArcGIS Server Geoprocessing services can now be easily added as tools to the Map Web Part, enabling advanced spatial analysis.
  • Theming – Designers can specify the colors of the pop-ups, dialogs, and panels that are shown within the Map Web Part. They can use the site theme colors or define a custom scheme.
  • integration – a new Map Center is integrated into the Map Web Part and allows you to discover, open, and save maps from

You can read more about all the new features and enhancements at 2.0 in the What’s New help topic.

Since version 2.0 of ArcGIS Mapping for SharePoint includes the ability to write extensions to the ArcGIS Map Web Part, we are also pleased to announce the unveiling of the ArcGIS Mapping for SharePoint Interactive SDK and Code Gallery.  Use the interactive SDK to explore what the new extensibility endpoints enable you to develop, immediately see the code required, and download the samples.  Visit the Code Gallery to view and download extensions developed by other users of ArcGIS Mapping for SharePoint.

To get started with ArcGIS Mapping for SharePoint 2.0, download the bits and install them on your SharePoint 2010 server today!

The ArcGIS SharePoint Development Team 


Posted in Web | Tagged , , , | 2 Comments

Positioning MapTips to keep them in the Map

Graphics layers are designed to present interactive operational data in a map.  One common interaction is the ability to hover over a graphic and view information about the respective feature.  Graphics layers and layers that derive from them (e.g. feature layers) maintain a MapTip property that can contain any FrameworkElement, such as a Grid, StackPanel or TextBlock.  Maptip content is rendered using a Popup within the Map control.  Since the data context of the Popup is set to the attributes of the graphic, you can bind property values within the maptip to graphic attributes.   The architecture is clean, efficient and highly customizable.  Unfortunately the ArcGIS Silverlight/WPF API does not include the ability to place a maptip in a position that offers the best chance of displaying all maptip content.  Basically, all maptips display to the lower left of a graphic, even if this means the content is clipped by the edge of the map.

So how can we solve this issue?  Enter behaviors and maptip offsets on a graphics layer.   First, behaviors offer the ability to encapsulate and attach logic to a specific control.  They are built on functionality made available in the System.Windows.Interactivity library included with the Expression Blend SDK (and Expression Blend).   In this post, a custom behavior will be used to contain and attach logic to a Map control that will position maptip content within the map display.  To attach a behavior, merely add a reference the Interactivity library, define a namespace reference in the XAML page that contains the map, and use the static Interaction class to include the behavior within the Map element. 

XAML Page:

<!-- Namespaces -->

<!-- Map Behavior -->
  <esri:Map x:Name="MyMap">
        <local:PositionMapTip />

Graphics layers maintain two dependency properties to define the horizontal and vertical offset for maptip content (MapTipHorizontalOffset and MapTipVerticalOffset).  By default, the upper left corner of the maptip content represents the origin (0,0) from which the content is display.  To keep a maptip in the map display, the offsets must be adjusted up and/or to the left.   In the custom behavior shown in the code sample below, a set of event handlers are added to graphics layers in the map to listen for mouse enter and mouse move events.  A size changed event handler is wired up to listen for when the maptip content is displayed.  Upon mouse over/move on a graphic, the cursor position will be captured.  This position will be used to determine in which quadrant the cursor resides and adjust the horizontal and vertical offset to display the maptip content toward the center of the map.  In addition, the maximum width and height of the content is set to keep it within the map display.

Custom Behavior Code:

public class PositionMapTip : Behavior<Map>
    private Point _mousePos; // Track the position of the mouse on the Map

    /// Distance between the MapTip and the boundary of the map
    public double Margin { get; set; }

    // Called after the behavior is attached to an AssociatedObject.
    // Override this to hook up functionality to the AssociatedObject.
    protected override void OnAttached()

        if (this.AssociatedObject == null || this.AssociatedObject.Layers == null)

        // Wire layer collection changed handler to monitor adding/removal of GraphicsLayers
        this.AssociatedObject.Layers.CollectionChanged += Layers_CollectionChanged;

        foreach (Layer layer in this.AssociatedObject.Layers)
            wireHandlers(layer as GraphicsLayer);

    // Called when the behavior is being detached from its AssociatedObject, but before it has actually occurred.
    // Override this to unhook functionality from the AssociatedObject.
    protected override void OnDetaching()

        if (this.AssociatedObject == null || this.AssociatedObject.Layers == null)

        foreach (Layer layer in this.AssociatedObject.Layers)
            removeHandlers(layer as GraphicsLayer);

    // Add/remove MapTip positioning handlers for added/removed GraphicsLayers
    void Layers_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        if (e.NewItems != null)
            foreach (Layer layer in e.NewItems)
                wireHandlers(layer as GraphicsLayer);

        if (e.OldItems != null)
            foreach (Layer layer in e.OldItems)
                removeHandlers(layer as GraphicsLayer);

    // Add MapTip positioning handlers
    private void wireHandlers(GraphicsLayer graphicsLayer)
        if (graphicsLayer == null) return;

        // Add handlers to get the position of the mouse on the map
        graphicsLayer.MouseEnter += GraphicsLayer_MouseEnterOrMove;
        graphicsLayer.MouseMove += GraphicsLayer_MouseEnterOrMove;

        if (graphicsLayer.MapTip != null)
            graphicsLayer.MapTip.SizeChanged += MapTip_SizeChanged;

    // Remove MapTip positioning handlers
    private void removeHandlers(GraphicsLayer graphicsLayer)
        if (graphicsLayer == null) return;
        graphicsLayer.MouseEnter -= GraphicsLayer_MouseEnterOrMove;
        graphicsLayer.MouseMove -= GraphicsLayer_MouseEnterOrMove;

        if (graphicsLayer.MapTip != null)
            graphicsLayer.MapTip.SizeChanged -= MapTip_SizeChanged;

    // Get mouse position
    void GraphicsLayer_MouseEnterOrMove(object sender, GraphicMouseEventArgs args)
        _mousePos = args.GetPosition(AssociatedObject);

    // Position and size MapTip
    void MapTip_SizeChanged(object sender, SizeChangedEventArgs e)
        if (AssociatedObject == null)

        FrameworkElement mapTip = sender as FrameworkElement;
        if (mapTip == null)

        // Determine what quadrant of the Map the mouse is in
        bool upper = _mousePos.Y < AssociatedObject.ActualHeight / 2;
        bool right = _mousePos.X > AssociatedObject.ActualWidth / 2;

        if (mapTip.ActualHeight > 0)
            double maxHeight;
            double maxWidth;
            double horizontalOffset;
            double verticalOffset;

            // Calculate max dimensions
            maxHeight = upper ? AssociatedObject.ActualHeight - _mousePos.Y - Margin :
                _mousePos.Y - Margin;
            maxWidth = right ? _mousePos.X - Margin : AssociatedObject.ActualWidth
                - _mousePos.X - Margin;

            // Apply dimensions and offsets.  MapTip should not extend outside the map.
            mapTip.MaxHeight = maxHeight;
            mapTip.MaxWidth = maxWidth;

            //Calculate offsets for MapTip
            verticalOffset = upper ? 0 : (int)(0 - mapTip.ActualHeight);
            horizontalOffset = right ? (int)(0 - mapTip.ActualWidth) : 0;

            // Set horizontal and vertical offset dependency properties on the MapTip
            mapTip.SetValue(GraphicsLayer.MapTipHorizontalOffsetProperty, horizontalOffset);
            mapTip.SetValue(GraphicsLayer.MapTipVerticalOffsetProperty, verticalOffset);

Here’s a screen shot of the behavior in action. Compare this result to the screen shot at the beginning of this post which demonstrates default maptip display behavior.      

View the live demo

Download the source code


Rex Hansen
ESRI Product Engineer
ArcGIS Server .NET, Silverlight/WPF, Windows Phone, MapIt

Posted in Web | Tagged , | 5 Comments

Use SymbolDisplay to create symbol swatches for legends

The current version of the ArcGIS Silverlight/WPF API contains a set of primitive controls used to build other public controls in the Toolkit library (ESRI.ArcGIS.Client.Toolkit.dll).   For example, the Editor Widget and Template Picker controls display a swatch for each symbol in an editable graphics or feature layer.  The primitive control that provides this functionality is SymbolDisplay.  SymbolDisplay takes a Symbol and generates a swatch at the defined height and width.  It’s convenient for generating a scaled visual representation of graphic symbols for display in a legend or printable output.  The following code example shows how to generate a legend using symbols defined as part of a feature layer in a map service. You can also create and use SymbolDisplay at runtime in code-behind.

<!-- Namespaces -->

<!-- FeatureLayer in a map -->
<esri:FeatureLayer ID="MyFeatureLayer1" Visible="True"
Url="" />

<!-- SymbolDisplay in a ListBox -->
<ListBox Margin="0,5,0,0" IsHitTestVisible="False" BorderThickness="0"
ItemsSource="{Binding ElementName=MyMap, Path=Layers.[MyFeatureLayer1].LayerInfo.Renderer.Infos}"
<StackPanel Orientation="Horizontal">
Symbol="{Binding Symbol}"
Width="20" Height="20"
VerticalAlignment="Center" />
<TextBlock Text="{Binding Label}"
Margin="5,0,0,0" />

Here is a screenshot of SymbolDisplay in action:

Keep in mind that the source code for the Toolkit library is available on Codeplex; this includes the SymbolDisplay class.  The source code is available for download under the Downloads or Source Code tab.  

View the live demo

Download the source code


Rex Hansen
ESRI Product Engineer
ArcGIS Server .NET, Silverlight/WPF, MapIt

Posted in Web | Tagged , | 4 Comments

The ArcGIS API for Windows Phone version 2.1 Beta is available!

We’re proud to announce that the initial beta for version 2.1 of the ArcGIS API for Windows Phone is now available for download on the resource center.  The API is built on the Silverlight framework of the Windows Phone Application Platform which includes existing Microsoft tools and technologies such as Visual Studio and Expression Blend. Developers already familiar with those tools and technologies will be able to create new applications for Windows Phone without a steep learning curve.  

The ArcGIS API for Windows and the ArcGIS API for Microsoft Silverlight/WPF share the same architecture, thus you can reuse knowledge and application logic in ArcGIS applications built for Windows Phone, Web, and desktop applications.  However, there are some pivotal differences in platform and device capabilities.  Currently these differences limit the functionality included in the initial beta release of the ArcGIS API for Windows Phone.  For example, the toolkit controls or map behaviors and actions libraries are not included, maptips on graphics layers are not supported (yet), and only a limited subset of toolkit data sources (OpenStreetMap and WMS) are provided.  In addition, the availability of mobile devices running the Window Phone 7 platform is limited, so the UI experence for most applications will involve the use of emulation software.  Granted, the use of a touch-enabled device with the emulator can provide a interactive experience similar to a phone.  Currently the ArcGIS API includes functionality in the Map and Draw objects to support a common touch and gesture experience on touch-enabled devices.          

To get started: 

1)  Download and install the Windows Phone Developer Tools.  They will integrate with Visual Studio 2010 or Expression Blend 4, or install a version of Visual Web Developer Express for Windows Phone.  Note, the Windows Phone Developer Tools are only supported on WIndows Vista and Windows 7 platforms.  The tools are not supported for use on a virtual machine.

2)  Download the ArcGIS API for Windows Phone ZIP file from the ArcGIS resource center.  Unzip the contents to a directory of your choice.

3)  Use the Getting Started section in the help documentation to build your first Windows Phone application with the ArcGIS API.

For more information, use the ArcGIS for Windows Phone resource center to review concepts, peruse and download the interactive SDK, or dive deep into the APIs library reference.  Also, feel free to ask questions and get help in the ArcGIS for Windows Phone forum.

Be sure to check out the Windows Phone Developer site for more information on the general Windows Phone developer experience.   


The ArcGIS Windows Phone Development Team


Posted in Web | Tagged , , | Leave a comment