Esempio n. 1
0
void MapView::getTile(int x, int y, int z)
{
    if (MapSource.id == None) return;
    TileRequest request(x,y,z,MapSource);

    QByteArray *tile = getTileFromDB(z,x,y,MapSource.url);
    if (tile != 0){ //checks if tile is actually in DB
        placeTile(tile, x, y, z);
    } else if (currentZoom == z && !currentRequests.contains(request)) //why currentZoom == z?
    { /*  QNetworkRequest request(QUrl(qPrintable(
                                         MapSource.url+QString::number(z)+"/"+
                                         QString::number(x)+"/"+
                                         QString::number(y)+".png"))); */
        QElapsedTimer timer; timer.start();

        requestStack.removeAll(request); //removes all previous occurences of the request

        //check if concurrent download count has been reached
        if (currentRequests.count()<requestLimit)
        {
            //if not, proceed to download request
            networkManager->get(request);
            currentRequests.append(request);
        } else {
            //if it has, put request on stack
            requestStack.append(request);
            if (requestStack.count() > maxReqStackSize) {
                requestStack.removeAt(0);
            }
        }

        qDebug("queueing took "+QString::number(timer.elapsed()));
    }
}
Esempio n. 2
0
void MapView::placeTile(QByteArray *tileData, int x, int y, int z)
{
        QPixmap tilePixmap;
        tilePixmap.loadFromData(*tileData); delete tileData;
        if (tilePixmap.isNull()) {qDebug("tile pixmap null"); return; }
        OSMTile *tile = new OSMTile(tilePixmap, QPoint(x,y), z);

        placeTile(tile);
}
Esempio n. 3
0
void MapView::tileDownloaded(QNetworkReply *reply)
{
    //recreate original request from reply and delete it from the current requests

    QElapsedTimer timer; timer.start();


    TileRequest finishedRequest(reply);
    currentRequests.removeAll(finishedRequest);

    //check to see if any requests are left in stack
    if (!requestStack.isEmpty())
    {
        //pop the last request in the stack
        TileRequest request = requestStack.takeLast();

        //proceed to download the request
        networkManager->get(request);
        currentRequests.append(request);
    }
    QByteArray *data = new QByteArray(reply->readAll());
    QByteArray *cpData = new QByteArray(*data);

    qDebug("curreq"+QString::number(currentRequests.size())+
           " reqstck"+QString::number(requestStack.size()));

    //check if actual data was returned
    if (data->length()!=0) //todo: check if data is valid
    {

        //AddTileToDBThread* t = new AddTileToDBThread(finishedRequest.z(),finishedRequest.x(),finishedRequest.y(),cpData,finishedRequest.mapSource().url);
        //t->start();

        //the method below also checks presence of tile in db
        addTileToDB(finishedRequest.z(),finishedRequest.x(),finishedRequest.y(),data,finishedRequest.mapSource().url);
        //qDebug(qPrintable("Tile image file size:" + QString::number(data.length()) + " bits"
        //                           "(x:"+QString::number(x)+" y:"+QString::number(y)+" z:"+QString::number(z)+")"));
    }
    else emit noNetwork();

    qDebug("adding tile to db took "+QString::number(timer.elapsed())); timer.restart();

    //check if zoomlevel and map source did not change while downloading
    if( currentZoom == finishedRequest.z() && finishedRequest.mapSource().url == MapSource.url)
        placeTile(data, finishedRequest.x(), finishedRequest.y(), finishedRequest.z());

    qDebug("placing tile took "+QString::number(timer.elapsed()));

    reply->deleteLater(); //do not 'delete reply;'
}
void ShuffleTiles::update(float time)
{
    Tile *tileArray = (Tile*)_tiles;

    for (int i = 0; i < _gridSize.width; ++i)
    {
        for (int j = 0; j < _gridSize.height; ++j)
        {
            tileArray->position = Vec2((float)tileArray->delta.width, (float)tileArray->delta.height) * time;
            placeTile(Vec2(i, j), tileArray);
            ++tileArray;
        }
    }
}
Esempio n. 5
0
void CCShuffleTiles::update(float time)
{
    int i, j;

    Tile *tileArray = (Tile*)m_pTiles;

    for (i = 0; i < m_sGridSize.width; ++i)
    {
        for (j = 0; j < m_sGridSize.height; ++j)
        {
            tileArray->position = ccpMult(ccp((float)tileArray->delta.width, (float)tileArray->delta.height), time);
            placeTile(ccp(i, j), tileArray);
            ++tileArray;
        }
    }
}
void CCShuffleTiles::update(ccTime time)
{
    int i, j;

    Tile *tileArray = (Tile*)m_pTiles;

    for (i = 0; i < m_sGridSize.x; ++i)
    {
        for (j = 0; j < m_sGridSize.y; ++j)
        {
            tileArray->position = ccpMult(ccp((float)tileArray->delta.x, (float)tileArray->delta.y), time);
            placeTile(ccg(i, j), tileArray);
            ++tileArray;
        }
    }
}