Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точность координат 
:(
    Опции темы
animegirl
Дата 19.11.2012, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Работаю с картами от гугла, он выдаёт координаты с точностью в 16 знаков после запятой, использует градусы, но забивает на угловые минуты и секунды, и после запятой идёт в десятеричном измерении. В моей логике, берём окружность в 40000 км это 111 км на 1°, 111 км это у нас 111000 метров, то есть мне хватит 6 знаков после запятой, чтоб записывать данные с точностью до метра. Разметила в базе колонки, под это дело, сейчас сидела тестировала запись позиционирования, и когда начала проверять сильно удивилась насколько сдвинуты некоторые из точек. Если учесть, что тестировала, я на странах, то погрешность на взгляд при таком масштабе идёт на десятки километров. Откуда такие сдвиги, неужели от того, что база отрезала эти 16 цифр после запятой до указанных 6-ти?

Это сообщение отредактировал(а) animegirl - 19.11.2012, 08:38


--------------------
Скажи миру - НЯ!
PM   Вверх
Pavia
Дата 19.11.2012, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



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) м

Обычно считается что при выполнение алгоритм точность теряется. Зависит от алгоритма.
PM MAIL   Вверх
beroal
Дата 19.11.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 18.1.2003
Где: Украина

Репутация: нет
Всего: 3



Может, просто в вашей программе есть ошибка?
PM WWW   Вверх
baldina
Дата 19.11.2012, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(animegirl @  19.11.2012,  07:42 Найти цитируемый пост)
Работаю с картами от гугла, он выдаёт координаты с точностью в 16 знаков после запятой

в интерфейсе гугл (и яндекс тоже) довольствуется шестью знаками

Добавлено через 3 минуты и 20 секунд
типа https://maps.google.ru/maps/place?q=55.750219,37.61579
PM MAIL   Вверх
animegirl
Дата 19.11.2012, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Цитата(baldina @  19.11.2012,  12:07 Найти цитируемый пост)
в интерфейсе гугл (и яндекс тоже) довольствуется шестью знаками

Код

<html>
    <head>
        <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
        <script>
            way_map = null;
            var start_map = function()
                {
                way_map = new google.maps.Map(
                    document.getElementById("map_main"),{
                        disableDefaultUI:true,
                        disableDoubleClickZoom:false,
                        draggable:true,
                        keyboardShortcuts:true,
                        mapTypeControl:false,
                        mapTypeId:google.maps.MapTypeId.ROADMAP,
                        overviewMapControl:true,
                        overviewMapControlOptions:{
                            opened:false
                            },
                        scaleControl:false,
                        scrollwheel:true,
                        streetViewControl:false,
                        zoom:2,
                        zoomControl:true,
                        zoomControlOptions:{
                            position:google.maps.ControlPosition.RIGHT_CENTER,
                            style:google.maps.ZoomControlStyle.LARGE
                            }});
                way_map.setCenter(new google.maps.LatLng(-0,0));
                google.maps.event.addListener(way_map, 'click', function(e) {
                    document.getElementById('actlat').value = e.latLng.lat();
                    document.getElementById('actlng').value = e.latLng.lng();});
                }
        </script>
    </head>
    <body onload="start_map();">
        <input type="text" id="actlat" value="" style="width:200px;"><input type="text" id="actlng" value="" style="width:200px;">
        <div id="map_main" style="width:1000px;height:700px;"></div>
    </body>
</html>

Просто в файл скопируйте и где-нибудь на карте кликните

Добавлено через 5 минут и 54 секунды
Pavia
Несколько раз перепрочла ваш пост, не поняла, ничего кроме того, что флоат имеет 6 знаков после запятой (Не поняла почему только 6)


--------------------
Скажи миру - НЯ!
PM   Вверх
animegirl
Дата 19.11.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



beroal, Да программа - обычный ПХП скрипт, взял данные переложил в базу эти данные. Единственный момент, что поля в базе указаны как 9,6, то есть 9 знаков максимум, 6 после запятой, и база отрезает этот фактор.


--------------------
Скажи миру - НЯ!
PM   Вверх
lvt
Дата 19.11.2012, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.10.2008

Репутация: нет
Всего: нет



6 знаков после запятой, это очень мало. Храни столько знаков, сколько тебе сам Google отдает. Я так делаю. В базу такое число помещается легко.

Про размер поля в базе не дочитала. В базе используй тип float.

Это сообщение отредактировал(а) lvt - 19.11.2012, 17:28
PM MAIL   Вверх
baldina
Дата 19.11.2012, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(animegirl @  19.11.2012,  15:27 Найти цитируемый пост)
Просто в файл скопируйте и где-нибудь на карте кликните

если сократить результат до 6 знаков, результат не меняется

Добавлено через 2 минуты и 47 секунд
меня терзают смутные сомнения: гугл возвращает число с двойной точностью, но походу значащих цифр после запятой там не больше 7
PM MAIL   Вверх
volatile
Дата 20.11.2012, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(animegirl @  19.11.2012,  07:42 Найти цитируемый пост)
сильно удивилась насколько сдвинуты некоторые из точек. Если учесть, что тестировала, я на странах

Если промахиваетесь в странах, то это точно не погрешность округления.
Скорей всего, дело в неправильно выбранной проекции.
Гугл использует меракторскую проекцию. (довольно уродливая проекция, кстати).
А вы используете, скорей всего другую проекцию.


Это сообщение отредактировал(а) volatile - 20.11.2012, 23:53
PM MAIL   Вверх
Pavia
Дата 21.11.2012, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(volatile @  20.11.2012,  23:52 Найти цитируемый пост)
Скорей всего, дело в неправильно выбранной проекции.

 smile Или в неправильных рассчётах проекции. 
У самого так было, что координаты промахивались на 0,1-0,5°. Пока не переписал по нормальному. 


Цитата(animegirl @  19.11.2012,  15:27 Найти цитируемый пост)
Несколько раз перепрочла ваш пост, не поняла, ничего кроме того, что флоат имеет 6 знаков после запятой (Не поняла почему только 6)

float имеет 22 бита на мантису. Log10(2^22 )=6.622 - десятичных знака.  
PM MAIL   Вверх
maxdiver
Дата 21.11.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Дело может быть не только в выборе проекции (меркатор/геодезика), но и в том, что есть различие между сферической и эллиптической проекцией, и ваши данные могут быть не в той проекции, чем на картах гугла. Правда, расхождение от этого не должно составлять "несколько километров", как у вас.

Цитата в тему:
Цитата
Следует заметить, что сказанное не совсем верно: если мы проецируем сферу, а движемся по геоиду, то путевой угол определится не совсем верно и приплывём мы не совсем туда. (Расхождение может быть довольно заметным — всё-таки, экваториальный и полярный радиусы Земли различаются более чем на 20 километров.) Эллипсоид тоже можно спроецировать с сохранением углов, хотя формулы для эллиптической проекции Меркатора значительно сложнее, чем для сферической (обратное преобразование вообще не выражается в элементарных функциях). Полное и подробное описание математики проекции Меркатора на эллипсоиде можно найти здесь.

Когда мы в Яндексе начинали делать свои карты, нам показалось логичным использовать эллиптическую меркаторовскую проекцию. К сожалению, многим другим картографическим веб-сервисам так не показалось, и они используют сферическую проекцию. Поэтому долгое время нельзя было показывать поверх карты Яндекса тайлы, скажем, OSM — они расходились по оси y, чем ближе к полюсу — тем заметнее. В версии API 2.0 мы решили не плыть против течения, и предоставили возможность как работать с картой в произвольной проекции, так и показывать на карте одновременно несколько слоёв в разных проекциях — как удобнее.


Это сообщение отредактировал(а) maxdiver - 21.11.2012, 12:29
PM MAIL WWW ICQ   Вверх
animegirl
Дата 22.11.2012, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



В том то и вся нелогичность, что все данные я брала с гугла, мне нужно было на скорую руку забить пару десятков стран в базу, брать надо было крайние точки, север запад восток юг, я сделала скрипт, схожий с тем, что сверху, кликала на точку и указывала для какой из сторон это значение, потом записывала в базу, то есть нигде я данные не искажала, потом решила проверить результат, выдала эти записи на той же карте с которой записывала, и заметила, что местами там слишком уж жесткое отклонение


--------------------
Скажи миру - НЯ!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1811 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.