2
// C++ Implementation: ImportExportSHP
7
// Author: cbro <cbro@semperpax.com>, (C) 2008
9
// Copyright: See COPYING file that comes with this distribution
15
#include "../ImportExport/ImportExportSHP.h"
17
#include "ogrsf_frmts.h"
21
bool parseContainer(QDomElement& e, MapLayer* aLayer);
23
ImportExportSHP::ImportExportSHP(MapDocument* doc)
29
ImportExportSHP::~ImportExportSHP()
33
// Specify the input as a QFile
34
bool ImportExportSHP::loadFile(QString filename)
41
bool ImportExportSHP::saveFile(QString filename)
48
bool ImportExportSHP::export_(const QVector<MapFeature *>& featList)
57
void parseGeometry(MapLayer* aLayer, OGRGeometry *poGeometry)
59
if ( wkbFlatten(poGeometry->getGeometryType()) == wkbPoint )
61
OGRPoint *poPoint = (OGRPoint *) poGeometry;
63
TrackPoint* N = new TrackPoint(Coord(angToInt(poPoint->getY()), angToInt(poPoint->getX())));
67
if ( wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon )
69
OGRPolygon *poPoly = (OGRPolygon *) poGeometry;
70
OGRLinearRing *poRing = poPoly->getExteriorRing();
73
if(int numNode = poRing->getNumPoints()) {
75
for(int i=0; i<numNode; i++) {
76
poRing->getPoint(i, &p);
77
TrackPoint* N = new TrackPoint(Coord(angToInt(p.getY()), angToInt(p.getX())));
85
if ( wkbFlatten(poGeometry->getGeometryType()) == wkbLineString )
87
OGRLineString *poLS = (OGRLineString *) poGeometry;
90
if(int numNode = poLS->getNumPoints()) {
92
for(int i=0; i<numNode; i++) {
93
poLS->getPoint(i, &p);
94
TrackPoint* N = new TrackPoint(Coord(angToInt(p.getY()), angToInt(p.getX())));
103
( wkbFlatten(poGeometry->getGeometryType()) == wkbMultiPolygon ) ||
104
( wkbFlatten(poGeometry->getGeometryType()) == wkbMultiLineString ) ||
105
( wkbFlatten(poGeometry->getGeometryType()) == wkbMultiPoint )
108
OGRGeometryCollection *poCol = (OGRGeometryCollection *) poGeometry;
110
if(int numCol = poCol->getNumGeometries()) {
111
for(int i=0; i<numCol; i++) {
112
parseGeometry(aLayer, poCol->getGeometryRef(i));
119
bool ImportExportSHP::import(MapLayer* aLayer)
125
poDS = OGRSFDriverRegistrar::Open( FileName.toUtf8().constData(), FALSE );
128
qDebug( "SHP Open failed.\n" );
134
//poLayer = poDS->GetLayerByName( "point" );
135
poLayer = poDS->GetLayer( 0 );
137
OGRFeature *poFeature;
139
poLayer->ResetReading();
140
while( (poFeature = poLayer->GetNextFeature()) != NULL )
142
//OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
145
//for( iField = 0; iField < poFDefn->GetFieldCount(); iField++ )
147
// OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn( iField );
149
// if( poFieldDefn->GetType() == OFTInteger )
150
// qDebug( "%d,", poFeature->GetFieldAsInteger( iField ) );
151
// else if( poFieldDefn->GetType() == OFTReal )
152
// qDebug( "%.3f,", poFeature->GetFieldAsDouble(iField) );
153
// else if( poFieldDefn->GetType() == OFTString )
154
// qDebug( "%s,", poFeature->GetFieldAsString(iField) );
156
// qDebug( "%s,", poFeature->GetFieldAsString(iField) );
159
OGRGeometry *poGeometry;
161
poGeometry = poFeature->GetGeometryRef();
162
if( poGeometry != NULL) {
163
// qDebug( "GeometryType : %d,", poGeometry->getGeometryType() );
165
parseGeometry(aLayer, poGeometry);
169
qDebug( "no geometry\n" );
172
OGRFeature::DestroyFeature( poFeature );
175
OGRDataSource::DestroyDataSource( poDS );