GDAL
gnm.h
1 /******************************************************************************
2  * $Id$
3  *
4  * Project: GDAL/OGR Geography Network support (Geographic Network Model)
5  * Purpose: GNM general public declarations.
6  * Authors: Mikhail Gusev (gusevmihs at gmail dot com)
7  * Dmitry Baryshnikov, polimax@mail.ru
8  *
9  ******************************************************************************
10  * Copyright (c) 2014, Mikhail Gusev
11  * Copyright (c) 2014-2015, NextGIS <info@nextgis.com>
12  *
13  * Permission is hereby granted, free of charge, to any person obtaining a
14  * copy of this software and associated documentation files (the "Software"),
15  * to deal in the Software without restriction, including without limitation
16  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17  * and/or sell copies of the Software, and to permit persons to whom the
18  * Software is furnished to do so, subject to the following conditions:
19  *
20  * The above copyright notice and this permission notice shall be included
21  * in all copies or substantial portions of the Software.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29  * DEALINGS IN THE SOFTWARE.
30  ****************************************************************************/
31 
32 #ifndef GNM
33 #define GNM
34 
35 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
36 #include "ogrsf_frmts.h"
37 #endif
38 #include "gnmgraph.h"
39 
40 // Direction of an edge.
41 typedef int GNMDirection; // We use int values in order to save them to the
42  // network data.
43 
44 // Network's metadata parameters names.
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"
55 
56 // TODO: Constants for capabilities.
57 //#define GNMCanChangeConnections "CanChangeConnections"
58 
59 typedef enum
60 { GATDijkstraShortestPath = 1, GATKShortestPath, GATConnectedComponents
64 } GNMGraphAlgorithmType;
65 
66 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
67 
74 class CPL_DLL GNMNetwork : public GDALDataset
75 {
76 public:
77  GNMNetwork();
78  virtual ~GNMNetwork();
79 
80  // GDALDataset Interface
81  const OGRSpatialReference* GetSpatialRef() const override {
82  return GetSpatialRefFromOldGetProjectionRef();
83  }
84  virtual char **GetFileList(void) override;
85 
86  // GNMNetwork Interface
87 
108  virtual CPLErr Create( const char* pszFilename, char** papszOptions ) = 0;
109 
115  virtual CPLErr Open( GDALOpenInfo* poOpenInfo ) = 0;
116 
121  virtual CPLErr Delete() = 0;
122 
129  virtual const char* GetName() const;
130 
135  virtual int GetVersion() const { return 0;}
136 
141  virtual CPLErr DisconnectAll () = 0;
142 
150  virtual OGRFeature *GetFeatureByGlobalFID (GNMGFID nGFID) = 0;
151 
162  virtual OGRLayer *GetPath (GNMGFID nStartFID, GNMGFID nEndFID,
163  GNMGraphAlgorithmType eAlgorithm, char** papszOptions) = 0;
164 protected:
171  virtual int CheckNetworkExist( const char* pszFilename,
172  char** papszOptions ) = 0;
173 
175  const char *_GetProjectionRef(void) override;
177 
178 protected:
180  CPLString m_soName;
181  CPLString m_soSRS;
183 };
184 
185 class GNMRule;
187 
194 class CPL_DLL GNMGenericNetwork: public GNMNetwork
195 {
196 public:
198  virtual ~GNMGenericNetwork();
199 
200  // GDALDataset Interface
201 
202  virtual int GetLayerCount() override;
203  virtual OGRLayer *GetLayer(int) override;
204  virtual OGRErr DeleteLayer(int) override;
205 
206  virtual int TestCapability( const char * ) override;
207 
208  virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
209  const char *pszNewName,
210  char **papszOptions = nullptr ) override;
211 
212  virtual int CloseDependentDatasets() override;
213  virtual void FlushCache(bool bAtClosing) override;
214 
215  // GNMNetwork Interface
216 
217  virtual CPLErr Create( const char* pszFilename, char** papszOptions ) override = 0;
218  virtual CPLErr Delete() override;
219 
220  virtual int GetVersion() const override;
225  virtual GNMGFID GetNewGlobalFID();
226 
233  virtual CPLString GetAlgorithmName(GNMDirection eAlgorithm, bool bShortName);
234 
242  virtual CPLErr AddFeatureGlobalFID(GNMGFID nFID, const char* pszLayerName);
243 
257  virtual CPLErr ConnectFeatures (GNMGFID nSrcFID,
258  GNMGFID nTgtFID,
259  GNMGFID nConFID = -1,
260  double dfCost = 1,
261  double dfInvCost = 1,
262  GNMDirection eDir = GNM_EDGE_DIR_BOTH);
263 
271  virtual CPLErr DisconnectFeatures (GNMGFID nSrcFID,
272  GNMGFID nTgtFID,
273  GNMGFID nConFID);
274 
281  virtual CPLErr DisconnectFeaturesWithId(GNMGFID nFID);
282 
295  virtual CPLErr ReconnectFeatures (GNMGFID nSrcFID,
296  GNMGFID nTgtFID,
297  GNMGFID nConFID,
298  double dfCost = 1,
299  double dfInvCost = 1,
300  GNMDirection eDir = GNM_EDGE_DIR_BOTH);
301 
302  virtual CPLErr DisconnectAll() override;
303 
304  virtual OGRFeature *GetFeatureByGlobalFID(GNMGFID nFID) override;
305 
340  virtual CPLErr CreateRule (const char *pszRuleStr);
341 
347 
353  virtual CPLErr DeleteRule(const char *pszRuleStr);
354 
359  virtual char** GetRules() const;
360 
385  virtual CPLErr ConnectPointsByLines (char **papszLayerList,
386  double dfTolerance,
387  double dfCost,
388  double dfInvCost,
389  GNMDirection eDir);
390 
397  virtual CPLErr ChangeBlockState (GNMGFID nFID, bool bIsBlock);
398 
407  virtual CPLErr ChangeAllBlockState (bool bIsBlock = false);
408 
409  virtual OGRLayer *GetPath (GNMGFID nStartFID, GNMGFID nEndFID,
410  GNMGraphAlgorithmType eAlgorithm, char** papszOptions) override;
411 protected:
418  virtual CPLErr CheckLayerDriver(const char* pszDefaultDriverName,
419  char** papszOptions);
425  virtual bool CheckStorageDriverSupport(const char* pszDriverName) = 0;
426 protected:
428  virtual CPLErr CreateMetadataLayer( GDALDataset* const pDS, int nVersion,
429  size_t nFieldSize = 1024 );
430  virtual CPLErr StoreNetworkSrs();
431  virtual CPLErr LoadNetworkSrs();
432  virtual CPLErr CreateGraphLayer( GDALDataset* const pDS );
433  virtual CPLErr CreateFeaturesLayer( GDALDataset* const pDS );
434  virtual CPLErr LoadMetadataLayer( GDALDataset* const pDS );
435  virtual CPLErr LoadGraphLayer( GDALDataset* const pDS );
436  virtual CPLErr LoadGraph();
437  virtual CPLErr LoadFeaturesLayer( GDALDataset* const pDS );
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,
444  const OGRMultiLineString *poMultiLineString,
445  const std::vector<OGRLayer *> &paPointLayers,
446  double dfTolerance, double dfCost,
447  double dfInvCost, GNMDirection eDir);
448  virtual void ConnectPointsByLine(GIntBig nFID,
449  const OGRLineString *poLineString,
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,
455  double dfTolerance);
456  virtual OGRFeature* FindConnection(GNMGFID nSrcFID, GNMGFID nTgtFID,
457  GNMGFID nConFID);
458  virtual void SaveRules();
459  virtual GNMGFID GetNewVirtualFID();
460  virtual void FillResultLayer(OGRGNMWrappedResultLayer* poResLayer,
461  const GNMPATH &path, int nNoOfPath,
462  bool bReturnVertices, bool bReturnEdges);
464 protected:
466  int m_nVersion;
467  GNMGFID m_nGID;
468  GNMGFID m_nVirtualConnectionGID;
469  OGRLayer* m_poMetadataLayer;
470  OGRLayer* m_poGraphLayer;
471  OGRLayer* m_poFeaturesLayer;
472 
473  GDALDriver *m_poLayerDriver;
474 
475  std::map<GNMGFID, CPLString> m_moFeatureFIDMap;
476  std::vector<OGRLayer*> m_apoLayers;
477  std::vector<GNMRule> m_asRules;
478  bool m_bIsRulesChanged;
479 
480  GNMGraph m_oGraph;
481  bool m_bIsGraphLoaded;
483 };
484 
492 class GNMGenericLayer : public OGRLayer
493 {
494 public:
495  GNMGenericLayer(OGRLayer* poLayer, GNMGenericNetwork* poNetwork);
496  virtual ~GNMGenericLayer();
497 
498  // OGRLayer Interface
499 
500  virtual OGRGeometry *GetSpatialFilter() override;
501  virtual void SetSpatialFilter( OGRGeometry * ) override;
502  virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
503  double dfMaxX, double dfMaxY ) override;
504 
505  virtual void SetSpatialFilter( int iGeomField, OGRGeometry * ) override;
506  virtual void SetSpatialFilterRect( int iGeomField,
507  double dfMinX, double dfMinY,
508  double dfMaxX, double dfMaxY ) override;
509 
510  virtual OGRErr SetAttributeFilter( const char * ) override;
511 
512  virtual void ResetReading() override;
513  virtual OGRFeature *GetNextFeature() override;
514  virtual OGRErr SetNextByIndex( GIntBig nIndex ) override;
515 
516  virtual OGRErr DeleteFeature( GIntBig nFID ) override;
517 
518  virtual const char *GetName() override;
519  virtual OGRwkbGeometryType GetGeomType() override;
520  virtual OGRFeatureDefn *GetLayerDefn() override;
521  virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch ) override;
522 
523  virtual OGRSpatialReference *GetSpatialRef() override;
524 
525  virtual GIntBig GetFeatureCount( int bForce = TRUE ) override;
526  virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE) override;
527  virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
528  int bForce = TRUE) override;
529 
530  virtual int TestCapability( const char * ) override;
531 
532  virtual OGRErr CreateField( OGRFieldDefn *poField,
533  int bApproxOK = TRUE ) override;
534  virtual OGRErr DeleteField( int iField ) override;
535  virtual OGRErr ReorderFields( int* panMap ) override;
536  virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn,
537  int nFlagsIn ) override;
538 
539  virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
540  int bApproxOK = TRUE ) override;
541 
542  virtual OGRErr SyncToDisk() override;
543 
544  virtual OGRStyleTable *GetStyleTable() override;
545  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable ) override;
546 
547  virtual void SetStyleTable(OGRStyleTable *poStyleTable) override;
548 
549  virtual OGRErr StartTransaction() override;
550  virtual OGRErr CommitTransaction() override;
551  virtual OGRErr RollbackTransaction() override;
552 
553  virtual const char *GetFIDColumn() override;
554  virtual const char *GetGeometryColumn() override;
555 
556  virtual OGRErr SetIgnoredFields( const char **papszFields ) override;
557 
559  OGRErr Intersection( OGRLayer *pLayerMethod,
560  OGRLayer *pLayerResult,
561  char** papszOptions = nullptr,
562  GDALProgressFunc pfnProgress = nullptr,
563  void * pProgressArg = nullptr );
565  OGRErr Union( OGRLayer *pLayerMethod,
566  OGRLayer *pLayerResult,
567  char** papszOptions = nullptr,
568  GDALProgressFunc pfnProgress = nullptr,
569  void * pProgressArg = nullptr );
571  OGRErr SymDifference( OGRLayer *pLayerMethod,
572  OGRLayer *pLayerResult,
573  char** papszOptions,
574  GDALProgressFunc pfnProgress,
575  void * pProgressArg );
577  OGRErr Identity( OGRLayer *pLayerMethod,
578  OGRLayer *pLayerResult,
579  char** papszOptions = nullptr,
580  GDALProgressFunc pfnProgress = nullptr,
581  void * pProgressArg = nullptr );
583  OGRErr Update( OGRLayer *pLayerMethod,
584  OGRLayer *pLayerResult,
585  char** papszOptions = nullptr,
586  GDALProgressFunc pfnProgress = nullptr,
587  void * pProgressArg = nullptr );
589  OGRErr Clip( OGRLayer *pLayerMethod,
590  OGRLayer *pLayerResult,
591  char** papszOptions = nullptr,
592  GDALProgressFunc pfnProgress = nullptr,
593  void * pProgressArg = nullptr );
595  OGRErr Erase( OGRLayer *pLayerMethod,
596  OGRLayer *pLayerResult,
597  char** papszOptions = nullptr,
598  GDALProgressFunc pfnProgress = nullptr,
599  void * pProgressArg = nullptr );
600 
603 
606 
608  /* consider these private */
609  OGRErr InitializeIndexSupport( const char * );
610  OGRLayerAttrIndex *GetIndex();
612 
613 protected:
615  virtual OGRErr ISetFeature( OGRFeature *poFeature ) override;
616  virtual OGRErr ICreateFeature( OGRFeature *poFeature ) override;
617 
618 protected:
619  CPLString m_soLayerName;
620  OGRLayer *m_poLayer;
621  GNMGenericNetwork* m_poNetwork;
622  std::map<GNMGFID, GIntBig> m_mnFIDMap;
624 };
625 
626 typedef enum
627 { GRTConnection = 0
629 } GNMRuleType;
630 
640 class CPL_DLL GNMRule
641 {
642  // to hopefully please Coverity Scan which complains about missing
643  // move assignment operator for performance reasons
644  GNMRule& operator==(GNMRule&&) = delete;
645 
646 public:
650  explicit GNMRule(const std::string &oRule );
652  explicit GNMRule(const char* pszRule);
654  GNMRule(const GNMRule &oRule);
655 
657  GNMRule& operator=(const GNMRule&) = default;
658 
659  virtual ~GNMRule();
664  virtual bool IsValid() const;
669  virtual bool IsAcceptAny() const;
675  virtual GNMRuleType GetType() const;
684  virtual bool CanConnect(const CPLString &soSrcLayerName,
685  const CPLString &soTgtLayerName,
686  const CPLString &soConnLayerName = "");
688  virtual CPLString GetSourceLayerName() const;
690  virtual CPLString GetTargetLayerName() const;
694  const char* c_str() const;
696  operator const char* (void) const;
697 protected:
699  virtual bool ParseRuleString();
700 protected:
701  CPLString m_soSrcLayerName;
702  CPLString m_soTgtLayerName;
703  CPLString m_soConnLayerName;
704  bool m_bAllow = false;
705  bool m_bValid = false;
706  bool m_bAny = false;
707  CPLString m_soRuleString;
709 };
710 
718 {
719 public:
722 
723  // OGRLayer
724  virtual void ResetReading() override;
725  virtual OGRFeature *GetNextFeature() override;
726  virtual OGRErr SetNextByIndex( GIntBig nIndex ) override;
727  virtual OGRFeature *GetFeature( GIntBig nFID ) override;
728  virtual OGRFeatureDefn *GetLayerDefn() override;
729  virtual GIntBig GetFeatureCount( int bForce = TRUE ) override;
730  virtual int TestCapability( const char * pszCap ) override;
731  virtual OGRErr CreateField( OGRFieldDefn *poField, int bApproxOK = TRUE ) override;
732  virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
733  int bApproxOK = TRUE ) override;
734  virtual const char *GetFIDColumn() override;
735  virtual const char *GetGeometryColumn() override;
736  virtual OGRSpatialReference *GetSpatialRef() override;
737 
738  // OGRGNMWrappedResultLayer
739  virtual OGRErr InsertFeature(OGRFeature* poFeature,
740  const CPLString &soLayerName, int nPathNo,
741  bool bIsEdge);
742 protected:
743  virtual OGRErr ISetFeature( OGRFeature *poFeature ) override;
744  virtual OGRErr ICreateFeature( OGRFeature *poFeature ) override;
745 protected:
747  GDALDataset *poDS;
748  OGRLayer *poLayer;
750 };
751 
752 #endif // __cplusplus
753 
754 #endif // GNM
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
GNMRule()
Constructor.
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.