#windows-phone-7 #windows-phone-7.1 #bing-maps
#windows-phone-7 #windows-phone-7.1 #bing-карты
Вопрос:
в моем приложении для WP7 (mango) Мне нужно переместить пользователя из одной точки в другую. Я знаю, что есть элемент управления Map, который позволяет вам рисовать на нем персонал, но как вы попросите его нарисовать путь для вас? (на основе указанного пункта назначения и текущего местоположения пользователя — но это постоянно меняется, так как вы обновляете маршрут, если он уходит с пути?)
Комментарии:
1. По сути, вы задаете 3 вопроса в одном. В следующий раз задавайте один подробный вопрос, чтобы получить более краткий ответ.
Ответ №1:
Чтобы обновить карту с текущим местоположением пользователя, используйте GeoCoordinateWatcher
и обновляйте положение кнопки привязки к базе данных по мере его изменения. Не забудьте установить минимальное расстояние до чего-то низкого, например, 5 метров.
С помощью этого шаблона XAML можно создать кнопку, подобную кнопке в bing maps:
<maps:Pushpin Background="{StaticResource PushpinLocationBrush}"
Location="{Binding MyLocation}">
<maps:Pushpin.Template>
<ControlTemplate>
<Grid>
<Rectangle Width="15"
Height="15"
Margin="0"
Fill="Black">
<Rectangle.Projection>
<PlaneProjection CenterOfRotationX="0"
LocalOffsetX="-2"
LocalOffsetY="5"
RotationZ="45" />
</Rectangle.Projection>
</Rectangle>
<Ellipse Width="7"
Height="7"
Margin="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="Orange"
RenderTransformOrigin="0.339,0.232"
StrokeThickness="0" />
</Grid>
</ControlTemplate>
</maps:Pushpin.Template>
</maps:Pushpin>
Получение геокоординаты адреса можно выполнить с помощью Bing Maps. Вы можете прочитать больше о службах Bing здесь: http://msdn.microsoft.com/en-us/library/cc980922.aspx — то, что вам нужно, — это служба геокодирования
Нарисовать путь довольно сложно, особенно если вы хотите, чтобы он проходил по дорогам. Для этого вам понадобится служба маршрутов Bing Maps.
Добавьте службу в Visual Studio с RouteServiceReference
именем as, а затем вы можете использовать следующий код, чтобы получить фрагменты пути и добавить их на свою карту. Приведенный ниже XAML отражает элементы управления, к которым я добавляю фрагменты:
List<GeoCoordinate> locations = new List<GeoCoordinate>();
RouteServiceClient routeService = new RouteServiceClient("BasicHttpBinding_IRouteService");
routeService.CalculateRouteCompleted = (sender, e) =>
{
var points = e.Result.Result.RoutePath.Points;
var coordinates = points.Select(x => new GeoCoordinate(x.Latitude, x.Longitude));
var routeColor = Colors.Blue;
var routeBrush = new SolidColorBrush(routeColor);
var routeLine = new MapPolyline()
{
Locations = new LocationCollection(),
Stroke = routeBrush,
Opacity = 0.65,
StrokeThickness = 5.0,
};
foreach (var location in points)
{
routeLine.Locations.Add(new GeoCoordinate(location.Latitude, location.Longitude));
}
RouteLayer.Children.Add(routeLine);
};
RouteBingMap.SetView(LocationRect.CreateLocationRect(locations));
routeService.CalculateRouteAsync(new RouteRequest()
{
Credentials = new Credentials()
{
ApplicationId = "YOURBINGMAPSKEYHERE"
},
Options = new RouteOptions()
{
RoutePathType = RoutePathType.Points
},
Waypoints = new ObservableCollection<Waypoint>(
locations.Select(x => new Waypoint()
{
Location = x.Location
}))
});
Связанный XAML:
<maps:Map x:Name="RouteBingMap"
AnimationLevel="None"
CopyrightVisibility="Collapsed"
CredentialsProvider="YOURBINGMAPSKEYHERE"
LogoVisibility="Collapsed"
ZoomBarVisibility="Collapsed"
ZoomLevel="12">
<maps:MapLayer x:Name="RouteLayer" />
</maps:Map>