Hi Even,

On Fri, 21 Apr 2017, Even Rouault wrote:

Hi Roger,

See https://github.com/edzer/sfr/issues/309 - < 2.2.0 we could write
"missing values" in vector drivers and read them back. In 2.2.0beta1, we
see REAL "missing values" written out OK, but read back as numeric zero.

Did you check the output with ogrinfo/GDAL 2.2 to verify that they are indeed 
properly
written as missing ?

We've only checked shapefiles and GPKG so far.

Is this RFC 67?

Most likely

Until now, rgdal code (and likely sf) has used:

       case OFTReal:
        if (poFeature->IsFieldSet(iField))
           REAL(ans)[iRow]=poFeature->GetFieldAsDouble(iField);
        else REAL(ans)[iRow]=NA_REAL;
        break;

and the same for other field and list field types. Should we be using:

int    CPL_DLL OGR_F_IsFieldSetAndNotNull( OGRFeatureH, int );

Yes


and should we be writing:

void   CPL_DLL OGR_F_SetFieldNull( OGRFeatureH, int );

instead of leaving the field unset with for example:

              if (!ISNA(NUMERIC_POINTER(VECTOR_ELT(ldata, j))[i]))
                  poFeature->SetField( CHAR(STRING_ELT(fld_names, j)),
                      NUMERIC_POINTER(VECTOR_ELT(ldata, j))[i] );

that is jumping over features for which the field value coming from R is
missing?

Leaving the field unset or setting it to Null with OGR_F_SetFieldNull() will have the same effect for most drivers. For example the shapefile driver uses IsFieldSetAndNotNull() internally on the write side, so both should result in the same result. The difference between unset and setting to null will only be seen for JSon-based drivers or GML.

Have commited code changes for rgdal which now work the same for 2.2.0beta1 and 2.1.3 both for files generated by GDAL version, and crossed (read 2.2.0beta1-generated files on 2.1.3 and vice-versa). Edzer made the changes a week ago in sf.



We'd need to condition on GDAL version here (too), I guess.

Was this regression intended?

There are indeed a few backward incompatible changes (that you've mentionned above) per https://trac.osgeo.org/gdal/wiki/rfc67_nullfieldvalues that require user code changes.

Not a regression as far as I can now see, just a consequence of the "backward incompatible changes" that will affect many downstream users of many drivers, I guess.

Thanks for getting back so quickly,

Roger


Besides those intended changes, it is not impossible of course there's a real regression in GDAL itself, but ideally you should try to isolate it from the Rgdal code, possibly through a standalone C code or a GDAL Python script, so it can be more easily investigated (unfortunately, I couldn't really make sense of the ticket you mentionned due to my unfamiliarity with rgdal or sf). I'd also start by making sure where the issue is really: on the read side, or the write side. For example by producing a shapefile/GPKG with rgdal/GDAL 2.1.3 and reading it with rgdal/GDAL 2.2, and the reverse.

Best regards,

Even



--
Roger Bivand
Department of Economics, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: roger.biv...@nhh.no
Editor-in-Chief of The R Journal, https://journal.r-project.org/index.html
http://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to