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
[email protected]
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: [email protected]
http://www.t-kartor.com
_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev