Jean-Yves Didier

ajout du bridge arcs/ogr/gdal

#include "coordconverter.h"
#include <iostream>
/*
QMap<QString, QString> CoordConverter::knownGeogCS = {
{"Lambert1", "EPSG:27561"},
{"Lambert2", "EPSG:27562"},
{"Lambert3", "EPSG:27563"},
{"Lambert4", "EPSG:27564"},
{"Lambert1C", "EPSG:27571"},
{"Lambert2C", "EPSG:27572"},
{"Lambert3C", "EPSG:27573"},
{"Lambert4C", "EPSG:27574"} };
*/
CoordConverter::CoordConverter(QObject* parent) : QObject(parent)
{
poCT = NULL;
geogCSChanged = false;
setInputGeogCS("WGS84");
setOutputGeogCS("EPSG:27572"); //Lambert2");
}
CoordConverter::~CoordConverter()
{
if (poCT != NULL)
delete poCT;
}
void CoordConverter::setGeogCS(QString s, OGRSpatialReference & osr)
{
OGRErr error ;
if (s.startsWith("EPSG:"))
{
int epsg = (s.mid(5)).toInt();
error = osr.importFromEPSG(epsg);
}
else
{
error = osr.SetWellKnownGeogCS(qPrintable(s)) ;
}
if ( error == OGRERR_FAILURE)
{
std::cerr << "[CCvt] Error on setting well known geogCS " << qPrintable(s) << std::endl;
return ;
}
geogCSChanged = true;
}
void CoordConverter::checkGeogCS()
{
if (geogCSChanged)
{
if (poCT != NULL)
delete poCT;
poCT = OGRCreateCoordinateTransformation( &oSourceSRS,&oTargetSRS );
geogCSChanged = false;
}
}
void CoordConverter::setCoordinates(double x, double y, double z)
{
checkGeogCS();
if (poCT == NULL)
{
std::cerr << "[CCvt] Error : cannot convert data" << std::endl;
return ;
}
poCT->Transform(1, &x,&y,&z);
emit sendCoordinates(x,y,z);
}
void CoordConverter::setCoordinates(double x, double y)
{
checkGeogCS();
if (poCT == NULL)
{
std::cerr << "[CCvt] Error : cannot convert data" << std::endl;
return ;
}
poCT->Transform(1, &x,&y);
emit sendCoordinates(x,y);
}
#ifndef __COORDCONVERTER_H__
#define __COORDCONVERTER_H__
#include <QObject>
#include <QMap>
#include <ogr_spatialref.h>
class CoordConverter : public QObject
{
Q_OBJECT
public:
CoordConverter(QObject* parent=0);
~CoordConverter();
public slots:
void setInputGeogCS(QString s) { setGeogCS(s, oSourceSRS); }
void setOutputGeogCS(QString s){ setGeogCS(s, oTargetSRS); }
void setCoordinates(double x, double y);
void setCoordinates(double x, double y, double z);
signals:
void sendCoordinates(double x, double y, double z);
void sendCoordinates(double x, double y);
private:
void setGeogCS(QString s, OGRSpatialReference & osr);
void checkGeogCS();
OGRSpatialReference oSourceSRS, oTargetSRS;
OGRCoordinateTransformation *poCT;
bool geogCSChanged;
// static QMap<QString, QString> knownGeogCS;
};
#endif
arcs1to2, a porting tool from ARCS1 to ARCS2
<library>
<headers>
<header name="coordconverter.h"/>
</headers>
<components>
<component name="CoordConverter"/>
</components>
</library>
<library>
<headers>
<header name="coordconverter.h"/>
</headers>
<components>
<component name="CoordConverter"/>
</components>
</library>
# Project modified by ARCS1to2
unix: TEMPLATE = lib # A commenter pour test unitaire
#unix: TEMPLATE = app # A dcommenter pour test unitaire
win32: TEMPLATE = vclib
TARGET = arcsogr
HEADERS = coordconverter.h
# HEADERS+= testogr.h # A dcommenter pour test unitaire
SOURCES = coordconverter.cpp
# SOURCES+= testogr.cpp # A dcommenter pour test unitaire
SOURCES+=
MOC_DIR = ./moc
OBJECTS_DIR = ./obj
CONFIG += qt thread debug
unix {
INCLUDEPATH+=/usr/local/include
LIBS+= -L/usr/local/lib -lgdal
}
win32 {
INCLUDEPATH+=$$(ARCSDIR)/include
CONFIG += dll exceptions
DEFINES+= _CRT_SECURE_NO_DEPRECATE
}
DESTDIR = ../libs # A commenter pour test unitaire
DLLDESTDIR = ../libs # A commenter pour test unitaire
#The following line was inserted by qt3to4
#QT += qt3support
ALXFILE = libogr.alx
OTHER_FILES += libogr.alx
arcslibrary.output = alm_${QMAKE_FILE_BASE}.cpp
arcslibrary.input = ALXFILE
arcslibrary.commands = arcslibmaker ${QMAKE_FILE_NAME}
arcslibrary.variable_out = SOURCES
QMAKE_EXTRA_COMPILERS += arcslibrary
INCLUDEPATH += $$(ARCSDIR)/include
LIBS += -L$$(ARCSDIR)/lib -larcs
CONFIG += dll
#include "coordconverter.h"
#include "testogr.h"
#include <qobject.h>
#include <iostream>
#include <gdal.h>
int main()
{
GDALAllRegister();
TestOGR* togr = new TestOGR();
CoordConverter* ccvt = new CoordConverter();
QObject::connect(ccvt,SIGNAL(sendCoordinates(double,double,double)),
togr, SLOT(displayCoordinates(double,double,double)));
ccvt->setCoordinates(2.6666, 48.75, 0.0);
return 0;
}
#include <qobject.h>
#include <iostream>
class TestOGR : public QObject
{
Q_OBJECT
public:
TestOGR(QObject* parent=0) : QObject(parent){}
public slots:
void displayCoordinates(double x, double y)
{
std::cout << "Result (x,y,z): " << x << ", " << y << std::endl;
}
void displayCoordinates(double x, double y, double z)
{
std::cout << "Result (x,y,z): " << x << ", " << y << ", " << z << std::endl;
}
};