wp8中的GPS定位

   介于网上很少关于windows phone 8版本的gps定位功能概述!~小弟这会给你奉献上代码!!!哈哈哈!!!直接看代码吧!!

  

public partial class MainPage : PhoneApplicationPage
    {
        Geolocator geolocator = null;
        bool tracking = false;
        // 构造函数
        public MainPage()
        {
            InitializeComponent();
            // 将 listbox 控件的数据上下文设置为示例数据
            DataContext = App.ViewModel;
            //ServerDataSource ddddd = new ServerDataSource();
            //ddddd.TestRequest();
            TrackLocation();
        }
        private void TrackLocation()
        {
            if (!tracking)
            {
                geolocator = new Geolocator();
                geolocator.DesiredAccuracy = PositionAccuracy.High;
                geolocator.MovementThreshold = 100;
                geolocator.StatusChanged += geolocator_StatusChanged;
                geolocator.PositionChanged += geolocator_PositionChanged;
                tracking = true;
                //TrackLocationButton.Content = "停止跟踪位置变化";
            }
            else
            {
                geolocator.PositionChanged -= geolocator_PositionChanged;
                geolocator.StatusChanged -= geolocator_StatusChanged;
                geolocator = null;
                tracking = false;
                //TrackLocationButton.Content = "开始跟踪位置变化";
                this.TxtGeolocator.Text = "已停止";
            }
        }
        // 位置变化事件处理
        void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
        {
            // 只有当程序在前台运行时才更新界面数据
            if (App.InBackground == false)
            {
                Dispatcher.BeginInvoke(() =>
                {
                    //String latitude = args.Position.Coordinate.Latitude.ToString("0.00000000");
                    //String longitude = args.Position.Coordinate.Longitude.ToString("0.00000000");
                    double latitude = args.Position.Coordinate.Latitude;
                    double longitude = args.Position.Coordinate.Longitude;
                    LocationUtil.GetCityNameOnMap(latitude, longitude, TxtGeolocator);
                    //BingMapsTask taskBingMap = new BingMapsTask();
                });
            }
        }
        // 状态变化事件处理
        void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
        {
            string status = "";
            switch (args.Status)
            {
                case PositionStatus.Disabled:
                    status = "位置服务已被禁止";
                    break;
                case PositionStatus.Initializing:
                    status = "正在初始化";
                    break;
                case PositionStatus.NoData:
                    status = "没有数据";
                    break;
                case PositionStatus.Ready:
                    status = "准备中";
                    break;
                case PositionStatus.NotAvailable:
                    status = "不可用";
                    break;
                case PositionStatus.NotInitialized:
                    status = "未进行初始化";
                    break;
            }
            Dispatcher.BeginInvoke(() =>
            {
                TxtGeolocator.Text = status;
            });
        }
}
 以下是LocationUtil类,借助我大诺基亚api实现传入经纬度获取城市信息!!见代码:

public class LocationUtil
    {
        private static TextBlock TxtGeolocator = null;
        /// <summary>
        /// URL接口来自诺基亚地图
        /// </summary>
        /// <param name="slatitude"></param>
        /// <param name="slongitude"></param>
        /// <returns>xml格式</returns>
        public static void GetCityNameOnMap(double slatitude, double slongitude, TextBlock txtCity)
        {
            TxtGeolocator = txtCity;
            String cityname = String.Empty;
            string urlString = "http://loc.desktop.maps.svc.ovi.com/geocoder/rgc/1.0?" + "lat=" + slatitude + "&long=" + slongitude + "&output=xml";
            httpGet(urlString);
        }
        public static void httpGet(String url)
        {
            try
            {
                //请求地址
                //String url = "http://www.cnblogs.com/huizhang212/";
                //创建WebRequest类
                HttpWebRequest request = HttpWebRequest.CreateHttp(new Uri(url));
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8";
                //设置请求方式GET POST
                request.Method = "GET";

                //返回应答请求异步操作的状态
                request.BeginGetResponse(responseCallback, request);
            }
            catch (WebException e)
            {
                //网络相关异常处理
            }
            catch (Exception e)
            {
                //异常处理
            }
        }
        private static void responseCallback(IAsyncResult result)
        {
            try
            {
                //获取异步操作返回的的信息
                HttpWebRequest request = (HttpWebRequest)result.AsyncState;
                //结束对 Internet 资源的异步请求
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
                //解析应答头
                //parseRecvHeader(response.Headers);
                //获取请求体信息长度
                long contentLength = response.ContentLength;

                //获取应答码
                int statusCode = (int)response.StatusCode;
                string statusText = response.StatusDescription;

                //应答头信息验证
                using (Stream stream = response.GetResponseStream())
                {
                    //获取请求信息
                    StreamReader read = new StreamReader(stream);
                    string msg = read.ReadToEnd();
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        TxtGeolocator.Text = GetCityNameFromXml(msg);
                    });
                }

            }
            catch (WebException e)
            {
                //连接失败

            }
            catch (Exception e)
            {
                //异常处理

            }

        }
        private static String GetCityNameFromXml(String response)
        {
            String cityName = String.Empty;
            try
            {

                var doc = XDocument.Parse(response);
                XNamespace np = doc.Root.Name.Namespace;
                //IEnumerable<XElement> address = root.ElementsAfterSelf("places");

                var cityroot = (from p in doc.Descendants(np + "places")
                                from q in p.Descendants(np + "place")
                                from a in q.Descendants(np + "address")
                                from c in a.Descendants(np + "city")
                                select c).FirstOrDefault();
                //XElement elecity = cityroot.FirstOrDefault();
                if (cityroot == null)
                {
                    return "广州";
                }
                else
                {
                    if (cityroot != null)
                        cityName = cityroot.Value;
                    IsolatedStorageSettingHelper.AddIsolateStorageObj("GeolocatorCity", cityName);
                    return cityName;
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("解析错误: {0}", e.Message);
                return "广州";
            }
        }
        /// <summary>
        /// URL接口来自诺基亚地图
        /// </summary>
        /// <param name="slatitude"></param>
        /// <param name="slongitude"></param>
        /// <returns>json格式</returns>
        public static Uri Get_CityNameOnMap(double slatitude, double slongitude)
        {
            string urlString = "http://loc.desktop.maps.svc.ovi.com/geocoder/rgc/1.0?" + "lat=" + slatitude + "&long=" + slongitude + "&output=json";
            return new Uri(urlString, UriKind.RelativeOrAbsolute);
        }
    }

 这里有一点要说明一下,那就是诺基亚地图返回来的xml格式比较奇怪哈!!!
     var doc = XDocument.Parse(response);
                XNamespace np = doc.Root.Name.Namespace;
xmlns =" nokia:geocoder:gc:1.0 "   这货对xml解释造成一定的阻碍!!!不过以上的代码已经解决了!!!希望对你有帮助!!(*^__^*)

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值