Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Точность координат |
Автор: animegirl 19.11.2012, 07:42 |
Работаю с картами от гугла, он выдаёт координаты с точностью в 16 знаков после запятой, использует градусы, но забивает на угловые минуты и секунды, и после запятой идёт в десятеричном измерении. В моей логике, берём окружность в 40000 км это 111 км на 1°, 111 км это у нас 111000 метров, то есть мне хватит 6 знаков после запятой, чтоб записывать данные с точностью до метра. Разметила в базе колонки, под это дело, сейчас сидела тестировала запись позиционирования, и когда начала проверять сильно удивилась насколько сдвинуты некоторые из точек. Если учесть, что тестировала, я на странах, то погрешность на взгляд при таком масштабе идёт на десятки километров. Откуда такие сдвиги, неужели от того, что база отрезала эти 16 цифр после запятой до указанных 6-ти? |
Автор: Pavia 19.11.2012, 09:39 |
40 000 000 м 360,000000±0,000001 ° ±0,000001°/360,000000°*40 000 000 м=±0,(111) м Этого достаточно. Float(Single) имеет точноть 22 бита или что около шети десятичных знаков 360,000±0,001° 0,001°/360,00*40 000 000 м=111,(1) м Обычно считается что при выполнение алгоритм точность теряется. Зависит от алгоритма. |
Автор: beroal 19.11.2012, 11:37 |
Может, просто в вашей программе есть ошибка? |
Автор: animegirl 19.11.2012, 15:27 | ||
Просто в файл скопируйте и где-нибудь на карте кликните Добавлено через 5 минут и 54 секунды Pavia, Несколько раз перепрочла ваш пост, не поняла, ничего кроме того, что флоат имеет 6 знаков после запятой (Не поняла почему только 6) |
Автор: animegirl 19.11.2012, 15:45 |
beroal, Да программа - обычный ПХП скрипт, взял данные переложил в базу эти данные. Единственный момент, что поля в базе указаны как 9,6, то есть 9 знаков максимум, 6 после запятой, и база отрезает этот фактор. |
Автор: lvt 19.11.2012, 17:26 |
6 знаков после запятой, это очень мало. Храни столько знаков, сколько тебе сам Google отдает. Я так делаю. В базу такое число помещается легко. Про размер поля в базе не дочитала. В базе используй тип float. |
Автор: baldina 19.11.2012, 18:12 |
если сократить результат до 6 знаков, результат не меняется Добавлено через 2 минуты и 47 секунд меня терзают смутные сомнения: гугл возвращает число с двойной точностью, но походу значащих цифр после запятой там не больше 7 |
Автор: volatile 20.11.2012, 23:52 | ||
Если промахиваетесь в странах, то это точно не погрешность округления. Скорей всего, дело в неправильно выбранной проекции. Гугл использует меракторскую проекцию. (довольно уродливая проекция, кстати). А вы используете, скорей всего другую проекцию. |
Автор: Pavia 21.11.2012, 08:31 | ||
![]() У самого так было, что координаты промахивались на 0,1-0,5°. Пока не переписал по нормальному.
float имеет 22 бита на мантису. Log10(2^22 )=6.622 - десятичных знака. |
Автор: maxdiver 21.11.2012, 12:27 | ||
Дело может быть не только в выборе проекции (меркатор/геодезика), но и в том, что есть различие между сферической и эллиптической проекцией, и ваши данные могут быть не в той проекции, чем на картах гугла. Правда, расхождение от этого не должно составлять "несколько километров", как у вас. http://habrahabr.ru/post/143898/:
|
Автор: animegirl 22.11.2012, 16:31 |
В том то и вся нелогичность, что все данные я брала с гугла, мне нужно было на скорую руку забить пару десятков стран в базу, брать надо было крайние точки, север запад восток юг, я сделала скрипт, схожий с тем, что сверху, кликала на точку и указывала для какой из сторон это значение, потом записывала в базу, то есть нигде я данные не искажала, потом решила проверить результат, выдала эти записи на той же карте с которой записывала, и заметила, что местами там слишком уж жесткое отклонение |