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"
GATDijkstraShortestPath = 1, GATKShortestPath, GATConnectedComponents
63} GNMGraphAlgorithmType;
65#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
127 virtual const char *GetName()
const;
164 GNMGraphAlgorithmType eAlgorithm,
271 GNMGFID nConFID = -1,
double dfCost = 1,
272 double dfInvCost = 1,
273 GNMDirection eDir = GNM_EDGE_DIR_BOTH);
306 GNMGFID nConFID,
double dfCost = 1,
307 double dfInvCost = 1,
308 GNMDirection eDir = GNM_EDGE_DIR_BOTH);
395 double dfTolerance,
double dfCost,
396 double dfInvCost, GNMDirection eDir);
417 GNMGraphAlgorithmType eAlgorithm,
451 size_t nFieldSize = 1024);
452 virtual CPLErr StoreNetworkSrs();
453 virtual CPLErr LoadNetworkSrs();
458 virtual CPLErr LoadGraph();
460 virtual CPLErr DeleteMetadataLayer() = 0;
461 virtual CPLErr DeleteGraphLayer() = 0;
462 virtual CPLErr DeleteFeaturesLayer() = 0;
463 virtual CPLErr LoadNetworkLayer(
const char *pszLayername) = 0;
464 virtual CPLErr DeleteNetworkLayers() = 0;
465 virtual void ConnectPointsByMultiline(
467 const std::vector<OGRLayer *> &paPointLayers,
double dfTolerance,
468 double dfCost,
double dfInvCost, GNMDirection eDir);
471 const std::vector<OGRLayer *> &paPointLayers,
472 double dfTolerance,
double dfCost,
double dfInvCost,
475 FindNearestPoint(
const OGRPoint *poPoint,
476 const std::vector<OGRLayer *> &paPointLayers,
478 virtual OGRFeature *FindConnection(GNMGFID nSrcFID, GNMGFID nTgtFID,
480 virtual bool SaveRules();
481 virtual GNMGFID GetNewVirtualFID();
483 const GNMPATH &path,
int nNoOfPath,
484 bool bReturnVertices,
bool bReturnEdges);
490 GNMGFID m_nVirtualConnectionGID = -1;
491 OGRLayer *m_poMetadataLayer =
nullptr;
493 OGRLayer *m_poFeaturesLayer =
nullptr;
497 std::map<GNMGFID, CPLString> m_moFeatureFIDMap{};
498 std::vector<OGRLayer *> m_apoLayers{};
499 std::vector<GNMRule> m_asRules;
500 bool m_bIsRulesChanged =
false;
503 bool m_bIsGraphLoaded =
false;
537 const char *
GetName()
const override;
541 int bExactMatch)
override;
548 bool bForce =
true)
override;
553 int bApproxOK = TRUE)
override;
557 int nFlagsIn)
override;
560 int bApproxOK = TRUE)
override;
581 GDALProgressFunc pfnProgress =
nullptr,
582 void *pProgressArg =
nullptr);
586 GDALProgressFunc pfnProgress =
nullptr,
587 void *pProgressArg =
nullptr);
591 GDALProgressFunc pfnProgress,
void *pProgressArg);
595 GDALProgressFunc pfnProgress =
nullptr,
596 void *pProgressArg =
nullptr);
600 GDALProgressFunc pfnProgress =
nullptr,
601 void *pProgressArg =
nullptr);
605 GDALProgressFunc pfnProgress =
nullptr,
606 void *pProgressArg =
nullptr);
610 GDALProgressFunc pfnProgress =
nullptr,
611 void *pProgressArg =
nullptr);
621 OGRErr InitializeIndexSupport(
const char *);
622 OGRLayerAttrIndex *GetIndex();
634 std::map<GNMGFID, GIntBig> m_mnFIDMap{};
GRTConnection = 0
716 operator const char *(void)
const;
720 virtual bool ParseRuleString();
726 bool m_bAllow =
false;
727 bool m_bValid =
false;
754 int bApproxOK = TRUE)
override;
756 int bApproxOK = TRUE)
override;
763 int nPathNo,
bool bIsEdge);
Convenient string class based on std::string.
Definition cpl_string.h:338
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:77
virtual const OGRSpatialReference * GetSpatialRef() const
Fetch the spatial reference for this dataset.
Definition gdaldataset.cpp:1374
virtual char ** GetFileList(void)
Fetch files forming dataset.
Definition gdaldataset.cpp:3690
Format specific driver.
Definition gdal_driver.h:63
Class for dataset open functions.
Definition gdal_openinfo.h:30
GNM layer which represents a geography network layer of generic format.
Definition gnm.h:517
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
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 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 Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Clip.
Definition gnmlayer.cpp:108
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
OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Update.
Definition gnmlayer.cpp:100
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
OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Intersection.
Definition gnmlayer.cpp:63
OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Erase.
Definition gnmlayer.cpp:116
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
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
OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg)
SymDifference.
Definition gnmlayer.cpp:81
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 Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Union.
Definition gnmlayer.cpp:73
OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, CSLConstList papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Identity.
Definition gnmlayer.cpp:91
GNM class which represents a geography network of generic format.
Definition gnm.h:206
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.
virtual OGRLayer * GetPath(GNMGFID nStartFID, GNMGFID nEndFID, GNMGraphAlgorithmType eAlgorithm, CSLConstList papszOptions) override
Create path between start and end GFIDs.
static GNMGenericNetwork * FromHandle(GNMGenericNetworkH hNet)
Casts a handle to a pointer.
Definition gnm.h:421
virtual CPLErr DeleteRule(const char *pszRuleStr)
Delete the specified rule.
virtual char ** GetRules() const
Get the rule list.
virtual OGRLayer * CopyLayer(OGRLayer *poSrcLayer, const char *pszNewName, CSLConstList papszOptions=nullptr) override
Duplicate an existing layer.
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 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:427
CPLErr DisconnectAll() override
DisconnectAll method clears the network graph.
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.
int GetVersion() const override
GetVersion return the network version if applicable.
virtual CPLErr CheckLayerDriver(const char *pszDefaultDriverName, CSLConstList papszOptions)
Check or create layer OGR driver.
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.
virtual CPLErr Create(const char *pszFilename, CSLConstList papszOptions) override=0
Create network system layers.
CPLErr Delete() override
Delete network.
The simple graph class, which holds the appropriate for calculations graph in memory (based on STL co...
Definition gnmgraph.h:89
General GNM class which represents a geography network of common format.
Definition gnm.h:74
virtual CPLErr Delete()=0
Delete network.
virtual CPLErr DisconnectAll()=0
DisconnectAll method clears the network graph.
virtual int CheckNetworkExist(const char *pszFilename, CSLConstList papszOptions)=0
Check if network already exist.
static GNMGenericNetworkH ToHandle(GNMNetwork *poNetwork)
Casts a pointer to a handle.
Definition gnm.h:174
static GNMNetwork * FromHandle(GNMGenericNetworkH hNet)
Casts a handle to a pointer.
Definition gnm.h:168
virtual int GetVersion() const
GetVersion return the network version if applicable.
Definition gnm.h:133
virtual OGRFeature * GetFeatureByGlobalFID(GNMGFID nGFID)=0
GetFeatureByGlobalFID search all network layers for given feature identificator.
virtual OGRLayer * GetPath(GNMGFID nStartFID, GNMGFID nEndFID, GNMGraphAlgorithmType eAlgorithm, CSLConstList papszOptions)=0
Create path between start and end GFIDs.
virtual CPLErr Create(const char *pszFilename, CSLConstList papszOptions)=0
Create network system layers.
virtual CPLErr Open(GDALOpenInfo *poOpenInfo)=0
Open a network.
The simple class for rules.
Definition gnm.h:656
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:521
A simple feature, including geometry and attributes.
Definition ogr_feature.h:1041
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:72
The OGRGNMWrappedResultLayer class for search paths queries results.
Definition gnm.h:740
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
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:335
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:1569
virtual OGRErr ISetFeature(OGRFeature *poFeature)
Rewrite/replace an existing feature.
Definition ogrlayer.cpp:1369
Concrete representation of a multi-vertex line.
Definition ogr_geometry.h:1739
A collection of OGRLineString.
Definition ogr_geometry.h:4076
Point class.
Definition ogr_geometry.h:1108
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 / error level.
Definition cpl_error.h:45
#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:1101
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1252
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:195
void * GNMGenericNetworkH
Opaque type for a GNMGenericNetwork.
Definition gdal_fwd.h:212
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:423
int OGRErr
Type for a OGR error.
Definition ogr_core.h:388
Classes related to registration of format support, and opening datasets.