Link to home
Start Free TrialLog in
Avatar of ba272
ba272

asked on

MapPoint: My distances and times doesn't match the MapPoint WebService, or the MapPoint Windows program

Hi,

I'm new to the MapPoint ActiveX control and have written some code to get the distance and time betwen two points.  But they don't match the MapPoint web service.  Furthermore, they don't even match the values given by the MapPoint Windows application.

So, I obviously have some problem with the way I've written the code to extact this data from MapPoint.  I've included two functions that I've coded.  The first, GetDistanceAndDuration(), returns a comma delimited string like, "1.1, 4.5";  It calls GetLocationFromAddress(), which returns a location associated with a given address.

I'd really appreciate it if someone could look over my code and give me some help.  I can't use MapPoint until I can figure out how to get good data from it.

Thanks,
Bob


private string GetDistanceAndDuration( string address1, string address2 )
{
      string returnStr = null;
      MapPoint.Route mpRoute      = MpMap.ActiveRoute; // MpMap is a property of the object
      mpRoute.Clear();

      MapPoint.Location loc1 = GetLocationFromAddress( address1 );
      mpRoute.Waypoints.Add( loc1, "loc1" );

      MapPoint.Location loc2 = GetLocationFromAddress( address2 );
      mpRoute.Waypoints.Add( loc2, "loc2" );

      mpRoute.Calculate();

      Double dElapsedTime1      = mpRoute.DrivingTime;
      double duration            = Math.Round( dElapsedTime1 * 24 * 60, 1 );
      double distance            = Math.Round( mpMap.Distance( loc1, loc2 ), 1) ;
                        
      return distance.ToString() + "," + duration.ToString();
}

private MapPoint.Location GetLocationFromAddress( string address )
{
    string[] addressSplit = address.Split(new Char[] {','});
    string street      = addressSplit[0];
    string city      = addressSplit[1];
    string state      = addressSplit[2];

    MapPoint.Map mpMap = preferences.MpMap;
    MapPoint.Route mpRoute               = mpMap.ActiveRoute;
    MapPoint.FindResults mpFindResults;
    mpFindResults = mpMap.FindAddressResults( street, city, "", state, "", 244 );

    if (mpFindResults.Count >= 1)
    {
        mpRoute = mpMap.ActiveRoute;
        IEnumerator item = mpFindResults.GetEnumerator();
        item.Reset();
        item.MoveNext();

        return (MapPoint.Location)item.Current;
    }                  
    return null;
}
Avatar of ba272
ba272

ASKER

Chester, if you read this, I take that back about the discussion link you sent me.  I was simply looking inside a particular thread.  It looks like a good site. Thanks.
Hi,

Ok. Cool :). I don't have much experience with MapPoint. Anyway I'll try my best to help you out. I think you can use map point web service to find the distance. Why you are not using that?

Chester.
Avatar of ba272

ASKER

Chester,

I have been using that for months now.  But the problem will be latency of the web.  I need more immediate results, which only the ActiveX control can give me.  So I'm currently migrating to the desktop version of MapPoint.


Bob
ASKER CERTIFIED SOLUTION
Avatar of Chester_M_Ragel
Chester_M_Ragel

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial