Захотелось отображать яндекс карты в 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 ) );
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
Реализую небольшой проект по воспроизведении аудио данных, в том числе и с микрофонаДля воспроизведения пользуюсь библиотекой soundiolib, библиотека...
Программа должна считывать из файла элементы матрицы, но в конце выдаёт ошибку stack around the variable pd was corruptedГде ошибка?
Мне нужно записать данные в файлtxt используя функции высокого уровня,а считать данные из файла используя функции низкого уровня на С и С++