2016-11-06 5 views
2

Я хочу повернуть многоугольник (например, эту стрелку), заменив значения жестко закодированных смещений функцией, в которой может пройти смещение указателя nord и количество градусов, в которое я хочу, чтобы стрелка вращалась.Как повернуть многоугольник на карте с координатами long/lat?

Я пробовал использовать Rotation matrix, но это не сработало.
Возможно, из-за того, что расстояние 1 Lat. ! = 1 Длинные.

Что я пытаюсь сделать с этим:
Стрелка должна представлять транспортное средство и поворачиваться в направлении, по которому движется автомобиль.

double centerLatitude = pos.Coordinate.Point.Position.Latitude; 
double centerLongitude = pos.Coordinate.Point.Position.Longitude; 

MapPolygon mapPolygon = new MapPolygon(); 
mapPolygon.Path = new Geopath(new List<BasicGeoposition>() { 
    new BasicGeoposition() {Longitude=centerLongitude, Latitude=centerLatitude},//top of the arrow 
    new BasicGeoposition() {Longitude=centerLongitude-0.001, Latitude=centerLatitude-0.0010}, 
    new BasicGeoposition() {Longitude=centerLongitude-0.001, Latitude=centerLatitude-0.0030}, 
    new BasicGeoposition() {Longitude=centerLongitude+0.001, Latitude=centerLatitude-0.0030}, 
    new BasicGeoposition() {Longitude=centerLongitude+0.001, Latitude=centerLatitude-0.0010},    
}); 
mapPolygon.ZIndex = 1; 
mapPolygon.FillColor = Colors.Orange; 
mapPolygon.StrokeColor = Colors.Blue; 
mapPolygon.StrokeThickness = 2; 
mapPolygon.StrokeDashed = false; 
MainMap.MapElements.Add(mapPolygon); 

enter image description here

+0

Неточный ответ, но, может быть, он помогает: вы можете увидеть свою проблему как вариацию проблемы, как нарисовать стрелку на конце линии. Lat/Lon будет X/Y, а ваш многоугольник будет стрелкой. Там хорошо [сообщение об этом на math.stackexchange] (http://math.stackexchange.com/questions/1314006/drawing-an-arrow) Возможно, вы сможете адаптировать идеи к своему конкретному случаю. – MBulli

+0

Считаете ли вы использование xaml-управления вместо mapPolygon? Например. управление изображением со стрелкой показало, что это будет намного проще. –

+0

Я пробовал использовать значок карты, но не хочу вращаться с картой. – MatMis

ответ

2

MapPolygons связаны с координатами на карте. Преобразования вращения в UWP не будут применяться к MapPolygons. Если вы хотите повернуть MapPolygon, вам нужно вычислить повернутые координаты. Функция Bing Maps V8 (web) обеспечивает функцию для этого. Вот два способа делает это:

Пространственно точной (не может выглядеть так же, благодаря картографической проекции)

  • Вычислить центр многоугольника и использовать его в качестве точки привязки для поворота многоугольника вокруг. Если хотите, вы можете использовать любую другую часть полигона.
  • Прокрутите каждое местоположение в MapPolygon и вычислите его заголовок и расстояние от точки привязки. https://rbrundritt.wordpress.com/2008/10/14/calculating-bearing/ https://megocode3.wordpress.com/2008/02/05/haversine-formula-in-c/
  • Для каждого местоположения добавьте угол, который вы хотите повернуть в заголовок, и вычислите новое место назначения. https://rbrundritt.wordpress.com/2008/10/14/calculate-destination-coordinate/
  • Передайте вновь рассчитанные местоположения в MapPolygon.

Pixel Accurate (будет выглядеть так же, как вы поворачиваете его, но не будет пространственно точным)

  • Вычислить центр многоугольника и использовать его в качестве точки привязки для вращения вокруг полигона , Если хотите, вы можете использовать любую другую часть полигона. Преобразование это глобальный пикселе координат на уровне масштабирования 19: https://msdn.microsoft.com/en-us/library/bb259689.aspx (LatLongToPixelXY)
  • Цикл по каждой точке в MapPolygon и вычислить его глобальный пиксель координат на уровне масштабирования 19.
  • Вычислить повернутый пиксель координаты: http://homepages.inf.ed.ac.uk/rbf/HIPR2/rotate.htm
  • Преобразуйте пиксельные координаты обратно в пространственные местоположения на уровне масштабирования 19 (PixelXyToLatLong)
  • Передайте вновь вычисленные местоположения в MapPolygon.
0

Лучшим подходом к тому, что вы пытаетесь, будет использование элемента XAML и добавление его в качестве дочернего элемента в элемент управления картой. Вы можете привязать XAML к карте в одну точку (либо к стрелке, либо по центру). Пытаясь обновить полигон, каждый кадр будет не очень быстрым или гладким, поэтому вы действительно не хотите использовать многоугольник карты. Некоторые из предложенных выше ссылок предполагают, что карта всегда находится в проекции Меркатора и на север вверх, а не наклонена, что не всегда будет верно для карты UWP, поэтому я бы не рекомендовал идти с этим подходом.

+0

У вас есть (ссылка) пример, пожалуйста? – MatMis

+0

См. Пример с надписью «Добавить XAML» на этой странице –

+0

https://msdn.microsoft.com/en-us/windows/uwp/maps-and-location/display-poi –

 Смежные вопросы

  • Нет связанных вопросов^_^