35 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
41 typedef int GNMDirection;
45 #define GNM_MD_NAME "net_name"
46 #define GNM_MD_DESCR "net_description"
47 #define GNM_MD_SRS "net_srs"
48 #define GNM_MD_VERSION "net_version"
49 #define GNM_MD_RULE "net_rule"
50 #define GNM_MD_FORMAT "FORMAT"
51 #define GNM_MD_FETCHEDGES "fetch_edge"
52 #define GNM_MD_FETCHVERTEX "fetch_vertex"
53 #define GNM_MD_NUM_PATHS "num_paths"
54 #define GNM_MD_EMITTER "emitter"
60 { GATDijkstraShortestPath = 1, GATKShortestPath, GATConnectedComponents
64 } GNMGraphAlgorithmType;
66 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
82 return GetSpatialRefFromOldGetProjectionRef();
108 virtual CPLErr Create(
const char* pszFilename,
char** papszOptions ) = 0;
129 virtual const char* GetName()
const;
163 GNMGraphAlgorithmType eAlgorithm,
char** papszOptions) = 0;
172 char** papszOptions ) = 0;
175 const char *_GetProjectionRef(
void)
override;
209 const char *pszNewName,
210 char **papszOptions =
nullptr )
override;
217 virtual CPLErr Create(
const char* pszFilename,
char** papszOptions )
override = 0;
259 GNMGFID nConFID = -1,
261 double dfInvCost = 1,
262 GNMDirection eDir = GNM_EDGE_DIR_BOTH);
299 double dfInvCost = 1,
300 GNMDirection eDir = GNM_EDGE_DIR_BOTH);
410 GNMGraphAlgorithmType eAlgorithm,
char** papszOptions)
override;
419 char** papszOptions);
429 size_t nFieldSize = 1024 );
430 virtual CPLErr StoreNetworkSrs();
431 virtual CPLErr LoadNetworkSrs();
436 virtual CPLErr LoadGraph();
438 virtual CPLErr DeleteMetadataLayer() = 0;
439 virtual CPLErr DeleteGraphLayer() = 0;
440 virtual CPLErr DeleteFeaturesLayer() = 0;
441 virtual CPLErr LoadNetworkLayer(
const char* pszLayername) = 0;
442 virtual CPLErr DeleteNetworkLayers() = 0;
443 virtual void ConnectPointsByMultiline(
GIntBig nFID,
445 const std::vector<OGRLayer *> &paPointLayers,
446 double dfTolerance,
double dfCost,
447 double dfInvCost, GNMDirection eDir);
448 virtual void ConnectPointsByLine(
GIntBig nFID,
450 const std::vector<OGRLayer *> &paPointLayers,
451 double dfTolerance,
double dfCost,
452 double dfInvCost, GNMDirection eDir);
453 virtual GNMGFID FindNearestPoint(
const OGRPoint* poPoint,
454 const std::vector<OGRLayer*>& paPointLayers,
456 virtual OGRFeature* FindConnection(GNMGFID nSrcFID, GNMGFID nTgtFID,
458 virtual void SaveRules();
459 virtual GNMGFID GetNewVirtualFID();
461 const GNMPATH &path,
int nNoOfPath,
462 bool bReturnVertices,
bool bReturnEdges);
468 GNMGFID m_nVirtualConnectionGID;
475 std::map<GNMGFID, CPLString> m_moFeatureFIDMap;
476 std::vector<OGRLayer*> m_apoLayers;
477 std::vector<GNMRule> m_asRules;
478 bool m_bIsRulesChanged;
481 bool m_bIsGraphLoaded;
503 double dfMaxX,
double dfMaxY )
override;
507 double dfMinX,
double dfMinY,
508 double dfMaxX,
double dfMaxY )
override;
518 virtual const char *
GetName()
override;
521 virtual int FindFieldIndex(
const char *pszFieldName,
int bExactMatch )
override;
528 int bForce = TRUE)
override;
533 int bApproxOK = TRUE )
override;
537 int nFlagsIn )
override;
540 int bApproxOK = TRUE )
override;
561 char** papszOptions =
nullptr,
562 GDALProgressFunc pfnProgress =
nullptr,
563 void * pProgressArg =
nullptr );
567 char** papszOptions =
nullptr,
568 GDALProgressFunc pfnProgress =
nullptr,
569 void * pProgressArg =
nullptr );
574 GDALProgressFunc pfnProgress,
575 void * pProgressArg );
579 char** papszOptions =
nullptr,
580 GDALProgressFunc pfnProgress =
nullptr,
581 void * pProgressArg =
nullptr );
585 char** papszOptions =
nullptr,
586 GDALProgressFunc pfnProgress =
nullptr,
587 void * pProgressArg =
nullptr );
591 char** papszOptions =
nullptr,
592 GDALProgressFunc pfnProgress =
nullptr,
593 void * pProgressArg =
nullptr );
597 char** papszOptions =
nullptr,
598 GDALProgressFunc pfnProgress =
nullptr,
599 void * pProgressArg =
nullptr );
609 OGRErr InitializeIndexSupport(
const char * );
610 OGRLayerAttrIndex *GetIndex();
622 std::map<GNMGFID, GIntBig> m_mnFIDMap;
696 operator const char* (void)
const;
699 virtual bool ParseRuleString();
704 bool m_bAllow =
false;
705 bool m_bValid =
false;
733 int bApproxOK = TRUE )
override;
740 const CPLString &soLayerName,
int nPathNo,
Convenient string class based on std::string.
Definition: cpl_string.h:320
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:340
virtual char ** GetFileList(void)
Fetch files forming dataset.
Definition: gdaldataset.cpp:3026
Format specific driver.
Definition: gdal_priv.h:1525
Class for dataset open functions.
Definition: gdal_priv.h:269
GNM layer which represents a geography network layer of generic format.
Definition: gnm.h:493
virtual const char * GetFIDColumn() override
This method returns the name of the underlying database column being used as the FID column,...
Definition: gnmlayer.cpp:52
virtual const char * GetName() override
Return the layer name.
Definition: gnmlayer.cpp:255
virtual OGRErr ReorderFields(int *panMap) override
Reorder all the fields of a layer.
Definition: gnmlayer.cpp:309
virtual OGRErr SetIgnoredFields(const char **papszFields) override
Set which fields can be omitted when retrieving features from the layer.
Definition: gnmlayer.cpp:62
virtual OGRFeatureDefn * GetLayerDefn() override
Fetch the schema information for this layer.
Definition: gnmlayer.cpp:363
virtual OGRErr CreateField(OGRFieldDefn *poField, int bApproxOK=TRUE) override
Create a new field on a layer.
Definition: gnmlayer.cpp:295
virtual void SetStyleTable(OGRStyleTable *poStyleTable) override
Set layer style table.
Definition: gnmlayer.cpp:343
virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce=TRUE) override
Fetch the extent of this layer.
Definition: gnmlayer.cpp:280
virtual OGRErr SyncToDisk() override
Flush pending changes to disk.
Definition: gnmlayer.cpp:328
OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Union.
Definition: gnmlayer.cpp:77
virtual int FindFieldIndex(const char *pszFieldName, int bExactMatch) override
Find the index of field in the layer.
Definition: gnmlayer.cpp:265
virtual GIntBig GetFeatureCount(int bForce=TRUE) override
Fetch the feature count in this layer.
Definition: gnmlayer.cpp:275
virtual ~GNMGenericLayer()
~GNMGenericLayer
Definition: gnmlayer.cpp:50
virtual void ResetReading() override
Reset feature reading to start on the first feature.
Definition: gnmlayer.cpp:209
OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Clip.
Definition: gnmlayer.cpp:109
virtual OGRErr RollbackTransaction() override
For datasources which support transactions, RollbackTransaction will roll back a datasource to its st...
Definition: gnmlayer.cpp:358
virtual OGRStyleTable * GetStyleTable() override
Returns layer style table.
Definition: gnmlayer.cpp:333
virtual void SetSpatialFilter(OGRGeometry *) override
Set a new spatial filter.
Definition: gnmlayer.cpp:181
virtual int TestCapability(const char *) override
Test if this layer supported the named capability.
Definition: gnmlayer.cpp:290
virtual OGRErr SetNextByIndex(GIntBig nIndex) override
Move read cursor to the nIndex'th feature in the current resultset.
Definition: gnmlayer.cpp:225
virtual OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, int nFlagsIn) override
Alter the definition of an existing field on a layer.
Definition: gnmlayer.cpp:314
OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Update.
Definition: gnmlayer.cpp:101
virtual OGRSpatialReference * GetSpatialRef() override
Fetch the spatial reference system for this layer.
Definition: gnmlayer.cpp:270
virtual OGRErr DeleteField(int iField) override
Delete an existing field on a layer.
Definition: gnmlayer.cpp:300
virtual void SetSpatialFilterRect(double dfMinX, double dfMinY, double dfMaxX, double dfMaxY) override
Set a new rectangular spatial filter.
Definition: gnmlayer.cpp:186
virtual OGRwkbGeometryType GetGeomType() override
Return the layer geometry type.
Definition: gnmlayer.cpp:260
virtual OGRFeature * GetNextFeature() override
Fetch the next available feature from this layer.
Definition: gnmlayer.cpp:214
virtual OGRErr CommitTransaction() override
For datasources which support transactions, CommitTransaction commits a transaction.
Definition: gnmlayer.cpp:353
GIntBig GetFeaturesRead()
GetFeaturesRead.
Definition: gnmlayer.cpp:125
virtual OGRErr StartTransaction() override
For datasources which support transactions, StartTransaction creates a transaction.
Definition: gnmlayer.cpp:348
OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Intersection.
Definition: gnmlayer.cpp:67
virtual OGRErr SetAttributeFilter(const char *) override
Set a new attribute query.
Definition: gnmlayer.cpp:204
virtual const char * GetGeometryColumn() override
This method returns the name of the underlying database column being used as the geometry column,...
Definition: gnmlayer.cpp:57
virtual OGRGeometry * GetSpatialFilter() override
This method returns the current spatial filter for this layer.
Definition: gnmlayer.cpp:176
int AttributeFilterEvaluationNeedsGeometry()
AttributeFilterEvaluationNeedsGeometry.
Definition: gnmlayer.cpp:130
virtual void SetStyleTableDirectly(OGRStyleTable *poStyleTable) override
Set layer style table.
Definition: gnmlayer.cpp:338
virtual OGRErr DeleteFeature(GIntBig nFID) override
Delete feature from layer.
Definition: gnmlayer.cpp:230
virtual OGRErr CreateGeomField(OGRGeomFieldDefn *poField, int bApproxOK=TRUE) override
Create a new geometry field on a layer.
Definition: gnmlayer.cpp:323
OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg)
SymDifference.
Definition: gnmlayer.cpp:85
GNMGenericLayer(OGRLayer *poLayer, GNMGenericNetwork *poNetwork)
GNMGenericLayer.
Definition: gnmlayer.cpp:38
OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Identity.
Definition: gnmlayer.cpp:93
OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions=nullptr, GDALProgressFunc pfnProgress=nullptr, void *pProgressArg=nullptr)
Erase.
Definition: gnmlayer.cpp:117
GNM class which represents a geography network of generic format.
Definition: gnm.h:195
virtual CPLErr DisconnectAll() override
DisconnectAll method clears the network graph.
virtual CPLErr AddFeatureGlobalFID(GNMGFID nFID, const char *pszLayerName)
AddFeatureGlobalFID add the FID <-> Layer name link to fast access features by global FID.
virtual CPLErr DeleteRule(const char *pszRuleStr)
Delete the specified rule.
virtual char ** GetRules() const
Get the rule list.
virtual int TestCapability(const char *) override
Test if capability is available.
virtual CPLErr CheckLayerDriver(const char *pszDefaultDriverName, char **papszOptions)
Check or create layer OGR driver.
virtual CPLErr DeleteAllRules()
Delete all rules from network.
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 OGRLayer * GetLayer(int) override
Fetch a layer by index.
virtual int GetLayerCount() override
Get the number of layers in this dataset.
virtual CPLString GetAlgorithmName(GNMDirection eAlgorithm, bool bShortName)
Get the algorithm name.
virtual OGRFeature * GetFeatureByGlobalFID(GNMGFID nFID) override
GetFeatureByGlobalFID search all network layers for given feature identificator.
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 OGRLayer * CopyLayer(OGRLayer *poSrcLayer, const char *pszNewName, char **papszOptions=nullptr) override
Duplicate an existing layer.
virtual CPLErr DisconnectFeaturesWithId(GNMGFID nFID)
Find the corresponding identificator in graph (source, target, connector) and remove such connections...
virtual CPLErr ChangeAllBlockState(bool bIsBlock=false)
Change all vertices and edges block state.
virtual OGRLayer * GetPath(GNMGFID nStartFID, GNMGFID nEndFID, GNMGraphAlgorithmType eAlgorithm, char **papszOptions) override
Create path between start and end GFIDs.
virtual int GetVersion() const override
GetVersion return the network version if applicable.
virtual CPLErr DisconnectFeatures(GNMGFID nSrcFID, GNMGFID nTgtFID, GNMGFID nConFID)
Remove features connection.
virtual int CloseDependentDatasets() override
Drop references to any other datasets referenced by this dataset.
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.
virtual void 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 CPLErr ConnectPointsByLines(char **papszLayerList, double dfTolerance, double dfCost, double dfInvCost, GNMDirection eDir)
Attempts to build the network topology automatically.
virtual CPLErr ChangeBlockState(GNMGFID nFID, bool bIsBlock)
Change the block state of edge or vertex.
virtual CPLErr Delete() override
Delete network.
virtual OGRErr DeleteLayer(int) override
Delete the indicated layer from the datasource.
The simple graph class, which holds the appropriate for calculations graph in memory (based on STL co...
Definition: gnmgraph.h:90
General GNM class which represents a geography network of common format.
Definition: gnm.h:75
virtual OGRLayer * GetPath(GNMGFID nStartFID, GNMGFID nEndFID, GNMGraphAlgorithmType eAlgorithm, char **papszOptions)=0
Create path between start and end GFIDs.
virtual CPLErr Delete()=0
Delete network.
virtual CPLErr DisconnectAll()=0
DisconnectAll method clears the network graph.
virtual OGRFeature * GetFeatureByGlobalFID(GNMGFID nGFID)=0
GetFeatureByGlobalFID search all network layers for given feature identificator.
const OGRSpatialReference * GetSpatialRef() const override
Fetch the spatial reference for this dataset.
Definition: gnm.h:81
virtual int GetVersion() const
GetVersion return the network version if applicable.
Definition: gnm.h:135
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:641
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(const GNMRule &oRule)
Constructor.
virtual CPLString GetConnectorLayerName() const
Return connector layer name.
const char * c_str() const
Return rule as a string.
virtual CPLString GetSourceLayerName() const
Return source layer name.
GNMRule(const std::string &oRule)
Constructor.
virtual bool IsValid() const
This function indicate if rule string was parsed successfully.
GNMRule & operator=(const GNMRule &)=default
Assignment operator.
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:58
Definition of a feature class or feature layer.
Definition: ogr_feature.h:279
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:380
Definition of an attribute of an OGRFeatureDefn.
Definition: ogr_feature.h:99
The OGRGNMWrappedResultLayer class for search paths queries results.
Definition: gnm.h:718
virtual OGRErr InsertFeature(OGRFeature *poFeature, const CPLString &soLayerName, int nPathNo, bool bIsEdge)
Undocumented.
Definition: gnmresultlayer.cpp:125
virtual OGRErr SetNextByIndex(GIntBig nIndex) override
Move read cursor to the nIndex'th feature in the current resultset.
Definition: gnmresultlayer.cpp:73
virtual OGRErr ICreateFeature(OGRFeature *poFeature) override
Create and write a new feature within a layer.
Definition: gnmresultlayer.cpp:212
virtual OGRErr ISetFeature(OGRFeature *poFeature) override
Rewrite an existing feature.
Definition: gnmresultlayer.cpp:207
virtual OGRFeatureDefn * GetLayerDefn() override
Fetch the schema information for this layer.
Definition: gnmresultlayer.cpp:83
virtual OGRErr CreateField(OGRFieldDefn *poField, int bApproxOK=TRUE) override
Create a new field on a layer.
Definition: gnmresultlayer.cpp:98
virtual OGRFeature * GetNextFeature() override
Fetch the next available feature from this layer.
Definition: gnmresultlayer.cpp:68
virtual OGRErr CreateGeomField(OGRGeomFieldDefn *poField, int bApproxOK=TRUE) override
Create a new geometry field on a layer.
Definition: gnmresultlayer.cpp:103
virtual const char * GetFIDColumn() override
This method returns the name of the underlying database column being used as the FID column,...
Definition: gnmresultlayer.cpp:109
virtual OGRFeature * GetFeature(GIntBig nFID) override
Fetch a feature by its identifier.
Definition: gnmresultlayer.cpp:78
virtual GIntBig GetFeatureCount(int bForce=TRUE) override
Fetch the feature count in this layer.
Definition: gnmresultlayer.cpp:88
virtual OGRSpatialReference * GetSpatialRef() override
Fetch the spatial reference system for this layer.
Definition: gnmresultlayer.cpp:119
virtual const char * GetGeometryColumn() override
This method returns the name of the underlying database column being used as the geometry column,...
Definition: gnmresultlayer.cpp:114
virtual int TestCapability(const char *pszCap) override
Test if this layer supported the named capability.
Definition: gnmresultlayer.cpp:93
virtual void ResetReading() override
Reset feature reading to start on the first feature.
Definition: gnmresultlayer.cpp:63
OGRGNMWrappedResultLayer(GDALDataset *poDS, OGRLayer *poLayer)
Constructor.
Definition: gnmresultlayer.cpp:36
Definition of a geometry field of an OGRFeatureDefn.
Definition: ogr_feature.h:202
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:327
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:71
virtual OGRErr ICreateFeature(OGRFeature *poFeature)
Create and write a new feature within a layer.
Definition: ogrlayer.cpp:637
virtual OGRErr ISetFeature(OGRFeature *poFeature)
Rewrite an existing feature.
Definition: ogrlayer.cpp:598
Concrete representation of a multi-vertex line.
Definition: ogr_geometry.h:1407
A collection of OGRLineString.
Definition: ogr_geometry.h:3128
Point class.
Definition: ogr_geometry.h:936
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:158
This class represents a style table.
Definition: ogr_featurestyle.h:85
CPLErr
Error category.
Definition: cpl_error.h:53
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:230
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:369
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:341
Classes related to registration of format support, and opening datasets.