QMapControl и яндекс карты

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
ipkis
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 апр 2019, 18:51
Репутация: 0
Откуда: jnNelf

QMapControl и яндекс карты

Сообщение ipkis » 17 апр 2019, 18:54

Захотелось отображать яндекс карты в QMapControl, для этого создал yandexMapAdapter

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

    YandexMapAdapter::YandexMapAdapter(   )
    : TileMapAdapter("vec01.maps.yandex.net", "/tiles?l=map&v=3.340.0&x=%2&y=%3&z=%1&lang=ru_RU", 256, 0, 21)
{}
Все прекрасно отображается, однако координаты по Y имеют какое-то смещение, один и тот же дом имеет разные координаты при использовании имеющегося googleMapAdapter и моего yandexMapAdapter. Скорее всего нужно переопределить эти функции:

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

 QPoint TileMapAdapter::coordinateToDisplay(const QPointF& coordinate) const
{
    qreal x = (coordinate.x()+180) * (mNumberOfTiles*mTileSize)/360.; // coord to pixel!
    qreal y = (1-(log(tan(PI/4+deg_rad(coordinate.y())/2)) /PI)) /2  * (mNumberOfTiles*mTileSize);

    return QPoint(int(x), int(y));
}

QPointF TileMapAdapter::displayToCoordinate(const QPoint& point) const
{
    qreal longitude = (point.x()*(360/(mNumberOfTiles*mTileSize)))-180;
    qreal latitude = rad_deg(atan(sinh((1-point.y()*(2/(mNumberOfTiles*mTileSize)))*PI)));

    return QPointF(longitude, latitude);

}
Но какие формулы нужно использовать для яндекс карт? может кто-то уже это делал, если не трудно подскажите куда копать или дайте ссылку на формулы.

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: QMapControl и яндекс карты

Сообщение freeExec » 17 апр 2019, 20:32

Яндекс основан на эллипсоиде, а не на сфере как у гугла.

ipkis
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 апр 2019, 18:51
Репутация: 0
Откуда: jnNelf

Re: QMapControl и яндекс карты

Сообщение ipkis » 18 апр 2019, 13:45

так, получается долгота совпадает, подскажите формулу для вычисления широты

trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: QMapControl и яндекс карты

Сообщение trir » 18 апр 2019, 13:50

в ГОСТ'е посмотри

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: QMapControl и яндекс карты

Сообщение Игорь Белов » 18 апр 2019, 15:29

В общепринятых координатах зависимость y(lat):

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

y = a * (atanh(sin(lat)) - e * atanh(e * sin(lat)))
Здесь параметры a, e — соответственно экваториальный радиус эллипсоида и его эксцентриситет.
Радиус a далее сокращается при вычислении тайловых/пиксельных координат.
Эксцентриситет же разный:
  • сфера Гугла и др.: e = 0
  • эллипсоид Яндекса: e = 0.08181919084262149433480245175385667
При e ≠ 0 обратная функция lat(y) в лоб не считается. Либо итеративный поиск корня, либо разложение в тригонометрический ряд с последующим обращением. С первым, надеюсь, сами справитесь. Второе выложу, если ну прям очень надо.
The purpose of computing is insight, not numbers

ipkis
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 апр 2019, 18:51
Репутация: 0
Откуда: jnNelf

Re: QMapControl и яндекс карты

Сообщение ipkis » 18 апр 2019, 16:11

с первым справлюсь, а второе ну очень надо :) Спасибо за помощь!

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: QMapControl и яндекс карты

Сообщение Игорь Белов » 18 апр 2019, 21:29

Второе: тригонометрический ряд

Вычислим широту на сфере χ (хи):

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

chi = asin(tanh(y/a))
chi.png
Широта на сфере χ
chi.png (642 байт) 10606 просмотров
Широта на эллипсоиде φ в виде тригонометрического ряда по χ:
phi.png
Широта на эллипсоиде φ
phi.png (9.45 КБ) 10606 просмотров
Здесь e — эксцентриситет. Квадрат эксцентриситета для эллипсоида WGS 84:
e² = 0.006694379990141316996137233540044784
The purpose of computing is insight, not numbers

stout
Участник
Сообщения: 91
Зарегистрирован: 13 апр 2012, 17:09
Репутация: 52

Re: QMapControl и яндекс карты

Сообщение stout » 19 апр 2019, 21:57

Вот формула Боуринга для перехода от изометрической широты к геодезической
isometric2Geodic.png
isometric2Geodic.png (47.73 КБ) 10546 просмотров
А вот график ошибки этой формулы в секундах дуги (φ(true) - φ(approx))*20624.806247
isometric2GeodicERROR.png
isometric2GeodicERROR.png (11.18 КБ) 10546 просмотров
Вертикальная шкала в единицах 10 знака после запятой.

stout
Участник
Сообщения: 91
Зарегистрирован: 13 апр 2012, 17:09
Репутация: 52

Re: QMapControl и яндекс карты

Сообщение stout » 22 апр 2019, 15:23

Скорее всего для Игорь Белов, это элементарщина, но мне кажется надо добавить, что сумму тригонометрического ряда удобно находить по алгоритму Кленшоу
Clenshaw formula (sin).png
Clenshaw formula (sin).png (36.11 КБ) 10473 просмотра

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: QMapControl и яндекс карты

Сообщение Игорь Белов » 22 апр 2019, 20:53

t = 2 cos 2χ ?
The purpose of computing is insight, not numbers

stout
Участник
Сообщения: 91
Зарегистрирован: 13 апр 2012, 17:09
Репутация: 52

Re: QMapControl и яндекс карты

Сообщение stout » 23 апр 2019, 07:14

Игорь Белов писал(а):
22 апр 2019, 20:53
t = 2 cos 2χ ?
Да, конечно! Вы правы.
В качестве частичного искупления оставлю здесь ссылку на неплохую статью (на мой взгляд)
SOME APPLICATIONS OF CLENSHAW'S RECURRENCE FORMULA IN MAP PROJECTIONS
в качестве добавки в этой статье описан алгоритм proj_etmerc.c из PROJ

ipkis
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 апр 2019, 18:51
Репутация: 0
Откуда: jnNelf

Re: QMapControl и яндекс карты

Сообщение ipkis » 23 апр 2019, 10:12

Я выложил решение тут https://ru.stackoverflow.com/questions/ ... 417#972417

Ответить

Вернуться в «Я новичок!»

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

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