【问题标题】:How to draw & save a map pushpin from current location to a map? Windows phone如何从当前位置绘制和保存地图图钉到地图?视窗手机
【发布时间】:2014-03-10 21:18:22
【问题描述】:

我已经开始在 Windows 手机应用程序中使用地图,并且已经知道如何获取当前坐标,但我不知道如何将其绘制为地图上的图钉。

这是我目前所拥有的,它调用 GetCoordinates 方法并通过单击按钮导航到地图。有谁知道我如何将坐标传递给地图并将其绘制为图钉?

private async Task GetCoordinates(string name = "My Car")
        {
            await Task.Run(async () =>
            {
                // Get the phone's current location.
                Geolocator MyGeolocator = new Geolocator();
                MyGeolocator.DesiredAccuracyInMeters = 5;
                Geoposition MyGeoPosition = null;
                try
                {
                    MyGeoPosition = await MyGeolocator.GetGeopositionAsync(TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(10));

                }
                catch (UnauthorizedAccessException)
                {
                    MessageBox.Show("Location is disabled in phone settings or capabilities are not checked.");
                }
                catch (Exception ex)
                {
                    // Something else happened while acquiring the location.
                    MessageBox.Show(ex.Message);
                }
            });
        }


        //sets location of parking space using the GetCoordinates method
        //opens map 
        private async void setLocationBtn_Click(object sender, RoutedEventArgs e)
        { 
            await this.GetCoordinates();
            NavigationService.Navigate(new Uri("/Maps.xaml", UriKind.Relative));
        }

这是尚未做任何事情的地图类,有没有办法可以将上一个类的地理坐标传递给地图并绘制图钉?我正在考虑以某种方式在 OnNavigatedTo 方法中执行此操作:

公共部分类地图:PhoneApplicationPage { 地理定位器 geolocator = null; 布尔跟踪 = 假; 进度指标 pi; MapLayer PushpinMapLayer;

    public Maps()
    {
        InitializeComponent();
        pi = new ProgressIndicator();
        pi.IsIndeterminate = true;
        pi.IsVisible = false;
    }


    protected override void OnNavigatedTo(NavigationEventArgs e)
    {

        base.OnNavigatedTo(e);
    }

}

【问题讨论】:

    标签: c# windows-phone-8 geocode here-api pushpin


    【解决方案1】:

    向地图添加图钉:

            var overlay = new MapOverlay
            {
                PositionOrigin = new Point(0.5, 0.5),
                GeoCoordinate = location, // takes a GeoCoordinate instance. convert Geoposition to GeoCoordinate
                Content = new TextBlock{Text = "hello"}; // you can use any UIElement as a pin
            };
    
            var ml = new MapLayer { overlay }; 
            map.Layers.Add(ml);
    

    您可以在传递给NavigationSerivce.Navigate 的URI 中将您的位置的纬度和经度作为查询附加,然后在OnNavigatedTo 事件处理程序中使用e.Uri.Query 提取它。

    小费。 Task.Run 安排您的任务在线程池上运行。您的任务不受 CPU 限制,因此 Task.Run 不会给您带来任何性能提升。

    编辑: 用这个将地理坐标转换为地理坐标:

    var location = new GeoCoordinate(geoposition.Coordinate.Latitude, geoposition.Coordinate.Longitude); 
    

    一个非常有用的资源是Nokia WP8 Guide

    【讨论】:

    • 这很有帮助,但是如何将 myGeoPosition 数据从我的其他类传递到地图类? `GeoCoordinate = location, ` location 行也可以替换为 myGeoPosition ?
    • @BrianJ 首先,您需要从 GetCoordinates() 方法中返回它。是的,您可以将myGeoPosition 转换为地理坐标。请参阅我的编辑。在此处阅读有关如何将参数传递到新页面的信息:stackoverflow.com/questions/12444816/…
    • 我稍后再试试,谢谢你的帮助,如果成功了我会告诉你的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2018-05-24
    • 2013-06-25
    相关资源
    最近更新 更多