Доброго времени суток.
Я новенький в этой тематике, поиском пользовался, ответа не нашёл, но если где-то что-то пропустил, ткните носом, пожалуйста.
При тестировании переноса объектов из исходной проекции карты подольска (гаусса-крюгера) в проекцию меркатора следующим кодом:
В отладке видно следующее:
X1=6134152,202184489
X2=6173078,6093562869
Y1=7404058,4855427258
Y2=7437071,3973564254
Xx1=6134152,202184489
Xx2=7457816
Yx1=332362
Yx2=7437071,3973564254
Пробовал создавать объект рамки в коде и вставлять её, наблюдал такую же картину. Не могу понять, что я делаю не так, вроде всё, как написано в документации.
Спасибо.
Я новенький в этой тематике, поиском пользовался, ответа не нашёл, но если где-то что-то пропустил, ткните носом, пожалуйста.
При тестировании переноса объектов из исходной проекции карты подольска (гаусса-крюгера) в проекцию меркатора следующим кодом:
Код |
---|
bool testConvert() { bool result = false; if( m_hMap == 0) return result; MAPREGISTEREX mgr; LISTREGISTER lrg; if( mapGetMapInfoEx( m_hMap, 1, &mgr, &lrg)) { static const int LOCAL_SIZE = 1024; char rscName[ LOCAL_SIZE] = {0}; if( mapGetRscFileName( m_hRsc, rscName, LOCAL_SIZE - 1) != 0)// получение текущего имени файла классификатора { mgr.MaterialProjection = MERKATORMAP; QString newFileName = "/tmp/podolsk_test/podolsk.map"; if( writeLocalMapTo( mapCreateMapEx( newFileName.toLatin1().data(), rscName, &mgr, &lrg))) { return true; } } else { qDebug() << "getting rsc filename was bad idea."; } } return false; } bool writeLocalMapTo(HMAP lhMap) { if( lhMap != 0) { MAPREGISTEREX mgr; LISTREGISTER lrg; mapGetMapInfoEx( lhMap, 1, &mgr, &lrg); double X1 = mapGetMapX1( lhMap); double Y1 = mapGetMapY1( lhMap); double X2 = mapGetMapX2( lhMap); double Y2 = mapGetMapY2( lhMap); qDebug() << QString( "default: (%1, %2) - (%3, %4)").arg( X1).arg( Y1).arg( X2).arg( Y2); HSELECT hsel = mapCreateMapSelectContext( m_hMap); mapSelectObject( hsel, -1, 1); long objMaxCount = mapSeekSelectObjectCount( m_hMap, hsel); if( objMaxCount == 0) objMaxCount = 1; if( true)//test readcopy from mapapi doc { long listCount = mapGetSiteListCount( m_hMap, m_hMap); for( long i = 1; i <= listCount; i++) { long objCountInList = mapGetSiteObjectCountInList( m_hMap, m_hMap, i);// mapGetObjectCount( m_hMap, i); for( long j = 1; j <= objCountInList; j++) { HOBJ lObj = mapCreateObject( m_hMap, 1, 0, 0);; QCoreApplication::processEvents(); if( mapReadObjectByNumber( m_hMap, m_hMap, lObj, i, j) == 0) { qDebug() << "mapReadObjectByNumber failed!"; return false; } else { if( mapChangeObjectMap( lObj, lhMap, lhMap) == 0) { qDebug() << "mapChangeObjectMap failed!"; return false; } else { if( mapCommitObject( lObj) == 0) { qDebug() << "FAULT on commit copy"; return false; } } if( true) { double Xx1 = mapGetMapX1( lhMap); double Yx1 = mapGetMapY1( lhMap); double Xx2 = mapGetMapX2( lhMap); double Yx2 = mapGetMapY2( lhMap); if( ( fabs( Yx1 - Y1) > MAP_COORDINATE_THRESHOLD) || ( fabs( Xx2 - X2) > MAP_COORDINATE_THRESHOLD)) { //здесь я узнал о том, что причиной является рамка карты qDebug() << QString( "Converted: (%1, %2) - (%3, %4)").arg( Xx1).arg( Yx1).arg( Xx2).arg( Yx2); const char* oN ame = mapObjectName( lObj); long excode = mapObjectExcode( lObj); QTextCodec* codec = QTextCodec::codecForName( "KOI8-R"); QString sName = codec->toUnicode( oName); qDebug() << "Broken:" << sName << "(" << excode << ");"; } } } mapFreeObject( lObj); } } } mapSetRegion( lhMap);// не помогает mapCloseData( lhMap); return true; } else { qDebug() << "create map fault... :("; return false; } } |
X1=6134152,202184489
X2=6173078,6093562869
Y1=7404058,4855427258
Y2=7437071,3973564254
Xx1=6134152,202184489
Xx2=7457816
Yx1=332362
Yx2=7437071,3973564254
Пробовал создавать объект рамки в коде и вставлять её, наблюдал такую же картину. Не могу понять, что я делаю не так, вроде всё, как написано в документации.
Спасибо.