Joseph Guadagno

Founder of Southeast Valley .NET User and Microsoft Visual C# MVP

I am pleased to announce the date for Desert Code Camp 2010.2, aka Nov2010 code camp.  It will take place Saturday, November, 13th, 2010.

There are a few changes for this camp.

New Web Site

The web site have been changed to accommodate history in the Desert Code Camps. This means that each Code Camp will have it’s own url, so you can see what sessions have taken place in the past.

This Desert Code Camp’s, 2010.2, url is http://nov2010.desertcodecamp.com and is ready to accept sessions.

May 2010 Desert Code Camp, 2010.1 Desert Code Camp, is http://may2010.desertcodecamp.com. I am in the process of adding in the Desert Code Camps from 2009. You can go to http://desertcodecamp.com to get the list of Code Camps that the site has.

New Location

Chandler – Gilbert Community College, will be hosting the event on their Pecos Campus.

  • This facility is right off of the Loop 202 (SanTan Freeway) and Gilbert Road at the intersection of Gilbert Rd and Pecos Rd, in Chandler, AZ.
  • The facility provides plenty of free parking
  • There is free wifi with no requirements or software installed on your pc.
  • There is a student center for socializing and networking.
  • Modern facilities. In fact, Desert Code Camp will most likely take place in their brand new Ironwood Hall (IRN).
  • Larger room sizes.  We will be able to hold several 120+ sessions.
  • Speaker Dinner

    I am going to try and have a speaker dinner also at this Desert Code Camp.  The speaker dinner will take place on Friday night, pending a sponsor. More information will be provided when we get closer. If you want to sponsor the speaker dinner for about 40 people, send me an email at jguadagno @ sevdnug.org.

    After Party

    We are working with the City of Chandler, and local businesses downtown to have several after parties going on in Downtown Chandler after the Code Camp.  Downtown Chandler is approximately 3 miles away from Chandler – Gilbert Community College.

If you want to help, shoot me an email at jguadagno at sevdnug.org.


Back a while ago, I created a site to track events at the Microsoft MVP Global summit. I did this because there are so many after parties or events that happen at this summit as well as other conferences.  Well I put up a site to track events at the Microsoft Professional Developers Conference (PDC), it is PDCEvents.info

Check it out. I have already added the events two events to the site. 
Welcome Reception
: http://bit.ly/pdc_1
Attendee Party
:http://bit.ly/pdc_2

The site has lots of feeds available, here are some links for the site:
Home Page: http://bit.ly/PDCEvents
iCal Feed: http://bit.ly/PDCEventsCal
RSS Feed: http://bit.ly/PDCEventsRSS
Maps Feed: http://bit.ly/PDCEventsMap
Mobile Site: http://bit.ly/PDCEventsMobile


Announcing PDCEvents.info

One thing that I have noticed of the past few years when it comes to conference or “Summits” is that there are a lot of after parties, tweets, etc. that happen.  Most of the time it is difficult to get the word out about these events or even find out about them.  This sparked the creation of MVPSummitEvents.com. Now it is time for PDCEvents.info. From the site you can add events, create venues, display events, subscribe to the RSS feed or iCal feed, download an event to outlook or calendar client that can consume a .VCS file. Note: the creation of events and venues requires you to sign in using your Windows Live Id account, no information from Live is used within our site.

Site: http://pdcevents.info

RSS: http://pdcevents.info/rss.ashx

iCal: http://pdcevents.info/calendar.ashx

GeoRSS: http://pdcevents.info/map.aspx

If you tag events with #PDC10, they will appear on http://pdcevents.info/Flickr.aspx

 

Let me know what you think at jguadagno@sevdnug.org


Code Camp redone

So my family and I have been going camping a lot for the past two years and this got me thinking… Why not have a Code Camp with actual camping?  We can still learn, have fun and enjoy beautiful Arizona at the same time.

If your interested, help me with the planning.  Complete the survey at: http://bit.ly/bUnZvl


No not Chandler Bing from Friends, although maybe Monica :) … it’s living in Chandler, Arizona.

In the past, I have tried to keep this blog mostly technical but something happened this morning that made me realize I love living in Chandler, Arizona. I forgot to close my garage door last night and during the City of Chandler Police Departments nightly patrol, the officer closed the door for me and left me a nice little note/reminder. Way to go!

A bit of history… My wife and I spend quite some time researching different cities and parts of the country when deciding where would be the best location (in our opinion) to raise our family. After all the research and talking to some friends and almost family out here we decided to move to Chandler, Arizona. So about 5 years ago in June of 2005 we moved from Long Island, NY and left all our family and friends to move to Chandler, Arizona.

So why do I love living in Chandler, Arizona. There are many reasons. The City of Chandler is proactively looking to grow the City in ways that most cities do not attempt.  The City of Chandler is hosting Laid Off Camp Phoenix on April 3rd, 2010.  They attempted to host Desert Code Camp on May 15th, 2010 (just not enough time to plan) and they are hosting Arizona Give Camp on May 21st-May 23rd, 2010.

The City of Chandler does so much for its citizens, Day of Fun and Fitness, Family Easter celebrations, Chandler Jazz festival,  and more. The City of Chandler has won countless awards also.


It’s time for the 7th iteration of Desert Code Camp (my second one as director).  Desert Code Camp will be held on May 15th at DeVry again.

DeVry University
2149 W Dunlap Ave (Map)
Phoenix, Arizona 85021

The Desert Code Camp website has a new design and logo thanks to Gabriel Utasi and a few new features.

Sign-up to give a talk today.

Follow Desert Code Camp on Twitter @DesertCodeCamp


Join us for our 2nd social mixer of the year at Brunswick Zone in Gilbert for two hours of bowling and socializing taking place on Monday 2/22 at 6:00 PM.

We got a few lanes, a few shoes, some appetizers and some drinks sponsored by Comsys*.

Registration will be limited!

Register at: http://sevdnug0210.eventbrite.com

* The sponsor will cover a certain amount of the cost.  You might be required to purchase some of your own food and drink.

 


MSDN Events: Take Your Applications Sky High with Cloud Computing and the Windows Azure Platform

February 23rd

Join your local MSDN Events team as we take a deep dive into cloud computing and the Windows Azure Platform. We’ll start with a developer-focused overview of this new platform and the cloud computing services that can be used either together or independently to build highly scalable applications. As the day unfolds, we’ll explore data storage, SQL Azure, and the basics of deployment with Windows Azure. Register today for these free.

Register at: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032438178&Culture=en-US

MSDN Events Presents: From Zero to XAML in 4 Hours

March 23rd

Learning XAML for use in Windows Presentation Foundation (WPF) or Silverlight can be a little daunting. This seminar will introduce the basic concepts of XAML and show you how to get started quickly and easily. You wil be given an overview of XAML tools such as VS.NET 2010 and Expression Blend. If you are new to Silverlight and WPF you need to attend this seminar to see how to move to these powerful new platforms. The focus on this seminar is using XAML to build business applications.

Register at: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032439056&Culture=en-US

These are free events.  I would register while there is still room!


In my previous post, Using the Bing Maps Web Services for Geocoding Addresses, I talk about geocoding addresses using the Bing Maps Web Services. Now it is time to talk about getting imagery of maps, roads or aerials views for addresses or geocodes.

In order to get started using the Bing Maps Web Services, check out the previous post Getting Started section.

Bing Maps Web Services

Bing Maps Web Services is a set of Web services that allow you to add mapping and search functionality to your application, including location finding, map imagery, and routing capabilities. For example, you can:

Use the Imagery Service to:

  • Return a link to a map with a pushpin at a specific location
  • Provide a road map or bird’s eye or aerial imagery to you application

Use the Route Service to:

  • Get directions that include traffic warnings and route hints between multiple locations.
  • Get directions from all major roads to a destination (1-click directions, also referred to as a "party map") and then use the Imagery Service to map those routes.

For this post we will cover the Imagery service.

Just like the Geocode Service, there is a request, MapUriRequest, and response, MapUriResponse, object for the Imagery Service.

In order to get the Uri to display a map in your application you will need to use the imagery service client, ImageryServiceClient. The ImageryServiceClient needs to be instantiated with the WCF endpoint to use, by default it should be ‘BasicHttpBinding_IImageryService’. Then call the GetMapUri method passing your MapUriRequest object.

ImageryServiceClient imageryService = new ImageryServiceClient("BasicHttpBinding_IImageryService");
MapUriResponse mapUriResponse = imageryService.GetMapUri(mapUriRequest);
Building the MapUriRequest

The MapUrilRequest has two properties that need to be populated; the Credentials property which should contain you Bing Maps Id and either the Center, MajorRoutesDestination, or Pushpins property.  The code snippet below demonstrates instantiating the MapUriRequest and setting the properties based on values passed into a method (outlined later).

MapUriRequest mapUriRequest = new MapUriRequest
    {
      Credentials = new Credentials {ApplicationId = appId},
      Pushpins = pushpins,
      Center = new Location {Latitude = latitude, Longitude = longitude}
    };

Now you can customize the options for the map using the MapUriOptions property of the MapUriRequest object. Here is a list of the properties from the MSDN documentation:

Property name Description

DisplayLayers

A string array indicating the layer data to display on the map. Optional. The default value is null.

ImageSize A SizeOfint Class object specifying the height and width of the image to return. Optional. The default width is 350 and the default height is 350.
ImageType An ImageType Enumeration value specifying the format of the image to return. Optional. The default value is ImageType.Default, which means the default changes depending on the map style specified.
PreventIconCollision A bool indicating whether or not to separate pushpin icons that are close to each other on the map so that they are more visible. Optional. The default value is false.
Style A MapStyle Enumeration value specifying the map style of the image to return. Optional. The default value is MapStyle.Road.
UriScheme A UriScheme Enumeration value specifying the URI scheme to return. Optional. The default value is UriScheme.Http.
ZoomLevel An int indicating the zoom level of the map to return. Optional.

Assigning some of the options:

// Set the map options
MapUriOptions mapUriOptions = new MapUriOptions();
mapUriOptions.Style = MapStyle.Road;
mapUriOptions.ZoomLevel = zoom;
mapUriOptions.ImageSize = new SizeOfint {Height = height, Width = width};
// Set the options property of the request.
mapUriRequest.Options = mapUriOptions;

Now you are ready to call the image service client to get the MapUriResponse.

ImageryServiceClient imageryService = new ImageryServiceClient("BasicHttpBinding_IImageryService");
MapUriResponse mapUriResponse = imageryService.GetMapUri(mapUriRequest);

Here is a helper class,

,  which wraps the GetMapUri function with 8 different overloads.

Working with the MapUriResponse

The MapUriResponse object has three properties:

Name Description
BrandLogoUri The System.Uri of the Bing Maps brand logo image.
ResponseSummary A ResponseSummary Class object describing the response that was returned by the service.
Uri A string that is the URI of the requested map.

For brevity sake, we will just use the Uri property.  You should, though, for good programming practices, check the ResponseSummary property for any exceptions.

string mapUri = Imagery.GetMapUri("YourAppId", 47.62, -122.2);
imgMap.imageUrl = mapUri;

This call retrieve the Uri to use to display a 200x200 road map of the area at latitude 47.62 and longitude -122.2 with a zoom of 14, which is downtown Bellevue, WA.

image

If you want to add pushpins or markers similar to the above image you will need to populate the an array of PushPin objects. A PushPin object has an IconStyle which is the type of icon to use, a Label which an optional text to display on the pushpin (only works with certain pushpins) and the Location which contains the latitude and longitude that the pushpin should be located at.

That’s it.  It seems like a lot of work for a one line call.  With the attached Imagery.cs class, a lot of the overhead work was done for you.


For the MVPSummitEvents and Mix10Events site I wanted to create a map of all of the events listed on the site. In order to do that I needed to Geocode all of the addresses for the events.  There are several services out there for geocoding an address, Microsoft, Yahoo, and Google provide this service as well as others.  I decided to go with the Microsoft Bing services, being a Microsoft MVP.

Getting Started

Let’s get started. MSDN has just about everything you need to get started with using the Bing Map Web Services. 

Step 1: The first step is to get a key or token to use in your application for the Bing Maps Web Services application. This can be done by visiting the Bing Maps Account center and clicking on Create a Bing Maps account.

Step 2: If you are using Visual Studio, add a service reference to one or more Bing Maps Web Services that provide the features you need. See the Generating Client Proxy Classes topic and the Bing Maps Web Services Metadata topic.

VirtualEarthWebServicesWhether you used Visual Studio or the svcutil application you should have one file, most likely named VirtualEarthWebServices.cs. The file will contain a bunch of wrapper classes around the Bing Maps Web Services, and the required Windows Communication Foundation (WCF) classes. You will also see the generated configuration settings for the app or web config files.

Step 3: Set every Bing Maps Web Services request a valid Credentials property. You will see more on this in a bit.

Geocoding an Address

There are two properties that are required to successfully request a GeoCode for an address.

  1. 1) Set the Credential Property of the GeoCodeRequest object
  2. 2) Set either the Query property or Address property of the GeoCodeRequest object.

Here is a helper function that wraps the call to GeoCodeRequest.

/// <summary>
/// Gets the location.
/// </summary>
/// <param name="appId">The app id.</param>
/// <param name="address">The address.</param>
/// <returns></returns>
public static GeocodeResponse GetGeocodeResponse(string appId, string address)
{
    GeocodeRequest geocodeRequest = new GeocodeRequest
      {
          Credentials = new Credentials {ApplicationId = appId},
          Query = address
      };
    ConfidenceFilter[] filters = new ConfidenceFilter[1];
    filters[0] = new ConfidenceFilter {MinimumConfidence = Confidence.High};
    GeocodeOptions geocodeOptions = new GeocodeOptions {Filters = filters};
    geocodeRequest.Options = geocodeOptions;

    GeocodeServiceClient geocodeServiceClient = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService");
    return geocodeServiceClient.Geocode(geocodeRequest);
}

This method will return a GeocodeResponse object. The GeocodeResponse object contains three properties that are populated based on the query.

Name Description

BrandLogoUri

The System.Uri of the Bing Maps brand logo image. (Inherited from the ResponseBase Class.)

ResponseSummary A ResponseSummary Class object describing the response that was returned by the service. (Inherited from the ResponseBase Class.) This class returns any exceptions that we raised during the request.
Results A GeocodeResult Class array, where each element is a possible match returned by the Geocode Service.

To keep this article short(er) I will just cover the Results object. Depending on the Confidence filter and Geocode options that were set in the call you could receive more than one result.

Let’s assume that we only want to work with the first result and get the Geocode for “1 Microsoft Way, Redmond, WA”. We simply call the static method of GetGeocodeResponse and pass in the Bing Maps API key and the address to search for.

var address = "1 Microsoft Way, Redmond, WA";
GeocodeResponse response = GetGeocodeResponse(appId, address);

Assuming the address was found we can now work with the properties of the GeocodeResult class to find out the Geocode.  The Geocode is located in the Locations property which is an array of GeocodeLocation objects. If the Count of the Locations is greater than one, let’s just take the first one and update the txtLatitude and txtLongitude objects.

if (response.Results != null)
{
	var geocodeLocation = response.Results[0].Locations[0];
	if (geocodeLocation != null)
	{
	    txtLatitude.Value = geocodeLocation.Latitude;
	    txtLongitude.Value = geocodeLocation.Longitude;
	}
	else
	{
	    txtLatitude.Value = txtLongitude.Value = 0;
	}
}

That’s it. Next up, using the Bing Maps Web Services for getting map images.


PhotoStream

About the author

Joseph Guadagno Name: Joseph Guadagno
Occupation: Programmer, SEVDNUG, Microsoft Visual C# MVP
Location: Chandler, AZ

Joseph Guadagno RSS Joseph Guadagno Twitter Joseph Guadagno Linked In