В настоящий момент я просто играю с бинговыми картами. Я следил за учебниками, чтобы создавать маршруты, добавлять mapicons и т.д., Однако я обнаружил, что mapIcon не будет показывать, будет ли он на маршруте. Я попытался сыграть с свойством Z-Index mapIcon, однако это, казалось, малоэффективно, так как я думаю, что это только влияет на другие MapElements.
Кто-нибудь еще знает, как это осуществить?
Мой текущий код для создания маршрута и попытки установить MapIcon в пункте назначения (для abit of Content MapFunctions - это просто статический класс, который я сделал для таких функций, как поиск маршрута, получение текущего местоположения и т.д.):
private async void DrawRoute()
{
// Check if a destination has been set
if(MapFunctions.destination != null)
{
route = await MapFunctions.GetRouteAsync(MapFunctions.destination.Point);
if (route != null)
{
// Use the route to initialize a MapRouteView.
MapRouteView viewOfRoute = new MapRouteView(route.Route);
viewOfRoute.RouteColor = Colors.Yellow;
viewOfRoute.OutlineColor = Colors.Black;
// Add the new MapRouteView to the Routes collection
// of the MapControl.
MyMap.Routes.Add(viewOfRoute);
// Fit the MapControl to the route.
await MyMap.TrySetViewBoundsAsync(
route.Route.BoundingBox,
null,
Windows.UI.Xaml.Controls.Maps.MapAnimationKind.None);
AddDestinationMapElement(MapFunctions.destination.Point);
// Start timer to update the remaining time of the journey
UpdateRemainingTime_Tick(this, new Object());
dispatcherTimer.Start();
}
else
{
MessageDialog message = new MessageDialog("An error occured while trying to calculate your route. Please try again later.", "Error");
await message.ShowAsync();
}
}
}
private void AddDestinationMapElement(Geopoint dest)
{
MapIcon MapIcon1 = new MapIcon();
MapIcon1.Location = new Geopoint(new BasicGeoposition()
{
Latitude = dest.Position.Latitude,
Longitude = dest.Position.Longitude
});
MapIcon1.Visible = true;
MapIcon1.ZIndex = int.MaxValue;
MapIcon1.Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Images/mapIcon.png"));
MapIcon1.NormalizedAnchorPoint = new Point(0.5, 1.0);
MapIcon1.Title = "Destination";
MyMap.MapElements.Add(MapIcon1);
}
Если вы хотите добавить pushpin поверх своих элементов, вы можете использовать MapOverlay, который позволит вам добавить в свой элемент управления карту Pushpin (с изображением или любым элементом XAML):
MapOverlay pushpinStart = new MapOverlay();
pushpinStart.PositionOrigin = new Point(0.5, 0.5);
pushpinStart.Content = new Image()
{
Source =
new BitmapImage(
new Uri("../Assets/Ui/ui-pin-start.png", UriKind.Relative))
};
pushpinStart.GeoCoordinate = posCollection[0];
Если вы хотите остаться с MapIcon, то движок рендеринга вычислит, что лучше всего отображать на основе уровня масштабирования и текущего местоположения, а также результата поиска коллизий других элементов. Поэтому я не уверен, что вы ищете.
И для WP8.1 здесь приведен эквивалентный код:
Image iconStart = new Image();
iconStart.Source = new BitmapImage(new Uri("ms-appx:///Assets/Ui/ui-pin-start.png"));
this.Map.Children.Add(iconStart);
MapControl.SetLocation(iconStart, new Geopoint(pos[0]));
MapControl.SetNormalizedAnchorPoint(iconStart, new Point(0.5, 0.5));