void OsmNominatimRunner::search( const QString &searchTerm, const GeoDataLatLonBox &preferred )
{    
    QString base = "http://nominatim.openstreetmap.org/search?";
    QString query = "q=%1&format=xml&addressdetails=1&accept-language=%2";
    QString url = QString(base + query).arg(searchTerm).arg(MarbleLocale::languageCode());
    if( !preferred.isEmpty() ) {
        GeoDataCoordinates::Unit deg = GeoDataCoordinates::Degree;
        QString viewbox( "&viewbox=%1,%2,%3,%4&bounded=1" ); // left, top, right, bottom
        url += viewbox.arg(preferred.west(deg))
                      .arg(preferred.north(deg))
                      .arg(preferred.east(deg))
                      .arg(preferred.south(deg));

    }
    m_request.setUrl(QUrl(url));
    m_request.setRawHeader("User-Agent", TinyWebBrowser::userAgent("Browser", "OsmNominatimRunner") );

    QEventLoop eventLoop;

    QTimer timer;
    timer.setSingleShot( true );
    timer.setInterval( 15000 );

    connect( &timer, SIGNAL(timeout()),
             &eventLoop, SLOT(quit()));
    connect( this, SIGNAL(searchFinished(QVector<GeoDataPlacemark*>)),
             &eventLoop, SLOT(quit()) );

    // @todo FIXME Must currently be done in the main thread, see bug 257376
    QTimer::singleShot( 0, this, SLOT(startSearch()) );
    timer.start();

    eventLoop.exec();
}
Beispiel #2
0
void SVG::renderToTexture(const QRectF& textureRect, QGLFramebufferObjectPtr targetFbo)
{
    saveGLState();

    // generate and set view box in logical coordinates
    QRectF viewbox(svgExtents_.x() + textureRect.x() * svgExtents_.width(),
                   svgExtents_.y() + textureRect.y() * svgExtents_.height(),
                   textureRect.width() * svgExtents_.width(),
                   textureRect.height() * svgExtents_.height());
    svgRenderer_.setViewBox(viewbox);

    // Multisampled FBO for anti-aliased rendering
    QGLFramebufferObjectFormat format;
    format.setAttachment(QGLFramebufferObject::CombinedDepthStencil);
    format.setSamples(MULTI_SAMPLE_ANTI_ALIASING_SAMPLES);

    QGLFramebufferObjectPtr renderFbo( new QGLFramebufferObject( targetFbo->size(), format ));

    // Render to multisampled FBO
    QPainter painter(renderFbo.get());
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
    svgRenderer_.render(&painter);
    painter.end();

    // Copy to texture FBO
    QGLFramebufferObject::blitFramebuffer(
            targetFbo.get(), QRect(0, 0, renderFbo->width(), renderFbo->height()),
            renderFbo.get(), QRect(0, 0, renderFbo->width(), renderFbo->height()));

    glBindTexture(GL_TEXTURE_2D, targetFbo->texture());
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    restoreGLState();
}
Beispiel #3
0
void MainWindow::documentExport(void)
{
    Canvas *currCanvas = canvas();
    QString currFilename = currCanvas->filename();
    currFilename.chop(4);
    if (currFilename.isEmpty())
    {
        // Determine the working directory.
        QSettings settings;
        QString workingDir(QDir::homePath());
        QVariant workingDirSetting =
                settings.value("workingDirectory");
        if (workingDirSetting.isValid())
        {
            workingDir = workingDirSetting.toString();
        }

        currFilename = workingDir + "/untitled";
    }
    QString filename = QFileDialog::getSaveFileName(this, tr("Export Diagram"),
            currFilename, tr("SVG (*.svg);;PDF (*.pdf);;Postscript (*.ps)"));
    if (filename.isEmpty())
    {
        return;
    }

    QRectF pageRect = currCanvas->pageRect();
    if (pageRect.size().isEmpty())
    {
        // There is no page set, so use a page equal to diagram bounds
        double padding = 10;
        pageRect = expandRect(diagramBoundingRect(currCanvas->items()), padding);
    }

    QFileInfo file(filename);
    if (file.suffix() == "svg")
    {
        QSvgGenerator generator;
        generator.setFileName(filename);

        QRectF targetRect(QPointF(0, 0), currCanvas->sceneRect().size());

        QPointF topLeft = pageRect.topLeft() -
                currCanvas->sceneRect().topLeft();
        QRectF viewbox(topLeft, pageRect.size());

        generator.setSize(viewbox.size().toSize());
        generator.setViewBox(viewbox);

        generator.setTitle(QFileInfo(filename).fileName());
        generator.setDescription(tr("This file was exported from Dunnart.  "
                                    "http://www.dunnart.org/"));

        QPainter painter;
        if (painter.begin(&generator))
        {
            painter.setRenderHint(QPainter::Antialiasing);
            currCanvas->setRenderingForPrinting(true);
            currCanvas->render(&painter, targetRect,
                    currCanvas->sceneRect(),
                    Qt::IgnoreAspectRatio);
            currCanvas->setRenderingForPrinting(false);

            painter.end();
        }
        else
        {
            qDebug("Export SVG painter failed to begin.");
        }
    }
    else
    {
        // Use QPrinter for PDF and PS.
        QPrinter printer;
        printer.setOutputFileName(filename);
        printer.setPaperSize(pageRect.size(),
                QPrinter::Millimeter);
        QPainter painter;
        if (painter.begin(&printer))
        {
            painter.setRenderHint(QPainter::Antialiasing);
            currCanvas->setRenderingForPrinting(true);
            currCanvas->render(&painter, QRectF(),
                    expandRect(pageRect, -3),
                    Qt::IgnoreAspectRatio);
            currCanvas->setRenderingForPrinting(false);
        }
        else
        {
            qDebug("Export PDF/PS painter failed to begin.");
        }
    }
}