C# GeoLocation Watcher 获取坐标的时间太长

Posted

技术标签:

【中文标题】C# GeoLocation Watcher 获取坐标的时间太长【英文标题】:C# GeoLocation Watcher taking too long to get coordinates 【发布时间】:2020-03-09 08:36:53 【问题描述】:

我为我们的作品 Windows 平板电脑(Windows 10)创建了一个 Windows 窗体应用程序来跟踪位置。

我创建的类如下:

class LocationServices

    private GeoCoordinateWatcher myWatcher;
    private bool fgWatcherStarted = false;

    public LocationServices()
    

        myWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
        fgWatcherStarted = myWatcher.TryStart(true, System.TimeSpan.FromMilliseconds(1000));
    

    public LatLon GetDeviceLocation()
    
        LatLon myReturn = new LatLon();
        System.Device.Location.GeoCoordinate myPosition = new System.Device.Location.GeoCoordinate();

        try
        
            if (!fgWatcherStarted)
            
                fgWatcherStarted = myWatcher.TryStart(true, System.TimeSpan.FromMilliseconds(1000));
            

            myPosition = myWatcher.Position.Location;

            if (myPosition.IsUnknown)
            
                myReturn.Latitude = 0;
                myReturn.Longitude = 0;
                myReturn.strMessage = "Unknown Position";
            
            else
            
                myReturn.Latitude = myPosition.Latitude;
                myReturn.Longitude = myPosition.Longitude;
                myReturn.strMessage = myPosition.Course.ToString();
            

        
        catch (Exception ex)
        
            myReturn.Latitude = 0;
            myReturn.Longitude = 0;
            myReturn.strMessage = ex.Message.ToString();
        

        return myReturn;
    

在我的代码中,我每隔几秒钟就会运行一次,并通过调用上面的类来获取位置。

如果我连接到 wifi(从我的办公桌上运行),它会立即获取位置并按预期工作,但从设备上它会在很长一段时间内返回 0,然后突然开始工作并且工作正常,没有任何问题.

我有什么办法可以让这个开始更快吗?我最初认为它可能是位置/信号,但我尝试在同一个地方加载并离开它,一旦它初始化它就可以完美地工作,但它是需要很长时间才能加载的初始坐标。

【问题讨论】:

您可能开启了代理但没有代理。因此,在获得结果之前,您可能要等待长达 30 秒的代理超时。 【参考方案1】:

看起来好像需要更改位置才能返回值,请在此处查看答案:https://***.com/a/52910209/6639187

【讨论】:

【参考方案2】:

不太确定您获取坐标的方式,我曾经使用以下方法 - 希望这会有所帮助(在控制台应用程序中运行并检查如下)

class Program
    
        private static GeoCoordinateWatcher Watcher;

        static void Main(string[] args)
        
            Watcher = new GeoCoordinateWatcher();
            Watcher.StatusChanged += Watcher_StatusChanged;
            Watcher.Start();

            Console.ReadLine();

        

        static void Watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
        
            if (e.Status == GeoPositionStatus.Ready)
            
                if (Watcher.Position.Location.IsUnknown)
                
                    Console.Write("Cannot find location");
                
                else
                
                    Console.WriteLine("Lat: " + Watcher.Position.Location.Latitude.ToString());
                    Console.WriteLine("Lon: " + Watcher.Position.Location.Longitude.ToString());
                
            
        

    

【讨论】:

以上是关于C# GeoLocation Watcher 获取坐标的时间太长的主要内容,如果未能解决你的问题,请参考以下文章

使用C#调用google GeoLocation并返回JSON

如何在 C# 中获取用户的国家/地区名称?

Zookeeper如何正确设置和获取watcher

c# Windows Phone 8.1 如何获取地理坐标对象

如何在.net core 2 c#中获取地理位置

使用 navigator.geolocation 获取地理位置