pihmLIBS/generateShape.cpp

Go to the documentation of this file.
00001 #include <iostream>
00002 
00003 #include "generateShape.h"
00004 #include "shapefil.h"
00005 
00006 using namespace std;
00007 
00008 void generateShape(QString shpFileName, double *avgVal, int NUM_FEATURES, int TYPE, const char *fStr)
00009 {
00010         int runFlag = 1;
00011         
00012         QString dbfFileName(shpFileName);
00013         dbfFileName.truncate(dbfFileName.length()-3);
00014         dbfFileName.append("dbf");
00015 
00016         SHPHandle shp = SHPOpen(qPrintable(shpFileName), "rb");
00017         DBFHandle dbf = DBFOpen(qPrintable(dbfFileName), "rb");
00018         SHPObject *obj;
00019 
00020         int SHP_TYPE[1], Entities[1];
00021         SHPGetInfo(shp, Entities, SHP_TYPE, NULL, NULL);
00022 
00023         SHPHandle newshp = SHPCreate("tempShape.shp", SHP_TYPE[0]);
00024         DBFHandle newdbf = DBFCreate("tempShape.dbf"); 
00025         
00026         if(NUM_FEATURES != *Entities){
00027                 qWarning("Number of Features doesnot match that in the shape file\n");
00028                 runFlag = 0;
00029         }
00030 
00031         if(runFlag == 1){
00032                 double *x, *y, *z;
00033                 x = (double *)malloc(TYPE*sizeof(double));
00034                 y = (double *)malloc(TYPE*sizeof(double));
00035                 z = (double *)malloc(TYPE*sizeof(double));
00036                 cout<<fStr<<"\n";
00037                 int valFld = DBFAddField(newdbf, fStr, FTDouble,  10, 8);
00038                 int idFld  = DBFAddField(newdbf, "ID", FTInteger, 10, 0);
00039 
00040                 for(int i=0; i<NUM_FEATURES; i++){
00041                         obj = SHPReadObject(shp, i);
00042                         SHPWriteObject(newshp, -1, obj);
00043 
00044                         DBFWriteIntegerAttribute(newdbf, i, idFld, i+1);
00045                         DBFWriteDoubleAttribute(newdbf, i, valFld, avgVal[i]);
00046                 }
00047         }
00048         SHPClose(shp); SHPClose(newshp);
00049         DBFClose(dbf); DBFClose(newdbf);
00050 }

Generated on Sun Aug 5 17:33:59 2007 for PIHMgis by  doxygen 1.5.2