获取到的纬度和经度被传递到下面的方法中以获取地图:
| public static double GetMapForRoute(out Bitmap[] RouteMaps, out ViewByHeightWidth[] Views, LatLong[] LatitudeLongitude, string DataSourceName, Point MapDimension) { RouteServiceSoap routeService = new RouteServiceSoap(); routeService.Credentials = new System.Net.NetworkCredential(_mapPointUserName,_mapPointPassword); routeService.PreAuthenticate = true; UserInfoRouteHeader routeUserInfo = new UserInfoRouteHeader(); routeUserInfo.DefaultDistanceUnit = DistanceUnit.Kilometer; routeService.UserInfoRouteHeaderValue = routeUserInfo; MapOptions mapOptions = new MapOptions(); mapOptions.Format = new ImageFormat(); mapOptions.Format.Width = MapDimension.X; mapOptions.Format.Height = MapDimension.Y; Route route; route = routeService.CalculateSimpleRoute(LatitudeLongitude, DataSourceName, SegmentPreference.Quickest); int MapDirectionLength = route.Itinerary.Segments[0].Directions.Length + 1; Views = new ViewByHeightWidth[MapDirectionLength]; RouteMaps = new Bitmap[MapDirectionLength]; Pushpin[] pushpins = new Pushpin[MapDirectionLength]; for (int idx = 0; idx <= MapDirectionLength-1; idx++) { pushpins[idx] = new Pushpin(); pushpins[idx].IconDataSource = "MapPoint.Icons"; if(idx != MapDirectionLength-1) { Views[idx] = route.Itinerary.Segments[0].Directions[idx].View.ByHeightWidth; pushpins[idx].IconName = "0"; pushpins[idx].LatLong = route.Itinerary.Segments[0].Directions[idx].LatLong; } else { Views[idx] = route.Itinerary.Segments[1].Directions[0].View.ByHeightWidth; pushpins[idx].IconName = "1"; pushpins[idx].LatLong = route.Itinerary.Segments[1].Directions[0].LatLong; } pushpins[idx].ReturnsHotArea = true; } MapSpecification MapSpec = new MapSpecification(); MapSpec.DataSourceName = DataSourceName; MapSpec.Options = mapOptions; MapSpec.Views = Views; MapSpec.Pushpins = pushpins; MapSpec.Route = route; MapImage[] MapImages; RenderServiceSoap renderService = new RenderServiceSoap(); renderService.Credentials = new System.Net.NetworkCredential(_mapPointUserName,_mapPointPassword); renderService.PreAuthenticate = true; MapImages = renderService.GetMap(MapSpec); for (int idx = 0; idx < MapDirectionLength; idx++) { RouteMaps[idx] = new Bitmap(new System.IO.MemoryStream(MapImages[idx].MimeData.Bits)); } return route.Itinerary.Segments[0].Distance; } |
我们使用"RouteServiceSoap"Web服务来生成RouteMap。在认证之后,就设置好了头部值信息DistanceUnit。该Web服务提供了一个"CalculateSimpleRoute"方法,它会根据相应的纬度和经度数组计算出路线。
它会返回一个route对象。同时还为路线建立了"图钉"。它再次调用RenderServiceSoap Web服务,但是这次的输出内容是不同的。我们将得到一个地图序列,从地图的开始到末尾。
下面是显示了路线的地图截屏。
![]() ![]() |
它是在位图数组上收集并适当地显示在PictureBox上的。"route.Itinerary.Segments[0].Distance;"返回两个地址之间的距离。这个距离可以以英里或公里为单位。其设定在RouteServiceSoap的Web服务的头部值中。
下面是一个显示了两个地址之间距离的截屏。
![]() |


