Захотелось отображать яндекс карты в 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);
}
Но какие формулы нужно использовать для яндекс карт? может кто-то уже это делал, если не трудно подскажите куда копать или дайте ссылку на формулы.
Вот исправленные функции для WGS84
QPointF YandexMapAdapter::displayToCoordinate( const QPoint& point ) const
{
qreal longitude = (point.x()*(360/(mNumberOfTiles*mTileSize)))-180; // pix per grad
qreal ypos = asin( tanh( (1-point.y()*(2/(mNumberOfTiles*mTileSize)))*PI ) );
qreal n = 0.003356551468879694;
qreal k = 0.00000657187271079536;
qreal h = 1.764564338702e-8;
qreal m = 5.328478445e-11;
qreal g = ypos;
qreal l = g + n * sin( 2 * g ) + k * sin( 4 * g ) + h * sin( 6 * g ) + m * sin( 8 * g );
qreal latitude = rad_deg( l );
return QPointF( longitude, latitude );
}
QPoint YandexMapAdapter::coordinateToDisplay( const QPointF& coordinate ) const
{
qreal x = (coordinate.x()+180) * (mNumberOfTiles*mTileSize)/360.; // coord to pixel!
qreal y = deg_rad( coordinate.y() );
qreal e = 0.081819790992114408;
qreal lat = atanh( sin( y ) ) - e * atanh( e * sin( y ) );
qreal pixLat = (1 - lat /PI)/2 * (mNumberOfTiles*mTileSize);
return QPoint( int( x ), int( pixLat ) );
}
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
Реализую небольшой проект по воспроизведении аудио данных, в том числе и с микрофонаДля воспроизведения пользуюсь библиотекой soundiolib, библиотека...
Программа должна считывать из файла элементы матрицы, но в конце выдаёт ошибку stack around the variable pd was corruptedГде ошибка?
Мне нужно записать данные в файлtxt используя функции высокого уровня,а считать данные из файла используя функции низкого уровня на С и С++