[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