System.FormatException:24201:纬度值必须介于-90和90度之间

时间:2011-12-05 16:37:41

标签: c# sql-server-2008 geolocation

更新

问题是用户的语言环境! 我用

对问题进行了分类
double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);

实际问题

这是我第一次尝试在我的移动网站上实施位置。我使用w3地理定位API从手机获取用户的位置并将其转换为double,然后将其作为float存储在sqlserver中。

在大多数情况下,它工作正常,但在某些情况下,手机提供的坐标很长。例如,纬度可以是3.1234567890123,因此在点之后有14个数字。

当我尝试计算用户到某个点的距离时,会将其保存为3.1234567890123+E16并导致标题出错。

避免它的最佳方法是什么?我应该将用户的输入调整到一定长度,以便正确转换吗?

获取和保存数据的方法

double lat = Convert.ToDouble(Request.Form["lat"]);
double lng = Convert.ToDouble(Request.Form["lng"]);
user.UpdateMyLocationCoordinates(user.id, lat, lng);

public void UpdateMyLocationCoordinates(int userId, double lat, double lng)
{
    SiteDbHelper db = new SiteDbHelper();
    List<SqlParameter> sqlParameters = new List<SqlParameter>();
    sqlParameters.Add(db.CreateParameter("@userId", SqlDbType.Int, userId));
    sqlParameters.Add(db.CreateParameter("@latitude", SqlDbType.Float, lat));
    sqlParameters.Add(db.CreateParameter("@longitude", SqlDbType.Float, lng));
    db.UpdateInsertDeleteReturnAffectedRowCount ("SocialSiteUser_UpdateMyLocationCoordinates", CommandType.StoredProcedure, sqlParameters);
}

CreateParameter

public SqlParameter CreateParameter(string name, SqlDbType type, double value)
{
    SqlParameter param = new SqlParameter(name, value);
    param.SqlDbType = type;
    return param;
}

SP o存储数据

ALTER PROCEDURE [dbo].[SocialSiteUser_UpdateMyLocationCoordinates]
@userId int,
@latitude float,
@longitude float
AS
BEGIN
    SET NOCOUNT ON
    update domains_users set latitude=@latitude, longitude=@longitude where id=@userId
END

2 个答案:

答案 0 :(得分:0)

虽然3.1234567890123+E16是有效的浮点数,但它比90大得多,因此不是有效的纬度,它必须介于-90+90度之间。< / p>

此外,3.1234567890123实际上是3.1234567890123+E01,因此我不确定在转化中如何乘以10^16成为3.1234567890123+E16

答案 1 :(得分:0)

问题是用户的语言环境!我用

对问题进行了分类
 double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);