Thanks Even for the details. 

Sorry, the FID is correctly populated (with an autogenerated FID values 
starting from 1). However the unique ID of the feature is exported in a 
separate attribute field, and it is in this field that all values are present 
in the FileGDB except for the record with -21121:

FID UniqueId
1      -21119
2     -21120
3     NULL (this should be -21121)
...

Looks like this could be a MapServer rather than GDAL issue so I'll debug 
further,

Seth

--
web:https://geographika.net & https://mapserverstudio.net
twitter: @geographika

On Tue, Aug 27, 2024, at 10:03 PM, Even Rouault wrote:
> Seth,
>
> I'm not totally sure to understand the exact scenario. -21121 is a 
> special value for OGRField, which is a distinct concept that the Feature 
> ID, and normally it shouldn't prevent setting Integer64 fields to the 
> value as this canary is set in 2 fields of OGRField.
>
> from osgeo import ogr
> layer_defn = ogr.FeatureDefn("test")
> layer_defn.AddField(ogr.FieldDefn("i64", ogr.OFTInteger64))
>   layer_defn.AddFieldDefn(ogr.FieldDefn("i64", ogr.OFTInteger64))
> f = ogr.Feature(layer_defn)
> f["i64"] = -21121
> f.DumpReadable()
> OGRFeature(test):-1
>    i64 (Integer64) = -21121
>
> But what is sure is that the OpenFileGDB driver will error out if you 
> pass to CreateFeature() a feature with a FID < -1,  = 0 or > INT32_MAX,  
> since the FileGDB format only supports FID in the range [1, INT32_MAX], 
> and -1 is the OGRNullFID special constant to indicate that you let the 
> driver automatically assign a FID.
>
> With GeoJSON, you would likely have an issue with features of FID = -1 
> which would get assign a FID by the driver. Basically most formats will 
> struggle with negative or null FIDs
>
> What is perhaps missing in MapServer is a FORMATOPTION "SET_FID=FALSE" 
> for drivers such as FileGDB  (or "FID_VALID_MIN" and "FIX_VALID_MAX" ?)  
> to limit the scope of calls to OGR_F_SetFID() by MapServer.
>
> Even
>
>
> Le 27/08/2024 à 21:32, Seth G via gdal-dev a écrit :
>> Hi all,
>>
>> I'm using a GDAL within MapServer to export features as a FileGDB. Using the 
>> following OUTPUTFORMAT:
>>
>>      OUTPUTFORMAT
>>          NAME "FileGDB"
>>          DRIVER "OGR/OpenFileGDB"
>>          MIMETYPE "application/x-ogc­filegdb"
>>          FORMATOPTION "STORAGE=filesystem"
>>          FORMATOPTION "FORM=zip"
>>          FORMATOPTION "FILENAME=result.gdb.zip"
>>          FORMATOPTION "LCO:FID=FID"
>>      END
>>
>> I ran into an issue where a single feature Id is being set to NULL. After 
>> checking various database queries and configs it looks like the issue is 
>> when a feature id is -21121 and data exported to a FileGDB. When using 
>> GeoJSON the Id is returned correctly.
>>
>> I searched in the GDAL codebase and found that this is a "magic" number: 
>> https://github.com/search?q=repo%3AOSGeo%2Fgdal%20-21121&type=code
>>
>> #define OGRUnsetMarker -21121
>>
>> Is there any way round this other than using different Ids?
>>
>> Thanks,
>>
>> Seth
>>
>>
>>
>> --
>> web:https://geographika.net & https://mapserverstudio.net
>> twitter: @geographika
>> _______________________________________________
>> gdal-dev mailing list
>> gdal-dev@lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/gdal-dev
>
> -- 
> http://www.spatialys.com
> My software is free, but my time generally not.
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to