c# - 验证 gps 坐标 lat 和 long
问题描述
我从这里获取了两个正则表达式:https ://stackoverflow.com/a/26119160/2829150 它应该正确验证纬度和经度。尽管如此,还是有问题,对于有效坐标,它给了我错误。
示例(有效)坐标直到得到,因为根据方法正则表达式它是无效的。
Lat: 53.0102721
Lon: 18.6048094
代码:
public static bool IsValidLatitude(string latitude)
{
var reg = new Regex(@"^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?[0-8]\d((\.)|\.\d{1,6})?)|(0*?90((\.)|\.0{1,6})?))$");
return reg.IsMatch(latitude);
}
public static bool IsValidLongitude(string longtitude)
{
var reg = new Regex(@"^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?\d\d((\.)|\.\d{1,6})?)|(0*?1[0-7]\d((\.)|\.\d{1,6})?)|(0*?180((\.)|\.0{1,6})?))$");
return reg.IsMatch(longtitude);
}
请注意:它不需要是正则表达式。无论分隔符的 PC 设置是什么,都可以记住检查是否使用了点 (.)。我对任何其他提议持开放态度。
解决方案
验证坐标的一种更简单的方法是将字符串解析为数值,并验证它在 -90 和 90(纬度)和 -180 和 180(经度)之间:
string latitudeString = "53.0102721";
string longitudeString = "18.6048094";
bool latitudeIsValid = decimal.TryParse(latitudeString, NumberStyles.AllowDecimalPoint|NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var latitude)
&& Math.Abs(latitude) < 90);
bool longitudeIsValid = decimal.TryParse(longitudeString, NumberStyles.AllowDecimalPoint|NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var longitude)
&& Math.Abs(longitude) < 180);
根据您使用.
小数分隔符保存为字符串的要求:首先,我建议您在存储系统中使用数字数据类型(如果可能)。如果必须存储为字符串,则可以使用原始字符串,或使用decimal.ToString
正确的文化和格式说明符:
string latitudeAsString = latitude.ToString("N7", CultureInfo.InvariantCulture);
推荐阅读
- visual-studio-code - 如何使用 VSCode 隐藏工作区中的根文件夹
- c# - 含站点变化的公交车座位计算动态算法
- ios - 如何使用 Xcode 在 ARKit 中的两点之间绘制曲线?
- html - 向右浮动将标签文本向上推
- webdriver - 无法使用 xpath 链接单击登录按钮
- python - 如何使用 sklearn 从决策树模型中提高预测的准确性?
- python-3.x - 从 pack() 切换到 grid() 方法时,Tkinter 重新调整帧大小
- google-apps-script - 遍历数组时,如何在 Google Apps Script for Google 文档中附加项目符号和子项目符号?
- winforms - 运行树莓派 3 的 Windows 10 IOT 核心上的 Winform 应用程序
- sql - Oracle SQL Developer,执行脚本不会停止运行