验证纬度和经度

39

我想验证纬度和经度。现在,我只检查该值是否不为空,但我希望进行验证以确保它是有效的纬度或经度。

我该如何做呢?

我的属性看起来像这样:

public string Lat
{
    get {
        return this._lat; 
    }
    set 
    {
        base.ValidationErrors.Remove("Lat");

        if (String.IsNullOrWhiteSpace(value))
        {
            this.ValidationErrors.Add("Lat", strings.Positions_Lat_Empty);
        }

        this._lat = value != null ? value.Trim() : null;
    }
}

public string Lng
{
    get { 
        return this._lng; 
    }
    set {

        base.ValidationErrors.Remove("Lng");

        if (String.IsNullOrWhiteSpace(value))
        {
            this.ValidationErrors.Add("Lng", strings.Positions_Lng_Empty);
        }

        this._lng = value != null ? value.Trim() : null; 
    }
}

5
你认为什么是有效的?在这个星球上?在陆地上? - Brad
3
为什么你把它们当作字符串处理,它们本来就是数字呢? - Jon Skeet
使用字符串并不是我所知道的最好方式,但现在我无法更改它。我想确保它作为一个经过批准的坐标被发送,而不是其他任何东西。 - Hysteria
@Brad - 有效值是反映地球上位置的值。 - KevinDTimm
4个回答

71

来自MSDN

http://msdn.microsoft.com/en-us/library/aa578799.aspx

纬度是指一个地方距离赤道向北或向南的距离。赤道位于0°,北极位于90°北(或90°,因为正纬度表示向北),南极位于90°南(或-90°)。纬度测量值范围从0°到(+/-)90°。

经度是指一个地方距离本初子午线向东或向西的距离。本初子午线穿过英国的格林威治。经度测量值范围从0°到(+/-)180°。

enter image description here

在您的纬度setter中,检查被设置的值是否介于-90度到90度之间。如果不是,则抛出异常。对于经度,请检查该值是否介于-180度到180度之间。如果不是,则抛出异常。


1
你可以有负纬度和经度。通常,范围是-90到+90和-180到+180。 - Muad'Dib
2
@Muad'Dib,那篇文章说你可以有负数(这就是(+/-)的含义),它表示纬度从-90到+90,经度从-180到+180。 - George Duckett
1
Duckett是正确的 - 我错了并改变了我的答案。 - George Johnston
2
Duckett,这不就是我刚才说的吗? :) - Muad'Dib

39

或者您可以使用内置于.NET 4(引用System.Device.dll)的GeoCoordinate类。其构造函数会在无效的经度和纬度上抛出异常:

纬度

Type: System.Double

位置的纬度。可能范围从-90.0到90.0。

经度

Type: System.Double

位置的经度。可能范围从-180.0到180.0。


26

使用Double而不是String。如果需要允许String输入,则使用Double.TryParse(string)

    public Double Lat
    {
        get
        {
            return this._lat;
        }
        set
        {
            if (value < -90 || value > 90)
            {
                throw new ArgumentOutOfRangeException("Latitude must be between -90 and 90 degrees inclusive.");
            }
            this._lat= value;
        }
    }

    public Double Lng
    {
        get
        {
            return this._lng;
        }
        set
        {
            if (value < -180 || value > 180)
            {
                throw new ArgumentOutOfRangeException("Longitude must be between -180 and 180 degrees inclusive.");
            }
            this._lng= value;
        }
    }

0

通常情况下,纬度和经度是十进制数值,而不是字符串。

十进制度数是使用度、分和秒(DMS)的替代方法。与纬度和经度一样,其值分别受到±90°和±180°的限制。正纬度位于赤道以北,负纬度位于赤道以南。正经度位于本初子午线以东,负经度位于本初子午线以西。通常按照纬度在经度之前的顺序表示纬度和经度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接