[gdal-dev] how to store a shapefile afterobtaining from intersection of two different shapeFiles

Chaitanya kumar CH chaitanya.ch at gmail.com
Fri Jun 8 06:07:20 PDT 2012


Siva,

You can create a new shapefile layer using the poGeometry2 objects. Set
each of them to a feature object and add them to the layer.
Refer to the OGR API Tutorial.
http://www.gdal.org/ogr/ogr_apitut.html

On Fri, Jun 8, 2012 at 11:38 AM, SIVA RAMA KRISHNA
<s.r.kriishna at gmail.com>wrote:

> mywindow::mywindow(QWidget *parent) :    QMainWindow(parent){        view=new QGraphicsView(this);    view->repaint();    scene=new QGraphicsScene();    OGRRegisterAll();    scaleFactor=0.01;    //poDS = OGRSFDriverRegistrar::Open( "admin.shp");    //poLayer = poDS->GetLayerByName( "admin");    poDS = OGRSFDriverRegistrar::Open( "india_st.shp");    poLayer = poDS->*GetLayerByName*( "india_st");    poDS1=OGRSFDriverRegistrar::Open("india_ds.shx");    poLayer1=poDS1->*GetLayerByName*("india_ds");    poLayer->*ResetReading*();    poLayer1->*ResetReading*();    view->setRenderHint(QPainter::Antialiasing);    while(((poFeature=poLayer->*GetNextFeature*())!=NULL) && ((poFeature1=poLayer1->*GetNextFeature*())!=NULL))    {        poGeometry=poFeature->GetGeometryRef();        poGeometry1=poFeature1->GetGeometryRef();        OGREnvelope * psEnvelope1 = new OGREnvelope();        OGREnvelope * psEnvelope2 = new OGREnvelope();        poGeometry->*getEnvelope*(psEnvelope1);        poGeometry1->*getEnvelope*(psEnvelope2);        qDebug() << psEnvelope1->MinX << psEnvelope1->MinY <<  psEnvelope1->MaxX << psEnvelope1->MaxY;        qDebug() << psEnvelope2->MinX << psEnvelope2->MinY <<  psEnvelope2->MaxX << psEnvelope2->MaxY;        if (this->Intersects1(poGeometry,poGeometry1)==1)        {            QPainter painter2;            poGeometry2=poGeometry->*Intersection*(poGeometry1);            if(poGeometry2 !=NULL                    && wkbFlatten(poGeometry2->*getGeometryType*()) == wkbPolygon)            {                qDebug()<<"1yes";                polyShape2 = (OGRPolygon*) poGeometry2;                drawPolyShape(painter2,polyShape2,MBR,scaleFactor);            }        }        this->setCentralWidget(view);    }//end of while loop    QString filename3,projString;    filename3="india_st_out.shp";    OGRwkbGeometryType type;    ShapeFileWriter( filename3,type, projString);}//end of main
> OGRBoolean mywindow::Intersects1(OGRGeometry *poGeom,  OGRGeometry *poOtherGeom ) const{   // this is for obtaining a region for interscetion}
> void mywindow::drawPolyShape(QPainter& painter,OGRPolygon* polyShape,const QRectF& MBR, const double& scaleFactor){        // for drawing a shape file
> }
> void mywindow::drawClosedLinearRing(QPainterPath& painter,OGRLinearRing* linearRing,                                    const QRectF& MBR, const double& scaleFactor){              // for drawing a  shape  file
> }
> void mywindow::ShapeFileWriter(QString filename,OGRwkbGeometryType type,QString projString)// program to write to shape file     {        QFileInfo info(filename);        QString baseFileName = info.absolutePath(); //+ QDir::separator();        baseFileName += info.baseName();            QFile fileshx(baseFileName + ".shx");        QFile fileshp(baseFileName + ".shp");        QFile filedbf(baseFileName + ".dbf");        QFile fileprj(baseFileName + ".prj");        if(fileshp.exists())        {            fileshp.remove();        }        if(fileshx.exists())        {            fileshx.remove();        }        if(filedbf.exists())        {            filedbf.remove();        }        if(fileprj.exists())        {            fileprj.remove();        }        QString fileName = filename;        QStringList list;        const char *pszDriverName = "ESRI Shapefile";        OGRSFDriver *poDriver;        OGRRegisterAll();        poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(                pszDriverName );        if( poDriver == NULL )        {            return;        }        poDS = poDriver->*CreateDataSource*(filename.toLatin1().data(), NULL );        if( poDS == NULL )        {            return;        }        filename.truncate(fileName.length()-4);        poLayer = poDS->*CreateLayer*(filename.toLatin1().data(), NULL, type, NULL);        if( poLayer == NULL )        {            return;        }        if(!projString.isEmpty() && !projString.isNull())        {            filename = filename + ".prj";            QFile data(filename);            if (data.*open*(QFile::WriteOnly | QFile::Truncate))            {                 QTextStream out(&data);                 out<<projString<<"\n";                 list.append(projString);            }            data.*close*();        }
>         int rec;//      rec=identifyRecord(psEnvelope3->MinX,psEnvelope3->MinY,psEnvelope3->MaxX );        int x;        x=addRecord(poGeometry2,list);        int y;        y=getNumofRecords();        qDebug()<<y;    }int mywindow::addRecord(OGRGeometry* geometry,QStringList list)    {        int fID;        OGRFeature *poFeature;        poFeature = OGRFeature::CreateFeature( poLayer->*GetLayerDefn*() );        poFeature->SetField( "ID", (int)poFeature->GetFID());        poFeature->SetGeometry( geometry );        for(int i = 0; i < list.size(); i++)        {            qDebug()<<"ADDED";            poFeature->SetField( i, list.at(i).toDouble());        }        if( poLayer->*CreateFeature*( poFeature ) != OGRERR_NONE )        {            return -1;        }        fID = (int)poFeature->GetFID();        OGRFeature::DestroyFeature( poFeature );        return fID;   }
>
>
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>



-- 
Best regards,
Chaitanya kumar CH.

+91-9494447584
17.2416N 80.1426E
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20120608/2031726d/attachment-0001.html>


More information about the gdal-dev mailing list