API — QGis 2.4 C ++ helloWorld

В проекте, над которым я работаю (приложение C / C ++ / Qt), мы пытаемся интегрировать QGis (желательно последняя версия, 2.4 на данный момент). Но в Интернете очень мало информации о том, как использовать QGis C ++ API.

Для начала я хотел написать простой пример кода (читать шейп-файл и визуализировать его в окне). Я нашел пример кода для QGis 1.8, но он не работает с QGis 2.4, так как API изменился с тех пор. Затем я попытался отредактировать его, чтобы он работал с QGis 2.4, но безуспешно. Вот оригинальный код:

#include <QtCore/QString>
#include <QtGui/QApplication>

#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgssinglesymbolrenderer.h>
#include <qgsmaplayerregistry.h>
#include <qgsvectorlayer.h>
#include <qgsmapcanvas.h>

#include <iostream>

int main(int argc, char** argv)
{
// Creation of the Qt GIS application
QgsApplication app(argc, argv, true);

// Hard coded paths
QString myPluginsDir        = "/usr/lib64/qgis";
QString myLayerPath         = "./HelloWorld/GUI/data/helloQGIS.shp";
QString myLayerBaseName     = "helloQGIS";
QString myProviderName      = "ogr";

// Instantiate Provider Registry
QgsProviderRegistry::instance(myPluginsDir);

// Create a maplayer instance
QgsVectorLayer* mypLayer = new QgsVectorLayer(myLayerPath, myLayerBaseName, myProviderName);
QgsSingleSymbolRenderer* mypRenderer = new QgsSingleSymbolRenderer(mypLayer->geometryType());
QList <QgsMapCanvasLayer> myLayerSet;
mypLayer->setRenderer(mypRenderer);
if (mypLayer->isValid())
{
qDebug("Layer is valid");
}
else
{
qDebug("Layer is NOT valid");
}

// Add the Vector Layer to the Layer Registry
QList<QgsMapLayer*> theMapLayers;
theMapLayers.append(mypLayer);
QgsMapLayerRegistry::instance()->addMapLayers(theMapLayers, TRUE);

// Add the Layer to the Layer Set
myLayerSet.append(QgsMapCanvasLayer(mypLayer, TRUE));

// Create the Map Canvas
QgsMapCanvas * mypMapCanvas = new QgsMapCanvas(0, 0);
mypMapCanvas->setExtent(mypLayer->extent());
mypMapCanvas->enableAntiAliasing(true);
mypMapCanvas->setCanvasColor(QColor(255, 255, 255));
mypMapCanvas->freeze(false);
// Set the Map Canvas Layer Set
mypMapCanvas->setLayerSet(myLayerSet);
mypMapCanvas->setVisible(true);
mypMapCanvas->refresh();
mypMapCanvas->show();

// Start the Application Event Loop
return app.exec();
}

Я пробовал много разных способов изменить этот код, чтобы он работал с QGis 2.4, но безуспешно. Единственный источник информации, который я использовал, это официальный документ API.

Я сказал себе, что, возможно, кто-то уже сделал это и / или имеет какой-либо другой пример использования QGis 2.4. Поскольку ГИС для меня новый домен, у меня есть некоторые трудности с пониманием того, как должен работать API. Я ценю любую помощь, спасибо.

3

Решение

Лучше отправляйте вопросы по QGIS на https://gis.stackexchange.com/ Форум. Не уверен, если есть способ переместить этот вопрос.

0

Другие решения


По вопросам рекламы [email protected]