System.FormatException: 24201: значения широты должны быть от -90 до 90 градусов - PullRequest
1 голос
/ 05 декабря 2011

UPDATE

Проблема была в локали пользователя! Я разобрал проблему с

double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);

Актуальный вопрос

Это моя первая попытка определить местоположение на моем мобильном сайте. Я получаю местоположение пользователя с его телефона с помощью w3 geolocation 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 голосов
/ 06 декабря 2011

Проблема была в локали пользователя!Я разобрал проблему с

 double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);
0 голосов
/ 05 декабря 2011

Хотя 3.1234567890123+E16 является действительным значением с плавающей точкой, оно намного больше 90, поэтому не является допустимой широтой, которая должна лежать между -90 и +90 градусами.

Кроме того, 3.1234567890123 на самом деле 3.1234567890123+E01, поэтому я не уверен, как он умножается на 10^16 в преобразовании, чтобы стать 3.1234567890123+E16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...