[gdal-dev] adding features to a layer/dataset...

Stephen Woodbridge stephenwoodbridge37 at gmail.com
Wed Jun 26 14:26:13 PDT 2019


To solve your problem, given the constraints the Even explained, you 
probably need to do something like:

* program that is writing to shapefile
    - creates a socket or pipe
    - open the file for exclusive access
    - after it updates the shapefile
    - close the file
    - writes to the socket a message like "updated"

* program that need to read the shapefile
    - opens socket or pipe created by first program
    - waits on read from socket for a message
    - on getting "updated" message
    - opens the shapefile for read
    - reads the data, then closes the file
    - processes the shape data
    - loops back to wait on read from socket

You also need a shared network filesystem that supports opening the 
shapefile exclusively for both read and write operations so the file is 
not overwritten while it is being accessed.

All that said, this is not really a GDAL issue, and you probably need to 
get advice from a network programming expert because there are issues 
like handling trying to open the file when its locked, stale locks, 
network failures, etc.


On 6/26/2019 4:00 PM, Even Rouault wrote:
> Shayne,
>> I have a vector GDALDataset that is shared between two applications running
>> on different machines. Both applications call GDALOpenEx(...) to open the
>> shapefile.shp with flags GDAL_OF_VECTOR and GDAL_OF_SHARED flags set to
>> open the dataset. The dataset only has one layer associated with it and the
>> shapefile format is the ESRI shapefile.
> GDAL_OF_SHARED is for sharing the same dataset handle in the same process, not
> for sharing datasets from several machines.
>> After opening the dataset in both applications, the first application
>> creates a new feature and adds it to the layer. The resulting shapefile on
>> disk shows that this is working when I inspect the contents of the
>> shapefile with ogrinfo -al shapefile.shp. The new feature has been added as
>> expected with a feature count = 1.
>> Is there a way to update the second application to get the changes to the
>> layer made by the first application? I've tried doing layer->SyncToDisk()
>> in the second application but this has no affect. Do I have to close the
>> layer/dataset and reopen it in the second application to get the changes
>> made by the first application?
> Yes, GDAL doesn't handle synchronization/concurrent edition of shapefiles (or
> any other file based formats), so if a file has been changed outside of GDAL,
> you have to close and reopen the dataset to be sure that GDAL sees the changes
> (sometimes you might see them, or some of them, while keeping the dataset
> open, but it would be too fragile to rely on that)
> Even

This email has been checked for viruses by Avast antivirus software.

More information about the gdal-dev mailing list