spacer1
spacer2 1_1 1_2
2_1
 Subscribe
 The MP2K Update!
 
 
 
 Magazine
Front Cover
What's New
Articles
News
Sample Data
Gallery
Advertise
About
 Features
MapPoint 2011
Press Releases
MapPoint Forums
Companies
Link to MP2Kmag
Wish List
MapPoint Trial
Authors
 Earlier Content
Past News Items
Past What's New Announcements
 Sponsors
 Order

MapPoint 2011

Programming MapPoint in .NET

MapPoint Book

  Spatial Community
SVG Tutorials
MapPoint

Map Visitors

  ARTICLES  


Programming with MapPoint 2004 using the .NET Framework

This article by Chandu Thota discusses how to program with the MapPoint 2004 object model using the Microsoft® .NET Framework

Microsoft Corporation
January 2004

Applies to: MapPoint 2004

Requirements: MapPoint 2004, Microsoft .NET Framework and Visual Studio .NET 2003.

Experience: Targeted at an experienced .NET developer.

Contents:
- Introduction
- Programming MapPoint 2004 - Step by Step Approach
- Coding for Special Conditions
- Conclusion

Introduction

MapPoint 2004 provides a rich object model to build powerful business intelligence and location based applications. However, the MapPoint 2004 object model was originally designed for COM based programming and if you are currently programming using the .NET Framework, you need build MapPoint 2004 applications using the interoperable assemblies generated from the COM type libraries. This article outlines the step by step approach to build MapPoint 2004 applications, by developing an Address Finder application, using the .NET Framework. This article also discusses a couple of tricky conditions and resolutions that you may face while developing with MapPoint 2004 using the .NET Framework.

Programming MapPoint 2004: Step by Step Approach

In this section I'm going to outline a step-by-step approach to build MapPoint 2004 applications by developing an example application that finds addresses.

As I have discussed in the previous section, the MapPoint 2004 object model is originally designed for COM programming model. In order to build applications using the Microsoft .NET Framework you need the interoperable assemblies for the MapPoint COM library. If you are using Visual Studio .NET, you can do so using the Add Reference option from the project context menu, after creating a new project, as shown below:


When you see the Add Reference dialog window, select the COM tab and select the Microsoft MapPoint 11.0 Object Library ( ) to add the MapPoint 2004 type library as a reference to your project, as shown in the following picture:


Now, let's start writing some C# code by importing the MapPoint 2004 namespace:

//Add MapPoint namespace

using MapPoint;

Adding this namespace makes your code look cleaner when using MapPoint types. However, if you are developing a Windows application it is important to note that this namespace defines an Application interface that whose name conflicts with the Application class defined in the System.Windows.Forms namespace. To resolve this conflict you have to fully qualify either one of these two classes with their namespaces.

The next step is to create an instance of the MapPoint 2004 application object:

//Define an application instance

ApplicationClass app = null;

//Create an application class instance

app = new ApplicationClass();

The MapPoint 2004 application instance always exposes an active map instance which can be used to perform any location oriented tasks. In this example I'm going to use the active map instance to find an address.

//Now get the location

FindResults frs = app.ActiveMap.FindAddressResults(" ",

" ",

string.Empty,

"WA", "", null);

As you may have noticed already, the FindAddressResults method returns the FindResults which is a collection of locations found. There are two ways to access the list of locations from the FindResults instance:

1. Obtain an enumerator and enumerate through the location list. This method is useful if you want to provide a list of all matching addresses; for example, providing a list of addresses in case of an ambiguity.

//Get an enumerator

IEnumerator ienum = frs.GetEnumerator();

//Loop through the enumerator

while(ienum.MoveNext())

{

Location loc = ienum.Current as Location;

if(loc != null)

{

//process the location

string s = loc.StreetAddress.Value;

}

}

2. Use the get/set accessor methods to get the locations using indexes. This method is useful when you want to retrieve a specific item without iterating through the collection; for example, always retrieve the first match from the collection.

//Define an index

object index = 1;

//Access the location item using the accessor method

location = frs.get_Item(ref index) as Location;

As you might have observed from the above code, the FindResults collection does not support accessing collection items via the indexers; hence you have to use the get_Item and set_Item methods.

Finally, when you are done with finding the address, you have to close the application object to make sure that the MapPoint 2004 application instance doesn’t live in the memory; you can do so by writing the following code:

//Quit the application

if(app != null)

app.Quit();

app = null;

The following code listing shows the find address function that has been discussed in this section so far:

//Define an application instance

ApplicationClass app = null;

//Define a location instance

Location location = null;

//Define a FindResults instance

FindResults frs = null;

try

{

    //Create an application class

    app = new ApplicationClass();

    //Now get the location

    frs = app.ActiveMap.FindAddressResults(" ", " ", string.Empty, "WA", "", null);

    //Check if the find query is succesfull

    if(frs != null && frs.Count > 0)

    {

        object index = 1;

        location = frs.get_Item(ref index) as Location;

        //Male the MapPoint 2004 application visible

        //and go to that location

        app.Visible = true;

        location.GoTo();

        //Do your processing with the location

        MessageBox.Show(location.StreetAddress.Value);

    }

}

catch(Exception ex)

{

    string message = ex.Message;

}

finally

{

    if(app != null)

    {

        try

        {

            app.Quit();

        }

        catch

        {

            //This means your app has already quit!

        }

        finally

        {

            app = null;

        }

    }

}

In this section, you have seen how to build a simple address finding application using MapPoint 2004 and the Microsoft .NET Framework. In the next section I'm going to discuss a couple special conditions that you face very frequently while programming with MapPoint 2004.

Coding for Special Conditions

This section discusses the two most frequent special conditions that you face while programming with MapPoint 2004.

Working with methods with optional parameters

When you use a method with optional parameters and you do not have valid parameters to pass, you must use the type System.Reflection.Missing.Value. For example the DisplayDataMap method on a MapPoint DataSet class has the following method signature:

DisplayDataMap([DataMapType], [DataField], [ShowDataBy], [CombineDataBy], [DataRangeType], [DataRangeOrder], [ColorScheme], [DataRangeCount], [ArrayOfCustomValues], [ArrayOfCustomNames], [DivideByField], [ArrayOfDataFieldLabels], [ArrayOfPushpinSymbols])

As you can see all of the parameters are optional parameters. Working with methods like this necessitates the usage of the missing type defined in the .NET Framework. The following example shows how to use the missing value for optional parameters:

//Define a missing value type

object missing = System.Reflection.Missing.Value;

//Use the missing type for optional parameters that are not needed

DataMap mydatamap =

mydataset.DisplayDataMap(GeoDataMapType.geoDataMapTypeShadedArea,

field, GeoShowDataBy.geoShowByRegion1,

GeoCombineDataBy.geoCombineByDefault,

GeoDataRangeType.geoRangeTypeDiscreteLogRanges,

GeoDataRangeOrder.geoRangeOrderDefault, 15, 3,

missing, missing, missing, missing, missing);

Working with Collections

As you may remember from the previous section, it is a little tricky to work with collections since the collections in COM interoperable assemblies don’t support indexers. There are two ways to retrieve collection items:

1. Using an enumerator and

2. Using the get/set accessor methods

Each of these methods has its own merits. By using the enumerator, you can get the entire list of collection items, however, there are some cases where you need to access a specific item in a given collection and you have to use the get/set accessor methods. For example if you have to retrieve the population demographic data for the year 2002 from MapPoint 2004, you have to do the following:

//Create an application class

app = new ApplicationClass();

//Get demographics dataset from the activemap

mydataset = app.ActiveMap.DataSets.GetDemographics(GeoCountry.geoCountryUnitedStates);

//Create a key - you need this as an index key for the fields

object key = "Population (2002)";

//Now get the field using the key defined above collection

Field field = mydataset.Fields.get_Item(ref key);

Conclusion

In this article you have seen how to build applications using MapPoint 2004 using the .NET Framework. You have also learned how to handle special conditions such as methods with optional parameters and collections. The code and the special condition considerations also work with MapPoint 2002 when an appropriate reference is added.

References

· For more samples and code snippets related to MapPoint 2004 on my web log: http://www.csthota.com/mappoint/

· MapPoint 2004 o bject model help on MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mappoint2004/BIZAboutProgramming.asp?frame=true

Discuss this story in the forum.

Author: Chandu Thota
Email: cthota(AT)microsoft.com
URL: http://www.esynaps.com
Chandu Thota works for Microsoft Corporation in the MapPoint User Experience team. Having been a developer for more than 5 years, he wakes up everyday with a goal to make things as simple and efficient as possible for developers to build applications on the MapPoint platform.

Chandu has published several articles related to the Microsoft .NET Framework and founded an online .NET Web Services portal, http://www.esynaps.com. He is also a co-author of the books Understanding the .NET Framework and Building an ASP.NET Intranet, both published by Apress.



Google
 
MP2Kmag Internet


 Recent Discussion
-MP 2011 Silent Install with Key AND Activation?
-Convert .GmL to a spatial data type
-bingmaps: Spouse run interference on an Indianapolis road trip for Super Bowl? Get the best view on Bing Maps. BYO beer & chips*http://t.co/hkZlFnJ4
-MAP POINT Route Planning
-MapPoint Routes: Multiple start points, one stop point.
-Export Territories - plot them on google maps or bing
-bingmaps: Check out this blog and interview to learn more about LifeLens and Bing Maps http://t.co/mlNHyKdW
-Can't make working OLAP add-in
-Importing data from Canada?
-MapPoint North America 2011 - UK Postcodes?
-Seeking Church Demographic info for MP2011
-Exporting Pushpin Counts in a radius
-bingmaps: RT @bing: Congrats to the Imagine Cup Grant Winners, esp. OaSys and LifeLens using @Bing maps! http://t.co/Fha9Cf0V
-Store Distance Calculations
-Modify maps
-Win7x64SP1 clobbers MapPoint 2010....
-bingmaps: RT @ChrisPendleton: New Bing Maps Features Help You Feel Spatial…
-Hope it doenst soudn TOO much like Im a Noob.. BUT...
-Capture click events from MapPoint to my Winforms app?
-bingmaps: @natelawrence Thanks for the feedback...check out our*Forum for technical assistance:*http://t.co/WDAjNJCD
-bingmaps: @Jordanaous*We're glad you're enjoying Streetside...thanks for using Bing Maps!
-bingmaps: @Goodlett*A beautiful partnership, indeed.
-bingmaps: @urbanmapping Love the fascinating questions you guys are asking, and the important information you provide. Keep it up!
-bingmaps: @beeinthehive*Happy to help! Thanks for using Bing Maps!
-bingmaps: @Geocrusader80* Isn't the imagery amazing? Glad you're a fan!
 Resources
Browse GIS books and periodicals
Find a MapPoint Partner or Consultant
Real Estate Thornbrook Subdivision


Want Your Site To Appear Here?

   © 1999-2009 MP2K. Questions and comments to: website@mp2kmag.com
  Microsoft and MapPoint 2002/2004/2006/2009 are either trademarks or registered trademarks of Microsoft.



• Buy Your Car Used Cars UK, Car Lease and Contract Hire