[pktools] 369/375: debug pkextract: first SetGeometry, then SetFrom

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:54:31 UTC 2014


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch upstream-master
in repository pktools.

commit 90587086463689508cebed76c80cec3cee65bb63
Author: Pieter Kempeneers <kempenep at gmail.com>
Date:   Sat Nov 29 23:31:42 2014 +0100

    debug pkextract: first SetGeometry, then SetFrom
---
 ChangeLog             |  3 ++-
 src/apps/pkextract.cc | 22 +++++++++++++---------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d73fa64..e79f273 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -328,7 +328,8 @@ version 2.6.1
  - pkfilter
 	Declare nodata option as double (see ticket #43500)
 	Support nodata values for filtering in spectral/temporal domain (see ticket #43713)
-
+ - pkextract
+	debug: Order of SetGeometry must be before SetFrom caused bad vector features (First SetGeometry, then SetFrom)
 Todo:
  - todo for API
 	ImgReaderGdal (ImgWriterGdal) open in update mode (check gdal_edit.py: http://searchcode.com/codesearch/view/18938404)
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index 8ec5bd6..d5686c4 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -1025,9 +1025,9 @@ int main(int argc, char *argv[])
 		      writePointFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());
 		    if(verbose_opt[0]>1)
 		      std::cout << "copying fields from polygons " << std::endl;
+		    writePointFeature->SetGeometry(&thePoint);
 		    if(writePointFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		      cerr << "writing feature failed" << std::endl;
-		    writePointFeature->SetGeometry(&thePoint);
 		    OGRGeometry *updateGeometry;
 		    updateGeometry = writePointFeature->GetGeometryRef();
 		    OGRPoint *poPoint = (OGRPoint *) updateGeometry;
@@ -1112,9 +1112,9 @@ int main(int argc, char *argv[])
 		// writePolygon.addRing(&writeRing);//already done
 		// writePolygon.closeRings();//already done
 		//write geometry of writePolygon
+		writePolygonFeature->SetGeometry(&writePolygon);
 		if(writePolygonFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		  cerr << "writing feature failed" << std::endl;
-		writePolygonFeature->SetGeometry(&writePolygon);
 		if(verbose_opt[0]>1)
 		  std::cout << "copying new fields write polygon " << std::endl;
 		if(verbose_opt[0]>1)
@@ -1125,9 +1125,9 @@ int main(int argc, char *argv[])
 		//create feature
 		if(verbose_opt[0]>1)
 		  std::cout << "copying fields from polygons " << std::endl;
+		writeCentroidFeature->SetGeometry(&writeCentroidPoint);
 		if(writeCentroidFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		  cerr << "writing feature failed" << std::endl;
-		writeCentroidFeature->SetGeometry(&writeCentroidPoint);
 		OGRGeometry *updateGeometry;
 		updateGeometry = writeCentroidFeature->GetGeometryRef();
 		assert(wkbFlatten(updateGeometry->getGeometryType()) == wkbPoint );
@@ -1475,6 +1475,8 @@ int main(int argc, char *argv[])
 		  validFeature=true;
 
 		writeRing.addPoint(&thePoint);//todo: check if I need to add all interior points to ring or do I need to check if point is on ring first?
+		// if(writeRing.isPointOnRingBoundary(&thePoint))
+		//    writeRing.addPoint(&thePoint);
 		if(verbose_opt[0]>1)
 		  std::cout << "point is on surface:" << thePoint.getX() << "," << thePoint.getY() << std::endl;
 		++nPointPolygon;
@@ -1493,9 +1495,9 @@ int main(int argc, char *argv[])
 		      writePointFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());
 		    if(verbose_opt[0]>1)
 		      std::cout << "copying fields from polygons " << std::endl;
+		    writePointFeature->SetGeometry(&thePoint);
 		    if(writePointFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		      cerr << "writing feature failed" << std::endl;
-		    writePointFeature->SetGeometry(&thePoint);
 		    OGRGeometry *updateGeometry;
 		    updateGeometry = writePointFeature->GetGeometryRef();
 		    OGRPoint *poPoint = (OGRPoint *) updateGeometry;
@@ -1579,9 +1581,9 @@ int main(int argc, char *argv[])
 		writePolygon.addRing(&writeRing);
 		writePolygon.closeRings();
 		//write geometry of writePolygon
+		writePolygonFeature->SetGeometry(&writePolygon);
 		if(writePolygonFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		  cerr << "writing feature failed" << std::endl;
-		writePolygonFeature->SetGeometry(&writePolygon);
 		if(verbose_opt[0]>1)
 		  std::cout << "copying new fields write polygon " << std::endl;
 		if(verbose_opt[0]>1)
@@ -1592,9 +1594,9 @@ int main(int argc, char *argv[])
 		//create feature
 		if(verbose_opt[0]>1)
 		  std::cout << "copying fields from polygons " << std::endl;
+		writeCentroidFeature->SetGeometry(&writeCentroidPoint);
 		if(writeCentroidFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		  cerr << "writing feature failed" << std::endl;
-		writeCentroidFeature->SetGeometry(&writeCentroidPoint);
 		OGRGeometry *updateGeometry;
 		updateGeometry = writeCentroidFeature->GetGeometryRef();
 		assert(wkbFlatten(updateGeometry->getGeometryType()) == wkbPoint );
@@ -1931,6 +1933,8 @@ int main(int argc, char *argv[])
 		  validFeature=true;
 		
 		writeRing.addPoint(&thePoint);
+		// if(writeRing.isPointOnRingBoundary(&thePoint))
+		//    writeRing.addPoint(&thePoint);
 		if(verbose_opt[0]>1)
 		    std::cout << "point is on surface:" << thePoint.getX() << "," << thePoint.getY() << std::endl;
 		  ++nPointPolygon;
@@ -1949,9 +1953,9 @@ int main(int argc, char *argv[])
 			writePointFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());
 		      if(verbose_opt[0]>1)
 			std::cout << "copying fields from polygons " << std::endl;
+		      writePointFeature->SetGeometry(&thePoint);
 		      if(writePointFeature->SetFrom(readFeature)!= OGRERR_NONE)
 			cerr << "writing feature failed" << std::endl;
-		      writePointFeature->SetGeometry(&thePoint);
 		      OGRGeometry *updateGeometry;
 		      updateGeometry = writePointFeature->GetGeometryRef();
 		      OGRPoint *poPoint = (OGRPoint *) updateGeometry;
@@ -2048,9 +2052,9 @@ int main(int argc, char *argv[])
 		writePolygon.addRing(&writeRing);
 		writePolygon.closeRings();
 		//write geometry of writePolygon
+		writePolygonFeature->SetGeometry(&writePolygon);
 		if(writePolygonFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		  cerr << "writing feature failed" << std::endl;
-		writePolygonFeature->SetGeometry(&writePolygon);
 		if(verbose_opt[0]>1)
 		  std::cout << "copying new fields write polygon " << std::endl;
 		if(verbose_opt[0]>1)
@@ -2061,9 +2065,9 @@ int main(int argc, char *argv[])
 		//create feature
 		if(verbose_opt[0]>1)
 		  std::cout << "copying fields from polygons " << std::endl;
+		writeCentroidFeature->SetGeometry(&writeCentroidPoint);
 		if(writeCentroidFeature->SetFrom(readFeature)!= OGRERR_NONE)
 		  cerr << "writing feature failed" << std::endl;
-		writeCentroidFeature->SetGeometry(&writeCentroidPoint);
 		OGRGeometry *updateGeometry;
 		updateGeometry = writeCentroidFeature->GetGeometryRef();
 		assert(wkbFlatten(updateGeometry->getGeometryType()) == wkbPoint );

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git



More information about the Pkg-grass-devel mailing list