Microsoft Provides MapPoint Web Service to enrich application with mapping functionality. It allows you to integrate maps, driving directions, order tracking and proximity searches into a wide range of solutions.
For those of you who want to start using MapPoint for test and development purposes you can sign up for a free developer account here:
With a developer account, you get full access to the MapPoint Web Service APIs and staging environment, which you can use to build applications for trial, demonstration, and proof-of-concept purposes.
Microsoft Dynamics CRM Account entity already has longitude and latitude parameters for address. But mostly organizations don’t use those parameters. MapPoint web service provides FindAddress service to resolve addresses and returns longitude and latitude parameter as shown in the code snippet below.
Find Address Longitude and Latitude
FindServiceSoap FindService = new FindServiceSoap ();
FindService.Credentials = new NetworkCredential("", "");
FindService.PreAuthenticate = true;
MyAddress mAddress = new MyAddress();
mAddress = (MyAddress)addresses[i];
FindAddressSpecification spec = new FindAddressSpecification();
spec.InputAddress = new Address();
spec.InputAddress.AddressLine = mAddress.Line1;
spec.InputAddress.CountryRegion = mAddress.Country;
spec.InputAddress.Subdivision = mAddress.StateProvince;
spec.InputAddress.PrimaryCity = mAddress.City;
spec.InputAddress.PostalCode = mAddress.Postalcode;
spec.DataSourceName = "MapPoint.NA";
FindResults results = FindService.FindAddress(spec);
Populating Location and Pushpin Array
Location and pushpins objects require longitude and latitude values for address. Following code is used to populate Location and Pushpin objects of MapPoint API.
Location myLocation = new Location[addresses.Count];
myLocation[i] = new Location();
myLocation[i].LatLong = new LatLong();
myLocation[i].LatLong = results.Results.FoundLocation.LatLong;
Pushpin pushpins = new Pushpin [addresses.Count];
pushpins[i] = new Pushpin();
pushpins[i].PinID = "pin0";
pushpins[i].IconName = "0";
pushpins[i].Label = mAddress.Name;
pushpins[i].IconDataSource = "MapPoint.Icons";
pushpins[i].LatLong = results.Results.FoundLocation.LatLong;
There is no simple way to provide hyperlink at Pushpins, although Pushpin label and icon can be set to custom settings.
Getting image and automatic zoom based on the geography covered by the addresses
MapPoint Web Service provides Render Service API to automatic zoom based on the geography covered by addresses. Here is the code snippet to do this:
//Call MapPoint Render Web Service
RenderServiceSoap RenderService = new RenderServiceSoap();
RenderService.Credentials = new NetworkCredential("", "");
MapViewRepresentations mvRep = RenderService.GetBestMapView(myLocation,"MapPoint.NA");
mviews = new ViewByBoundingRectangle();
mviews = mvRep.ByBoundingRectangle;
MapSpecification mspec = new MapSpecification();
mspec.Options = moptions;
mspec.Views = mviews;
mspec.Pushpins = pushpins;
mspec.DataSourceName = "MapPoint.NA";
MapImage image = RenderService.GetMap(mspec);
So the final image can be displayed in some ASP.NET page to show in Microsoft Dynamics CRM. Please find below my integration of MapPoint web service with MSCRM.
One can select Accounts to be plotted on MapPoint and click Show Accounts Map Button at Account Entity grid toolbar.
All selected accounts will be plotted on the MapPoint in a new web dialog with Invalid addresses at the bottom.
Here is the final Image generated in new web dialogue: