Nano Hash - криптовалюты, майнинг, программирование

Как создать перетаскиваемую булавку в Windows 10, чтобы обеспечить возможность выбора местоположения?

Я работаю над MapControl в Windows 10 и хочу разрешить пользователю перетаскивать булавку, и когда пользователь опускает булавку, он хочет получить широту и долготу этой позиции и получить адрес местоположения с помощью API. Я добавил значок карты, используя следующие код

MapControl map = frameworkElement as MapControl;
map.MapServiceToken= "my service token";
BasicGeoposition councilPosition = new BasicGeoposition()
{
     Latitude = Convert.ToDouble(Info.GetType().GetRuntimeProperty("LATITUDE").GetValue(councilInfo, null)),
     Longitude = Convert.ToDouble(Info.GetType().GetRuntimeProperty("LONGITUDE").GetValue(councilInfo, null))
};

Geopoint pinPoint = new Geopoint(councilPosition);

MapIcon locationPin = new MapIcon();
locationPin.Image= RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Images/pushpin.png"));
locationPin.Title = councilInfo.COUNCIL_NAME;
locationPin.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
locationPin.Location = councilPoint;
locationPin.NormalizedAnchorPoint = new Point(0.5, 1.0);
locationPin.ZIndex = 0;

map.MapElements.Add(locationPin);
await map.TrySetViewAsync(locationPin.Location, 15D, 0, 0, MapAnimationKind.Bow);

Может ли кто-нибудь предложить, какие события необходимо использовать для достижения функциональности выбора местоположения?


  • Позвольте мне дать идею. Перейдите по этой ссылке msdn.microsoft.com/en-us/library /windows/apps/mt219696.aspx. Они указали точки отображения с помощью XAML. Вместо границы вы можете иметь сетку с фоновым изображением кнопки, слушать события манипуляции для этой сетки. Помогает ли это вашему требованию? 28.04.2016
  • это невозможно с MapIcon? Я хочу разрешить пользователю перетаскивать MapIcon и отбрасывать его в другое место, а когда пользователь отбрасывает его, получайте местоположение, используя широту и широту. 28.04.2016
  • Думаю, нет. Потому что у mapicon нет регистрации событий перетаскивания или манипуляций. Но я не работал над этим 28.04.2016
  • хорошо, на самом деле я также не работал над событиями манипулирования в прошлом, поэтому не уверен, как использовать их для перетаскивания. Можете ли вы добавить ответ с образцом? Если это будет соответствовать моему требованию, ответ будет отмечен как «да» и вознаграждение. 28.04.2016

Ответы:


1

Перейдите по этой ссылке. Они указали точки отображения с помощью XAML. Вместо границы вы можете иметь сетку с фоновым изображением канцелярской кнопки, слушать события манипуляции для этой сетки.

вот код для достижения того, что я сказал выше.

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            BasicGeoposition snPosition = new BasicGeoposition() { Latitude = 47.7356039173901, Longitude = -122.310697222129

            };
            Geopoint snPoint = new Geopoint(snPosition);

            // Create a XAML border.
            Grid grid = new Grid
            {
                Width=100,
                Height=100,
                Background = new ImageBrush() {ImageSource= new BitmapImage(new Uri("ms-appx:///Assets/icon.png", UriKind.RelativeOrAbsolute)), Stretch = Stretch.UniformToFill}
            };
              grid.ManipulationMode = ManipulationModes.TranslateX|ManipulationModes.TranslateY;
 grid.ManipulationCompleted += Grid_ManipulationCompleted;
            grid.ManipulationDelta +=Grid_ManipulationDelta;
            // Center the map over the POI.
            MapControl1.Center = snPoint;
            MapControl1.ZoomLevel = 14;
            CompositeTransform tran = new CompositeTransform();
            grid.RenderTransform = tran;
            // Add XAML to the map.
            MapControl1.Children.Add(grid);
            MapControl.SetLocation(grid, snPoint);
            MapControl.SetNormalizedAnchorPoint(grid, new Point(0.5, 0.5));
        }  

        private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {
            Grid grid = sender as Grid;
            CompositeTransform xform = grid.RenderTransform as CompositeTransform;


            xform.TranslateX += e.Delta.Translation.X;
            xform.TranslateY += e.Delta.Translation.Y;
         //   Rect point = grid.TransformToVisual(MapControl1).TransformBounds(new Rect(0,0, grid.Width, grid.Height));

            e.Handled = true;
          //  Geopoint gPoint;
           // MapControl1.GetLocationFromOffset(new Point(point.X, point.Y), out gPoint);
           // Debug.WriteLine(gPoint.Position.Latitude);
           // Debug.WriteLine(gPoint.Position.Longitude);
        }

  private void Grid_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
        {
            Grid grid = sender as Grid;
            Rect point = grid.TransformToVisual(MapControl1).TransformBounds(new Rect(0, 0, grid.Width, grid.Height);
            Geopoint gPoint;
            MapControl1.GetLocationFromOffset(new Point(point.X, point.Y), out gPoint);
            Debug.WriteLine(gPoint.Position.Latitude);
            Debug.WriteLine(gPoint.Position.Longitude);
        }

Местоположение, полученное после перетаскивания, не совсем точное. Вы можете провести небольшие исследования и разработки о том, как получить точную точку относительно MapControl

28.04.2016
  • Спасибо попробую. 28.04.2016
  • В порядке. Дайте мне знать, если есть какие-либо проблемы 28.04.2016
  • Мероприятие называлось много раз. Он отображает множество мест. Это правильно? 28.04.2016
  • Да. Что вы хотите, так это получить местоположение, когда перетаскивание завершено, верно? я обновлю ответ 28.04.2016
  • да, и этот значок является изображением, будет ли он также указывать на идеальные координаты внутри сетки? Если я добавлю изображение в качестве дочернего элемента Grid, будет ли оно работать? 28.04.2016
  • Я обновил ответ. Я не получаю последний запрос. Этот образ не соответствует действительности. Я просто использовал как заполнитель. Вы должны дать правильное изображение без пробелов с каждой стороны. 28.04.2016
  • почему вы хотите добавить изображение как дочернее? я думаю, оба имеют тот же эффект 28.04.2016
  • да, он запустится, когда манипуляция будет завершена. Вы должны найти правильное смещение (правильная точка относительно MapControl). Я попробовал метод TransformToVisual(). Я думаю, что это дает очки в верхнем левом углу. Вы должны найти точку, где находится кончик значка. надеюсь, что это имеет смысл. Если вы найдете эту точку, вы можете использовать TransformPoint(point) вместо метода TransformBounds() 28.04.2016
  • Потому что он не указывает на правильные координаты. Кроме того, я попробовал ваш обновленный код, но все равно события вызываются много раз. Если мы прокомментируем grid.ManipulationDelta +=Grid_ManipulationDelta, то это сработает? 28.04.2016
  • Да Grid_ManipulationDelta будет вызываться много раз. Я использую для перемещения сетки, как видите, я добавляю TranslateX и TranslateY. Я сказал, что используйте событие ManipulationCompleted, чтобы показать обновленное местоположение. Удалите его из Grid_ManipulationDelta 28.04.2016
  • Давайте продолжим обсуждение в чате. 28.04.2016
  • нет. я не удаляю. Отправил скрины в обсуждение 28.04.2016

  • 2

    Я не смог получить принятый ответ на работу. После долгих исследований и помощи из этот ответ я наконец заработало. Вот рабочий образец:

        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                InitializeComponent();
    
                var position = new Geopoint(new BasicGeoposition
                {
                    Latitude = 30.3618,
                    Longitude = -91.1067
                });
                var grid = new Grid
                {
                    Width = 32,
                    Height = 50
                };
                var pushpin = new Image()
                {
                    Source = new BitmapImage(new Uri("ms-appx:///Assets/Pushpin.png")),
                    Stretch = Stretch.Uniform,
                    ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY,
                    RenderTransform = new TranslateTransform()
                };
                pushpin.ManipulationStarted += Pushpin_ManipulationStarted;
                pushpin.ManipulationDelta += Pushpin_ManipulationDelta;
                pushpin.ManipulationCompleted += Pushpin_ManipulationCompleted;
                grid.Children.Add(pushpin);
    
                Map.Center = position;
                Map.Children.Add(grid);
                MapControl.SetLocation(grid, position);
                MapControl.SetNormalizedAnchorPoint(grid, new Point(0.5, 1));
            }
    
            private Geopoint GetPosition(Image pushpin)
            {
                var grid = pushpin.Parent as Grid;
                var anchor = MapControl.GetNormalizedAnchorPoint(grid);
                var offset = pushpin.TransformToVisual(Map).TransformPoint(new Point(grid.Width * anchor.X, grid.Height * anchor.Y));
                Map.GetLocationFromOffset(offset, out Geopoint position);
                return position;
            }
    
            private void Pushpin_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
            {
                Map.PanInteractionMode = MapPanInteractionMode.Auto;
    
                var pushpin = sender as Image;
                var grid = pushpin.Parent as Grid;
                var position = GetPosition(pushpin);
                MapControl.SetLocation(grid, position);
                var transform = pushpin.RenderTransform as TranslateTransform;
                transform.X = 0;
                transform.Y = 0;
            }
    
            private void Pushpin_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
            {
                var pushpin = sender as Image;
                var transform = pushpin.RenderTransform as TranslateTransform;
                transform.X += e.Delta.Translation.X;
                transform.Y += e.Delta.Translation.Y;
            }
    
            private void Pushpin_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
            {
                Map.PanInteractionMode = MapPanInteractionMode.Disabled;
            }
        }
    
    24.04.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..