linesandpoints.cpp

This application demonstrates how to use Geometry objects and how to add them to a layer.

Here are used three different point types:

Also there is a keylistener.

You can find this example here: MapAPI/Samples/LinesAndPoints

sample_linesandpoints.png

screenshot

#include "linesandpoints.h"
LinesAndPoints::LinesAndPoints(QWidget *parent)
        : QWidget(parent)
{
        // the size which the QMapControl should fill
        QSize size = QSize(480,640);
        
        mc = new MapControl(size);
        // create layout
        QHBoxLayout* layout = new QHBoxLayout;
        layout->addWidget(mc);
        setLayout(layout);
        
        // create layer
        MapAdapter* mapadapter = new OSMMapAdapter();
        Layer* l = new MapLayer("Custom Layer", mapadapter);
        
        mc->addLayer(l);
        
        // create a LineString
        QList<Point*> points;
        // Points with image
        points.append(new ImagePoint(8.259959, 50.001781, "images/bus_stop.png", "Mainz, Hauptbahnhof", Point::BottomLeft));
        points.append(new ImagePoint(8.263758, 49.998917, "images/bus_stop.png", "Mainz, Münsterplatz", Point::BottomLeft));
        points.append(new ImagePoint(8.265812, 50.001952, "images/bus_stop.png","Mainz, Neubrunnenplatz", Point::BottomLeft));
        // Points with a circle
        points.append(new CirclePoint(8.2688, 50.004015, "Mainz, Bauhofstraße LRP", Point::Middle));
        points.append(new CirclePoint(8.272845, 50.00495, "Mainz, Landtag", Point::Middle));
        points.append(new CirclePoint(8.280349, 50.008173, "Mainz, Brückenkopf", Point::Middle));
        // A QPen can be used to customize the 
        QPen* pointpen = new QPen(QColor(0,255,0));
        pointpen->setWidth(3);
        points.append(new CirclePoint(8.273573, 50.016315, 15, "Wiesbaden-Mainz-Kastel, Eleonorenstraße", Point::Middle, pointpen));
        points.append(new CirclePoint(8.275145, 50.016992, 15, "Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße", Point::Middle, pointpen));
        points.append(new CirclePoint(8.270476, 50.021426, 15, "Wiesbaden-Mainz-Kastel, Ruthof", Point::Middle, pointpen));
        // "Blind" Points
        points.append(new Point(8.266445, 50.025913, "Wiesbaden-Mainz-Kastel, Mudra Kaserne"));
        points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"));

        // A QPen also can use transparency
        QPen* linepen = new QPen(QColor(0, 0, 255, 100));
        linepen->setWidth(5);
        // Add the Points and the QPen to a LineString 
        LineString* ls = new LineString(points, "Busline 54", linepen);
        
        // Add the LineString to the layer
        l->addGeometry(ls);
        
        // Connect click events of the layer to this object
        connect(l, SIGNAL(geometryClicked(Geometry*, QPoint)),
                          this, SLOT(geometryClicked(Geometry*, QPoint)));
        
        // Sets the view to the interesting area
        QList<QPointF> view;
        view.append(QPointF(8.24764, 50.0319));
        view.append(QPointF(8.28412, 49.9998));
        mc->setView(view);
        
        addZoomButtons();
}

void LinesAndPoints::addZoomButtons()
{
        // create buttons as controls for zoom
        QPushButton* zoomin = new QPushButton("+");
        QPushButton* zoomout = new QPushButton("-");
        zoomin->setMaximumWidth(50);
        zoomout->setMaximumWidth(50);
        
        connect(zoomin, SIGNAL(clicked(bool)),
                          mc, SLOT(zoomIn()));
        connect(zoomout, SIGNAL(clicked(bool)),
                          mc, SLOT(zoomOut()));
        
        // add zoom buttons to the layout of the MapControl
        QVBoxLayout* innerlayout = new QVBoxLayout;
        innerlayout->addWidget(zoomin);
        innerlayout->addWidget(zoomout);
        mc->setLayout(innerlayout);
}

void LinesAndPoints::geometryClicked(Geometry* geom, QPoint)
{
        qDebug() << "parent: " << geom->parentGeometry();
        qDebug() << "Element clicked: " << geom->name();
        if (geom->hasClickedPoints())
        {
                QList<Geometry*> pp = geom->clickedPoints();
                qDebug() << "number of child elements: " << pp.size();
                for (int i=0; i<pp.size(); i++)
                {
                        QMessageBox::information(this, geom->name(), pp.at(i)->name());
                }
        }
        else if (geom->GeometryType == "Point")
        {
                QMessageBox::information(this, geom->name(), "just a point");
        }
}

LinesAndPoints::~LinesAndPoints()
{
}

void LinesAndPoints::keyPressEvent(QKeyEvent* evnt)
{
        if (evnt->key() == 49 || evnt->key() == 17825792)  // tastatur '1'
        {
                mc->zoomIn();
        }
        else if (evnt->key() == 50)
        {
                mc->moveTo(QPointF(8.25, 60));
        }
        else if (evnt->key() == 51 || evnt->key() == 16777313)     // tastatur '3'
        {
                mc->zoomOut();
        }
        else if (evnt->key() == 54) // 6
        {
                mc->setView(QPointF(8,50));
        }
        else if (evnt->key() == 16777234) // left
        {
                mc->scrollLeft();
        }
        else if (evnt->key() == 16777236) // right
        {
                mc->scrollRight();
        }
        else if (evnt->key() == 16777235 ) // up
        {
                mc->scrollUp();
        }
        else if (evnt->key() == 16777237) // down
        {
                mc->scrollDown();
        }
        else if (evnt->key() == 48 || evnt->key() == 17825797) // 0
        {
                emit(close());
        }
        else
        {
                qDebug() << evnt->key() << endl;
        }
}

Generated on Wed Jul 29 12:38:09 2009 for QMapControl by  doxygen 1.5.9