[gdal-dev] adding features to a layer/dataset...
Andreas Oxenstierna
ao at t-kartor.se
Wed Jun 26 23:03:57 PDT 2019
or use a transactional database which handles all of these aspects (and
several more) for you
> Shayne,
>
> 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.
>
> -Steve
>
> 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.
> https://www.avast.com/antivirus
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev
--
Hälsningar
Andreas Oxenstierna
T-Kartor Geospatial AB
Olof Mohlins väg 12 Kristianstad
mobile: +46 733 206831
mailto: ao at t-kartor.se
http://www.t-kartor.com
More information about the gdal-dev
mailing list