获取用户当前位置



一直在开发WPF应用程序,其中必须识别用户当前位置(可以在设置中配置=不匿名跟踪私人数据)。已经测试了几种解决方案。

选项1 -在不同的计算机上工作良好,也与VPN是打开的。位置是基于IP地址跟踪的,一切似乎都很好。然而,这样做的缺点是它使用外部来源,如第三方网站获取IP地址,然后读取该IP地址以获得位置。

public string GetPublicIP()
{
String direction = string.Empty;
WebRequest request = WebRequest.Create("http://website/");
using (WebResponse response = request.GetResponse())
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
direction = stream.ReadToEnd();
}
//Search for the ip in the html
// code here
return direction;
}

选项2 - c#地理定位器类。这与附加的带有地理位置坐标和位置数据的JSON文件一起工作很好。然而,在企业计算机上,由于某种原因,PositionChanged事件没有发生。不确定它是不是被堵住了。没有例外,但位置不被认为是由于事件不是解雇。在我的个人电脑上,同样的解决方案可以正常工作(相同的Windows版本- Windows 10)。Geolocator.ReportInterval = 1000;也不是每1秒强制触发一次事件。

private void RunGeoTracker()
{
if (Geolocator == null)
{
Geolocator = new Geolocator();
Geolocator.DesiredAccuracy = PositionAccuracy.High;
Geolocator.MovementThreshold = 100; // The units are meters.
Geolocator.ReportInterval = 1000;
Geolocator.PositionChanged += this.PositionChanged;
}
}
private async void PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
await Dispatcher.InvokeAsync(() =>
{
// code here
}
}

是否有任何替代方案,最好不使用任何REST API或网站。最好使用JSON或数据库获取位置数据。我听说有一些PowerShell解决方案?找不到例子。我的意思是纬度和经度是必需的。所有其他的可以已经实现。

Windows原生地理定位器API受到Windows笔记本电脑可以处于的各种状态的限制-飞行模式,在普通Windows设置中禁用位置设置,在特定应用程序设置中禁用,或者仅仅是没有数据提供程序可用于操作系统(GPS卫星,WiFi三角测量,互联网连接,OEM硬件和固件等)。因此,任何使用特定于操作系统的地理定位器API的策略都取决于您的应用程序(a)需要高精度的GPS定位,(b)涉及移动性-例如在汽车中使用打开的笔记本电脑驾驶的工作人员,或者(c)能够引导用户通过UX来帮助他们获得定位。也就是说,一定要检查您的地理定位器对象初始化是否通过微软文档中的步骤正确完成-它们很重要!

IP地理定位在VPN用户中有其局限性,但一旦你将软件发布到现实世界的个人电脑和笔记本电脑上,它的失败方式就会少得多。例如,下面的REST API不仅会自动检测设备的公共IP,还会响应大约的城市级别位置,包括粗略的纬度+经度。
https://ep.api.getfastah.com/whereis/v1/json/auto?fastah-key=<trial_key>
JSON响应可能如下所示,其中公共IP回显到您的客户端应用程序:
{
"ip": "146.75.209.1",
"isEuropeanUnion": false,
"locationData": {
"countryName": "Australia",
"countryCode": "AU",
"cityName": "Canberra",
"cityGeonamesId": 2172517,
"lat": -35.28,
"lng": 149.13,
"tz": "Australia/Sydney",
"continentCode": "OC"
}
}

诀窍是使用IP位置api,随着互联网和移动领域的快速发展而不断更新自己。

免责声明:我是上述Fastah API服务的开发人员,所以我在这里可能有点偏见:)

最新更新