Dear all,

Included is a patch for s57reader.cpp that properly applies updates for
certain types of charts.

The essence of this patch is that SG2D field may not be present in
original record, and must be added if update is trying to insert SG2D
fields.

The patch was made against our modified version of OGR, so line numbers
likely do not match and certain function signatures may need to be
updated. If you'd like to apply it - make sure it goes in the
S57Reader::ApplyRecordUpdate.

Best,
--
Mike


Index: s57reader.cpp
===================================================================
--- s57reader.cpp       (revision 0000)
+++ s57reader.cpp       (working copy)
@@ -2635,16 +2635,30 @@
         /* If we don't have SG2D, check for SG3D */
         if( poDstSG2D == NULL )
         {
-            poSrcSG2D = poUpdate->FindField("SG3D");
             poDstSG2D = poTarget->FindField("SG3D");
+            if (poDstSG2D != NULL) {
+               poSrcSG2D = poUpdate->FindField("SG3D");
+            }
         }
 
-        if( (poSrcSG2D == NULL && nCCUI != 2) || poDstSG2D == NULL )
+        if( (poSrcSG2D == NULL && nCCUI != 2) || (poDstSG2D == NULL && nCCUI 
!= 1) )
         {
             CPLAssert( FALSE );
             return FALSE;
         }
 
+        if (poDstSG2D == NULL) {
+          poTarget->AddField(poTarget->GetModule()->FindFieldDefn("SG2D"));
+          poDstSG2D = poTarget->FindField("SG2D");
+          if (poDstSG2D == NULL) {
+            CPLAssert( FALSE );
+            return FALSE;
+          }
+
+          // Delete null default data that was created
+          poTarget->SetFieldRaw( poDstSG2D, 0, NULL, 0 );
+        }
+
         nCoordSize = poDstSG2D->GetFieldDefn()->GetFixedWidth();
 
         if( nCCUI == 1 ) /* INSERT */
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to