Точность данных в OZI

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
dummyguy
Новоприбывший
Сообщения: 14
Зарегистрирован: 08 ноя 2007, 15:50
Репутация: 0

Точность данных в OZI

Сообщение dummyguy » 19 май 2009, 15:12

Привет знатокам GIS!

Пож-ста Ваше мнение:
правильно ли работает OZIExplorer - думаю, у многих есть опыт?
По карте Москвы OZI дает мне координаты точек и показывает расстояние
между waypoint'ами.
Когда же я сам считаю эти расстояния (на java по разным ф-лам, в т.ч. по самым точным), то получаю расхождение с OZI на многие (!) единицы % (ОZI систематически занижает).

Доступны ли массовым пользователям другие ГИС с картой Москвы - для контроля, чтобы разобраться
до конца.
Было бы супер, если бы с ними можно было бы работать on-line (без установки у себя)

С уважением, dummy
Последний раз редактировалось Максим Дубинин 20 май 2009, 05:28, всего редактировалось 1 раз.
Причина: e-mail удален, см. правила форума: 2.2.1

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Точность данных в OZI

Сообщение Максим Дубинин » 20 май 2009, 05:30

как вы считаете расстояния на java?
приведите пример двух точек и рассчета в OZI и java.
пристегивайтесь, турбулентность прямо по курсу

dummyguy
Новоприбывший
Сообщения: 14
Зарегистрирован: 08 ноя 2007, 15:50
Репутация: 0

Re: Точность данных в OZI

Сообщение dummyguy » 20 май 2009, 11:12

p1: latdDegr=55.0 latdMinu=47.462 lngtDegr=37.0 lngtMinu=29.426 //Москва, ул. Народного Ополчения, 39-1
p2: latdDegr=55.0 latdMinu=48.327 lngtDegr=37.0 lngtMinu=27.400 //Москва, ул. Марш.Новикова, 23

OZI: 2.4505 km
Java: 2.6511 km (для малых расст.)

Код: Выделить всё

 Point(double latdDegr, double latdMinu,   // constructor
        double lngtDegr, double lngtMinu) {
    latdd = latdDegr + latdMinu/60.0; 
    lngtd = lngtDegr + lngtMinu/60.0; 
    ...
  } 	
  double distSphere(Point p) { // для малых расст.
    double item1 = Math.pow(Math.sin((deg2rad(this.latdd) - deg2rad(p.latdd))/2.0), 2.0);
    double item2 = Math.cos(deg2rad(this.latdd)) * Math.cos(deg2rad(p.latdd));
    double item3 = Math.pow(Math.sin((deg2rad(this.lngtd)-deg2rad(p.lngtd))/2.0), 2.0);
    return 6372795 * 2.0 * Math.asin(Math.sqrt(item1 + item2 * item3)); 
  }

  вариант расчета упрощ.
    double itm1 = Math.sin(deg2rad(this.latdd)) * Math.sin(deg2rad(p.latdd));
    double itm2 = Math.cos(deg2rad(this.latdd)) * Math.cos(deg2rad(p.latdd));
    double itm3 = Math.cos(deg2rad(p.lngtd) - deg2rad(this.lngtd));
    return 40075696 * Math.acos(itm1 + itm2 * itm3)/(2.0 * Math.PI);
   
  double deg2rad(double deg) {  // вспомог. метод
    return deg * Math.PI / 180.0;
  }  

вызов метода

p1.distSphere(p2)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Точность данных в OZI

Сообщение Максим Дубинин » 20 май 2009, 12:44

теперь понятно
OZI считает в прямоугольной СК
ваш скрипт - в сферической, как расстояние большого круга (подробнее)
и то и другое - нормально, но для вектора в Lat-Long правильнее считать расстояния вашим скриптом.

Повторю, это не значит, что OZI не прав, он прав, но не оптимален.

PS: кстати, откуда скрипт?
пристегивайтесь, турбулентность прямо по курсу

dummyguy
Новоприбывший
Сообщения: 14
Зарегистрирован: 08 ноя 2007, 15:50
Репутация: 0

Re: Точность данных в OZI

Сообщение dummyguy » 20 май 2009, 13:13

Не скрипт - вообще-то, java не скриптовый язык в отличие от python, например -
а код, ну, а ф-ла оттуда, где "подробнее" :)
Только вот странно, что расхождения такие большие.
Расхождение должно составлять ДОЛИ метра на этом расстоянии.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Точность данных в OZI

Сообщение AndreyL » 20 май 2009, 17:52

Пытался повторить расчет – у Вас в коде сплошь ошибки. Что, например, должна возвращать строка
double item3 = Math.pow(Math.sin((deg2rad(this.lngtd)-deg2rad(p.lngtd))/2.0), 2.0);

по-моему ноль Sin(0)=0

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Точность данных в OZI

Сообщение Максим Дубинин » 20 май 2009, 18:20

беру свои слова обратно, по этим координатам такую цифру как получает OZI, простым sqrt(x1-x2)^2+(y1-y2)^2) не получить, значит считает он по другому, но не по большим кругам, т.к. результаты расчета java верные.

расскажите еще как считаете в OZI по какому материалу, не по карте случайно привязанной?
пристегивайтесь, турбулентность прямо по курсу

dummyguy
Новоприбывший
Сообщения: 14
Зарегистрирован: 08 ноя 2007, 15:50
Репутация: 0

Re: Точность данных в OZI

Сообщение dummyguy » 20 май 2009, 20:23

2Andreil

Где Вы видите ошибку?
Почему Вы указываете на sin(0), аргумент-то отнюдь не нулевой:
this.lngtd-p.lngtd != 0

dummyguy
Новоприбывший
Сообщения: 14
Зарегистрирован: 08 ноя 2007, 15:50
Репутация: 0

Re: Точность данных в OZI

Сообщение dummyguy » 20 май 2009, 20:26

2sim: да, карту я сам не привязывал,
возможно, это источник ошибок...

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Точность данных в OZI

Сообщение AndreyL » 20 май 2009, 21:12

Прошу великодушного прощения – сам накосячил, а Вас обвинил. В Вашем коде все корректно, по первому алгоритму 2651.06 м, по второму 2653.33 м.

dummyguy
Новоприбывший
Сообщения: 14
Зарегистрирован: 08 ноя 2007, 15:50
Репутация: 0

Re: Точность данных в OZI

Сообщение dummyguy » 20 май 2009, 22:19

У меня есть еще одна карта Москвы в OZI.
Попробую оценить расст. p1-p2 по ней.
Может, что-то прояснится...

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость