34#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
40typedef int GNMDirection;
44#define GNM_MD_NAME "net_name"
45#define GNM_MD_DESCR "net_description"
46#define GNM_MD_SRS "net_srs"
47#define GNM_MD_VERSION "net_version"
48#define GNM_MD_RULE "net_rule"
49#define GNM_MD_FORMAT "FORMAT"
50#define GNM_MD_FETCHEDGES "fetch_edge"
51#define GNM_MD_FETCHVERTEX "fetch_vertex"
52#define GNM_MD_NUM_PATHS "num_paths"
53#define GNM_MD_EMITTER "emitter"
59{ GATDijkstraShortestPath = 1, GATKShortestPath, GATConnectedComponents
63} GNMGraphAlgorithmType;
65#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
77 ~GNMNetwork()
override;
105 virtual CPLErr Create(
const char *pszFilename,
char **papszOptions) = 0;
126 virtual const char *
GetName()
const;
163 GNMGraphAlgorithmType eAlgorithm,
164 char **papszOptions) = 0;
169 return static_cast<GNMNetwork *
>(hNet);
186 char **papszOptions) = 0;
204class CPL_DLL GNMGenericNetwork :
public GNMNetwork
208 ~GNMGenericNetwork()
override;
219 char **papszOptions =
nullptr)
override;
227 char **papszOptions)
override = 0;
270 GNMGFID nConFID = -1,
double dfCost = 1,
271 double dfInvCost = 1,
272 GNMDirection eDir = GNM_EDGE_DIR_BOTH);
305 GNMGFID nConFID,
double dfCost = 1,
306 double dfInvCost = 1,
307 GNMDirection eDir = GNM_EDGE_DIR_BOTH);
394 double dfTolerance,
double dfCost,
395 double dfInvCost, GNMDirection eDir);
416 GNMGraphAlgorithmType eAlgorithm,
417 char **papszOptions)
override;
422 return static_cast<GNMGenericNetwork *
>(hNet);
439 char **papszOptions);
450 size_t nFieldSize = 1024);
451 virtual CPLErr StoreNetworkSrs();
452 virtual CPLErr LoadNetworkSrs();
457 virtual CPLErr LoadGraph();
459 virtual CPLErr DeleteMetadataLayer() = 0;
460 virtual CPLErr DeleteGraphLayer() = 0;
461 virtual CPLErr DeleteFeaturesLayer() = 0;
462 virtual CPLErr LoadNetworkLayer(
const char *pszLayername) = 0;
463 virtual CPLErr DeleteNetworkLayers() = 0;
464 virtual void ConnectPointsByMultiline(
466 const std::vector<OGRLayer *> &paPointLayers,
double dfTolerance,
467 double dfCost,
double dfInvCost, GNMDirection eDir);
470 const std::vector<OGRLayer *> &paPointLayers,
471 double dfTolerance,
double dfCost,
double dfInvCost,
474 FindNearestPoint(
const OGRPoint *poPoint,
475 const std::vector<OGRLayer *> &paPointLayers,
477 virtual OGRFeature *FindConnection(GNMGFID nSrcFID, GNMGFID nTgtFID,
479 virtual bool SaveRules();
480 virtual GNMGFID GetNewVirtualFID();
482 const GNMPATH &path,
int nNoOfPath,
483 bool bReturnVertices,
bool bReturnEdges);
489 GNMGFID m_nVirtualConnectionGID = -1;
490 OGRLayer *m_poMetadataLayer =
nullptr;
492 OGRLayer *m_poFeaturesLayer =
nullptr;
494 GDALDriver *m_poLayerDriver =
nullptr;
496 std::map<GNMGFID, CPLString> m_moFeatureFIDMap{};
497 std::vector<OGRLayer *> m_apoLayers{};
498 std::vector<GNMRule> m_asRules;
499 bool m_bIsRulesChanged =
false;
502 bool m_bIsGraphLoaded =
false;
536 const char *
GetName()
const override;
540 int bExactMatch)
override;
547 bool bForce =
true)
override;
552 int bApproxOK = TRUE)
override;
556 int nFlagsIn)
override;
559 int bApproxOK = TRUE)
override;
579 char **papszOptions =
nullptr,
580 GDALProgressFunc pfnProgress =
nullptr,
581 void *pProgressArg =
nullptr);
583 OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
584 char **papszOptions =
nullptr,
585 GDALProgressFunc pfnProgress =
nullptr,
586 void *pProgressArg =
nullptr);
589 char **papszOptions, GDALProgressFunc pfnProgress,
593 char **papszOptions =
nullptr,
594 GDALProgressFunc pfnProgress =
nullptr,
595 void *pProgressArg =
nullptr);
597 OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
598 char **papszOptions =
nullptr,
599 GDALProgressFunc pfnProgress =
nullptr,
600 void *pProgressArg =
nullptr);
602 OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
603 char **papszOptions =
nullptr,
604 GDALProgressFunc pfnProgress =
nullptr,
605 void *pProgressArg =
nullptr);
607 OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
608 char **papszOptions =
nullptr,
609 GDALProgressFunc pfnProgress =
nullptr,
610 void *pProgressArg =
nullptr);
620 OGRErr InitializeIndexSupport(
const char *);
621 OGRLayerAttrIndex *GetIndex();
633 std::map<GNMGFID, GIntBig> m_mnFIDMap{};
715 operator const char *(void)
const;
719 virtual bool ParseRuleString();
724 CPLString m_soConnLayerName{};
725 bool m_bAllow =
false;
726 bool m_bValid =
false;
728 CPLString m_soRuleString{};
753 int bApproxOK = TRUE)
override;
755 int bApproxOK = TRUE)
override;
762 int nPathNo,
bool bIsEdge);
771 OGRLayer *poLayer =
nullptr;
Convenient string class based on std::string.
Definition cpl_string.h:320
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:76
virtual const OGRSpatialReference * GetSpatialRef() const
Fetch the spatial reference for this dataset.
Definition gdaldataset.cpp:1251
virtual char ** GetFileList(void)
Fetch files forming dataset.
Definition gdaldataset.cpp:3562
Class for dataset open functions.
Definition gdal_openinfo.h:28
const OGRSpatialReference * GetSpatialRef() const override
Fetch the spatial reference system for this layer.
Definition gnmlayer.cpp:254
OGRErr ReorderFields(int *panMap) override
Reorder all the fields of a layer.
Definition gnmlayer.cpp:289
~GNMGenericLayer() override
~GNMGenericLayer
void SetStyleTable(OGRStyleTable *poStyleTable) override
Set layer style table.
Definition gnmlayer.cpp:325
int TestCapability(const char *) const override
Test if this layer supported the named capability.
Definition gnmlayer.cpp:270
const char * GetGeometryColumn() const override
This method returns the name of the underlying database column being used as the geometry column,...
Definition gnmlayer.cpp:53
OGRErr SyncToDisk() override
Flush pending changes to disk.
Definition gnmlayer.cpp:310
OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Union.
Definition gnmlayer.cpp:73
virtual int FindFieldIndex(const char *pszFieldName, int bExactMatch) override
Find the index of field in the layer.
Definition gnmlayer.cpp:249
GIntBig GetFeatureCount(int bForce=TRUE) override
Fetch the feature count in this layer.
Definition gnmlayer.cpp:259
void ResetReading() override
Reset feature reading to start on the first feature.
Definition gnmlayer.cpp:193
OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Clip.
Definition gnmlayer.cpp:108
OGRErr RollbackTransaction() override
For datasources which support transactions, RollbackTransaction will roll back a datasource to its st...
Definition gnmlayer.cpp:340
OGRwkbGeometryType GetGeomType() const override
Return the layer geometry type.
Definition gnmlayer.cpp:244
OGRStyleTable * GetStyleTable() override
Returns layer style table.
Definition gnmlayer.cpp:315
virtual OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, bool bForce=true) override
Fetch the extent of this layer, on the specified geometry field.
Definition gnmlayer.cpp:264
OGRErr SetNextByIndex(GIntBig nIndex) override
Move read cursor to the nIndex'th feature in the current resultset.
Definition gnmlayer.cpp:209
virtual OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, int nFlagsIn) override
Alter the definition of an existing field on a layer.
Definition gnmlayer.cpp:294
OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Update.
Definition gnmlayer.cpp:100
OGRErr DeleteField(int iField) override
Delete an existing field on a layer.
Definition gnmlayer.cpp:280
virtual OGRErr CreateGeomField(const OGRGeomFieldDefn *poField, int bApproxOK=TRUE) override
Create a new geometry field on a layer.
Definition gnmlayer.cpp:304
OGRErr SetIgnoredFields(CSLConstList papszFields) override
Set which fields can be omitted when retrieving features from the layer.
Definition gnmlayer.cpp:58
const char * GetName() const override
Return the layer name.
Definition gnmlayer.cpp:239
OGRFeature * GetNextFeature() override
Fetch the next available feature from this layer.
Definition gnmlayer.cpp:198
OGRErr CommitTransaction() override
For datasources which support transactions, CommitTransaction commits a transaction.
Definition gnmlayer.cpp:335
GIntBig GetFeaturesRead()
GetFeaturesRead.
Definition gnmlayer.cpp:124
const OGRFeatureDefn * GetLayerDefn() const override
Fetch the schema information for this layer.
Definition gnmlayer.cpp:345
OGRErr StartTransaction() override
For datasources which support transactions, StartTransaction creates a transaction.
Definition gnmlayer.cpp:330
OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Intersection.
Definition gnmlayer.cpp:63
const char * GetFIDColumn() const override
This method returns the name of the underlying database column being used as the FID column,...
Definition gnmlayer.cpp:48
OGRErr SetAttributeFilter(const char *) override
Set a new attribute query.
Definition gnmlayer.cpp:188
virtual OGRErr CreateField(const OGRFieldDefn *poField, int bApproxOK=TRUE) override
Create a new field on a layer.
Definition gnmlayer.cpp:275
OGRGeometry * GetSpatialFilter() override
This method returns the current spatial filter for this layer.
Definition gnmlayer.cpp:177
virtual OGRErr ISetSpatialFilter(int iGeomField, const OGRGeometry *) override
Set a new spatial filter.
Definition gnmlayer.cpp:182
int AttributeFilterEvaluationNeedsGeometry()
AttributeFilterEvaluationNeedsGeometry.
Definition gnmlayer.cpp:129
void SetStyleTableDirectly(OGRStyleTable *poStyleTable) override
Set layer style table.
Definition gnmlayer.cpp:320
OGRErr DeleteFeature(GIntBig nFID) override
Delete feature from layer.
Definition gnmlayer.cpp:214
OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg)
SymDifference.
Definition gnmlayer.cpp:81
GNMGenericLayer(OGRLayer *poLayer, GNMGenericNetwork *poNetwork)
GNMGenericLayer.
Definition gnmlayer.cpp:36
OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Identity.
Definition gnmlayer.cpp:91
OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Erase.
Definition gnmlayer.cpp:116
GNM class which represents a geography network of generic format.
Definition gnm.h:205
int TestCapability(const char *) const override
Test if capability is available.
virtual CPLErr AddFeatureGlobalFID(GNMGFID nFID, const char *pszLayerName)
AddFeatureGlobalFID add the FID <-> Layer name link to fast access features by global FID.
static GNMGenericNetwork * FromHandle(GNMGenericNetworkH hNet)
Casts a handle to a pointer.
Definition gnm.h:420
virtual CPLErr DeleteRule(const char *pszRuleStr)
Delete the specified rule.
virtual char ** GetRules() const
Get the rule list.
virtual CPLErr CheckLayerDriver(const char *pszDefaultDriverName, char **papszOptions)
Check or create layer OGR driver.
OGRFeature * GetFeatureByGlobalFID(GNMGFID nFID) override
GetFeatureByGlobalFID search all network layers for given feature identificator.
virtual CPLErr DeleteAllRules()
Delete all rules from network.
OGRErr DeleteLayer(int) override
Delete the indicated layer from the datasource.
virtual CPLErr ReconnectFeatures(GNMGFID nSrcFID, GNMGFID nTgtFID, GNMGFID nConFID, double dfCost=1, double dfInvCost=1, GNMDirection eDir=GNM_EDGE_DIR_BOTH)
Change connection attributes.
virtual CPLString GetAlgorithmName(GNMDirection eAlgorithm, bool bShortName)
Get the algorithm name.
OGRLayer * GetLayer(int) const override
Fetch a layer by index.
virtual CPLErr ConnectFeatures(GNMGFID nSrcFID, GNMGFID nTgtFID, GNMGFID nConFID=-1, double dfCost=1, double dfInvCost=1, GNMDirection eDir=GNM_EDGE_DIR_BOTH)
Connects two features via third feature (may be virtual, so the identificator should be -1).
virtual CPLErr DisconnectFeaturesWithId(GNMGFID nFID)
Find the corresponding identificator in graph (source, target, connector) and remove such connections...
int GetLayerCount() const override
Get the number of layers in this dataset.
virtual CPLErr ChangeAllBlockState(bool bIsBlock=false)
Change all vertices and edges block state.
virtual CPLErr DisconnectFeatures(GNMGFID nSrcFID, GNMGFID nTgtFID, GNMGFID nConFID)
Remove features connection.
virtual CPLErr Create(const char *pszFilename, char **papszOptions) override=0
Create network system layers.
virtual bool CheckStorageDriverSupport(const char *pszDriverName)=0
Check if provided OGR driver accepted as storage for network data.
static GNMGenericNetworkH ToHandle(GNMGenericNetwork *poNetwork)
Casts a pointer to a handle.
Definition gnm.h:426
CPLErr DisconnectAll() override
DisconnectAll method clears the network graph.
virtual OGRLayer * CopyLayer(OGRLayer *poSrcLayer, const char *pszNewName, char **papszOptions=nullptr) override
Duplicate an existing layer.
CPLErr FlushCache(bool bAtClosing) override
Flush all write cached data to disk.
virtual GNMGFID GetNewGlobalFID()
GetNewGlobalFID increase the global ID counter.
virtual CPLErr CreateRule(const char *pszRuleStr)
Create network rule.
virtual OGRLayer * GetPath(GNMGFID nStartFID, GNMGFID nEndFID, GNMGraphAlgorithmType eAlgorithm, char **papszOptions) override
Create path between start and end GFIDs.
int GetVersion() const override
GetVersion return the network version if applicable.
virtual CPLErr ConnectPointsByLines(char **papszLayerList, double dfTolerance, double dfCost, double dfInvCost, GNMDirection eDir)
Attempts to build the network topology automatically.
int CloseDependentDatasets() override
Drop references to any other datasets referenced by this dataset.
virtual CPLErr ChangeBlockState(GNMGFID nFID, bool bIsBlock)
Change the block state of edge or vertex.
CPLErr Delete() override
Delete network.
virtual const char * GetName() const
GetName - a network name.
Definition gnmnetwork.cpp:42
virtual CPLErr Delete()=0
Delete network.
virtual CPLErr DisconnectAll()=0
DisconnectAll method clears the network graph.
static GNMGenericNetworkH ToHandle(GNMNetwork *poNetwork)
Casts a pointer to a handle.
Definition gnm.h:173
static GNMNetwork * FromHandle(GNMGenericNetworkH hNet)
Casts a handle to a pointer.
Definition gnm.h:167
virtual OGRLayer * GetPath(GNMGFID nStartFID, GNMGFID nEndFID, GNMGraphAlgorithmType eAlgorithm, char **papszOptions)=0
Create path between start and end GFIDs.
virtual int GetVersion() const
GetVersion return the network version if applicable.
Definition gnm.h:132
virtual OGRFeature * GetFeatureByGlobalFID(GNMGFID nGFID)=0
GetFeatureByGlobalFID search all network layers for given feature identificator.
virtual CPLErr Open(GDALOpenInfo *poOpenInfo)=0
Open a network.
virtual CPLErr Create(const char *pszFilename, char **papszOptions)=0
Create network system layers.
virtual int CheckNetworkExist(const char *pszFilename, char **papszOptions)=0
Check if network already exist.
The simple class for rules.
Definition gnm.h:655
virtual CPLString GetTargetLayerName() const
Return target layer name.
virtual bool IsAcceptAny() const
Indicator of any layer state.
virtual bool CanConnect(const CPLString &soSrcLayerName, const CPLString &soTgtLayerName, const CPLString &soConnLayerName="")
Check if connection can take place.
GNMRule(const char *pszRule)
Constructor.
GNMRule(GNMRule &&)=default
Move constructor.
const char * c_str() const
Return rule as a string.
virtual CPLString GetConnectorLayerName() const
Return connector layer name.
GNMRule(const GNMRule &)=default
Copy constructor.
virtual CPLString GetSourceLayerName() const
Return source layer name.
GNMRule & operator=(const GNMRule &)=default
Assignment operator.
GNMRule(const std::string &oRule)
Constructor.
GNMRule & operator=(GNMRule &&)=default
Move assignment operator.
virtual bool IsValid() const
This function indicate if rule string was parsed successfully.
virtual ~GNMRule()
Destructor.
virtual GNMRuleType GetType() const
This is for future use to indicate the rule type/ Now return only GRTConnection type.
Simple container for a bounding region (rectangle).
Definition ogr_core.h:44
Definition of a feature class or feature layer.
Definition ogr_feature.h:504
A simple feature, including geometry and attributes.
Definition ogr_feature.h:934
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:69
The OGRGNMWrappedResultLayer class for search paths queries results.
Definition gnm.h:739
OGRErr InsertFeature(OGRFeature *poFeature, const CPLString &soLayerName, int nPathNo, bool bIsEdge)
Undocumented.
Definition gnmresultlayer.cpp:125
OGRErr SetNextByIndex(GIntBig nIndex) override
Move read cursor to the nIndex'th feature in the current resultset.
Definition gnmresultlayer.cpp:71
OGRErr ICreateFeature(OGRFeature *poFeature) override
Create and write a new feature within a layer.
Definition gnmresultlayer.cpp:204
OGRErr ISetFeature(OGRFeature *poFeature) override
Rewrite/replace an existing feature.
Definition gnmresultlayer.cpp:199
virtual OGRErr CreateGeomField(const OGRGeomFieldDefn *poField, int bApproxOK=TRUE) override
Create a new geometry field on a layer.
Definition gnmresultlayer.cpp:103
virtual OGRErr CreateField(const OGRFieldDefn *poField, int bApproxOK=TRUE) override
Create a new field on a layer.
Definition gnmresultlayer.cpp:96
OGRFeature * GetNextFeature() override
Fetch the next available feature from this layer.
Definition gnmresultlayer.cpp:66
const char * GetFIDColumn() const override
This method returns the name of the underlying database column being used as the FID column,...
Definition gnmresultlayer.cpp:109
int TestCapability(const char *pszCap) const override
Test if this layer supported the named capability.
Definition gnmresultlayer.cpp:91
OGRFeature * GetFeature(GIntBig nFID) override
Fetch a feature by its identifier.
Definition gnmresultlayer.cpp:76
const OGRFeatureDefn * GetLayerDefn() const override
Fetch the schema information for this layer.
Definition gnmresultlayer.cpp:81
GIntBig GetFeatureCount(int bForce=TRUE) override
Fetch the feature count in this layer.
Definition gnmresultlayer.cpp:86
const OGRSpatialReference * GetSpatialRef() const override
Fetch the spatial reference system for this layer.
Definition gnmresultlayer.cpp:119
const char * GetGeometryColumn() const override
This method returns the name of the underlying database column being used as the geometry column,...
Definition gnmresultlayer.cpp:114
void ResetReading() override
Reset feature reading to start on the first feature.
Definition gnmresultlayer.cpp:61
OGRGNMWrappedResultLayer(GDALDataset *poDS, OGRLayer *poLayer)
Constructor.
Definition gnmresultlayer.cpp:34
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:332
Abstract base class for all geometry classes.
Definition ogr_geometry.h:357
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:61
virtual OGRErr ICreateFeature(OGRFeature *poFeature)
Create and write a new feature within a layer.
Definition ogrlayer.cpp:1462
virtual OGRErr ISetFeature(OGRFeature *poFeature)
Rewrite/replace an existing feature.
Definition ogrlayer.cpp:1343
Concrete representation of a multi-vertex line.
Definition ogr_geometry.h:1726
A collection of OGRLineString.
Definition ogr_geometry.h:4062
Point class.
Definition ogr_geometry.h:1095
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:152
This class represents a style table.
Definition ogr_featurestyle.h:69
CPLErr
Error category.
Definition cpl_error.h:37
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:936
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1087
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:205
void * GNMGenericNetworkH
Opaque type for a GNMGenericNetwork.
Definition gdal_fwd.h:212
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:405
int OGRErr
Type for a OGR error.
Definition ogr_core.h:370
Classes related to registration of format support, and opening datasets.