1 /****************************************************************************** 2 * $Id: gnm.i c92cc7b9bd8a8ae987d1ee2a1f764787ec3ef445 2018-09-16 10:52:21 +0900 Hiroshi Miura $ 3 * 4 * Project: GNM Core SWIG Interface declarations. 5 * Purpose: GNM 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 FROM_GDAL_I 33 %include "exception.i" 34 #endif 35 %include constraints.i 36 37 #ifdef PERL_CPAN_NAMESPACE 38 %module "Geo::GNM" 39 #elif defined(SWIGCSHARP) 40 %module Gnm 41 #elif defined(SWIGPYTHON) 42 %module (package="osgeo") gnm 43 #else 44 %module gnm 45 #endif 46 47 #ifdef SWIGCSHARP 48 %include swig_csharp_extensions.i 49 #endif 50 51 #ifdef SWIGPERL 52 %include confess.i 53 #endif 54 55 #ifndef SWIGJAVA 56 %feature ("compactdefaultargs"); 57 #endif 58 59 %{ 60 #include <iostream> 61 using namespace std; 62 63 #define CPL_SUPRESS_CPLUSPLUS 64 65 #include "gdal.h" 66 #include "ogr_api.h" 67 #include "ogr_core.h" 68 #include "cpl_port.h" 69 #include "cpl_string.h" 70 #include "ogr_srs_api.h" 71 #include "gnm_api.h" 72 73 typedef void GDALMajorObjectShadow; 74 typedef void GNMNetworkShadow; 75 typedef void GNMGenericNetworkShadow; 76 77 #ifdef DEBUG 78 typedef struct OGRSpatialReferenceHS OSRSpatialReferenceShadow; 79 #ifndef SWIGPERL 80 typedef struct OGRDriverHS OGRDriverShadow; 81 typedef struct OGRDataSourceHS OGRDataSourceShadow; 82 #endif 83 typedef struct OGRLayerHS OGRLayerShadow; 84 typedef struct OGRFeatureHS OGRFeatureShadow; 85 typedef struct OGRFeatureDefnHS OGRFeatureDefnShadow; 86 typedef struct OGRGeometryHS OGRGeometryShadow; 87 typedef struct OGRCoordinateTransformationHS OSRCoordinateTransformationShadow; 88 typedef struct OGRCoordinateTransformationHS OGRCoordinateTransformationShadow; 89 typedef struct OGRFieldDefnHS OGRFieldDefnShadow; 90 #else 91 typedef void OSRSpatialReferenceShadow; 92 #ifndef SWIGPERL 93 typedef void OGRDriverShadow; 94 typedef void OGRDataSourceShadow; 95 #endif 96 typedef void OGRLayerShadow; 97 typedef void OGRFeatureShadow; 98 typedef void OGRFeatureDefnShadow; 99 typedef void OGRGeometryShadow; 100 typedef void OSRCoordinateTransformationShadow; 101 typedef void OGRFieldDefnShadow; 102 #endif 103 typedef struct OGRStyleTableHS OGRStyleTableShadow; 104 typedef struct OGRGeomFieldDefnHS OGRGeomFieldDefnShadow; 105 %} 106 107 #if defined(SWIGPYTHON) 108 %include gnm_python.i 109 #elif defined(SWIGCSHARP) 110 //%include gnm_csharp.i 111 #elif defined(SWIGJAVA) 112 %include gnm_java.i 113 #elif defined(SWIGPERL) 114 //%include gnm_perl.i 115 %import typemaps_perl.i 116 #else 117 %include gdal_typemaps.i 118 #endif 119 120 #define FROM_OGR_I 121 %import ogr.i 122 123 124 typedef int GNMDirection; 125 typedef int CPLErr; 126 127 //************************************************************************ 128 // 129 // Define the MajorObject object 130 // 131 //************************************************************************ 132 #if defined(SWIGPYTHON) 133 %{ 134 #include "gdal.h" 135 %} 136 #define FROM_PYTHON_OGR_I 137 %include MajorObject.i 138 #undef FROM_PYTHON_OGR_I 139 #else /* defined(SWIGPYTHON) */ 140 %import MajorObject.i 141 #endif /* defined(SWIGPYTHON) */ 142 143 %feature("autodoc"); 144 145 // Redefine AlgorithmType 146 %rename (GraphAlgorithm) GNMGraphAlgorithmType; 147 typedef enum 148 { 149 GATDijkstraShortestPath = 1, 150 GATKShortestPath = 2, 151 GATConnectedComponents = 3 152 } GNMGraphAlgorithmType; 153 154 #define GNMGFID GIntBig 155 #define GNM_EDGE_DIR_BOTH 0 // bidirectional 156 #define GNM_EDGE_DIR_SRCTOTGT 1 // from source to target 157 #define GNM_EDGE_DIR_TGTTOSRC 2 // from target to source 158 159 #ifndef SWIGJAVA 160 %inline %{ CastToNetwork(GDALMajorObjectShadow * base)161 GNMNetworkShadow* CastToNetwork(GDALMajorObjectShadow* base) { 162 return (GNMNetworkShadow*)GNMCastToNetwork((GDALMajorObjectH)base); 163 } 164 %} 165 166 %inline %{ CastToGenericNetwork(GDALMajorObjectShadow * base)167 GNMGenericNetworkShadow* CastToGenericNetwork(GDALMajorObjectShadow* base) { 168 return (GNMGenericNetworkShadow*)GNMCastToGenericNetwork((GDALMajorObjectH)base); 169 } 170 %} 171 #endif 172 173 /************************************************************************/ 174 /* GNMNetworkShadow */ 175 /************************************************************************/ 176 177 %rename (Network) GNMNetworkShadow; 178 179 class GNMNetworkShadow : public GDALMajorObjectShadow 180 { GNMNetworkShadow()181 GNMNetworkShadow(){} 182 183 public: 184 185 %extend 186 { ~GNMNetworkShadow()187 ~GNMNetworkShadow() 188 { 189 if ( GDALDereferenceDataset( self ) <= 0 ) { 190 GDALClose(self); 191 } 192 } 193 194 #ifndef SWIGJAVA 195 %apply SWIGTYPE *DISOWN {OGRLayerShadow *layer}; ReleaseResultSet(OGRLayerShadow * layer)196 void ReleaseResultSet(OGRLayerShadow *layer){ 197 GDALDatasetReleaseResultSet(self, layer); 198 } 199 %clear OGRLayerShadow *layer; 200 #endif 201 GetVersion()202 int GetVersion() 203 { 204 return GNMGetVersion(self); 205 } 206 GetName()207 char const *GetName() 208 { 209 return GNMGetName(self); 210 } 211 212 %newobject GetFeatureByGlobalFID; GetFeatureByGlobalFID(GNMGFID GFID)213 OGRFeatureShadow *GetFeatureByGlobalFID (GNMGFID GFID) 214 { 215 return GNMGetFeatureByGlobalFID(self, GFID); 216 } 217 218 %newobject GetPath; 219 #ifndef SWIGJAVA 220 %feature( "kwargs" ) GetPath; 221 #endif 222 OGRLayerShadow *GetPath (GNMGFID nStartFID, GNMGFID nEndFID, 223 GNMGraphAlgorithmType eAlgorithm, 224 char **options = 0) 225 { 226 return GNMGetPath(self, nStartFID, nEndFID, eAlgorithm, options); 227 } 228 DisconnectAll()229 CPLErr DisconnectAll() { 230 return GNMDisconnectAll( self ); 231 } 232 GetProjection()233 char const *GetProjection() { 234 return GDALGetProjectionRef( self ); 235 } 236 GetProjectionRef()237 char const *GetProjectionRef() { 238 return GDALGetProjectionRef( self ); 239 } 240 241 %apply (char **CSL) {char **}; GetFileList()242 char **GetFileList() { 243 return GDALGetFileList( self ); 244 } 245 %clear char **; 246 247 /* Note that datasources own their layers */ 248 #ifndef SWIGJAVA 249 %feature( "kwargs" ) CreateLayer; 250 #endif 251 OGRLayerShadow *CreateLayer(const char* name, 252 OSRSpatialReferenceShadow* srs=NULL, 253 OGRwkbGeometryType geom_type=wkbUnknown, 254 char** options=0) { 255 OGRLayerShadow* layer = (OGRLayerShadow*) GDALDatasetCreateLayer( self, 256 name, 257 srs, 258 geom_type, 259 options); 260 return layer; 261 } 262 263 #ifndef SWIGJAVA 264 %feature( "kwargs" ) CopyLayer; 265 #endif 266 %apply Pointer NONNULL {OGRLayerShadow *src_layer}; 267 OGRLayerShadow *CopyLayer(OGRLayerShadow *src_layer, 268 const char* new_name, 269 char** options=0) { 270 OGRLayerShadow* layer = (OGRLayerShadow*) GDALDatasetCopyLayer( self, 271 src_layer, 272 new_name, 273 options); 274 return layer; 275 } 276 DeleteLayer(int index)277 OGRErr DeleteLayer(int index){ 278 return GDALDatasetDeleteLayer(self, index); 279 } 280 GetLayerCount()281 int GetLayerCount() { 282 return GDALDatasetGetLayerCount(self); 283 } 284 285 #ifdef SWIGJAVA GetLayerByIndex(int index)286 OGRLayerShadow *GetLayerByIndex( int index ) { 287 #else 288 OGRLayerShadow *GetLayerByIndex( int index=0) { 289 #endif 290 OGRLayerShadow* layer = (OGRLayerShadow*) GDALDatasetGetLayer(self, 291 index); 292 return layer; 293 } 294 295 OGRLayerShadow *GetLayerByName( const char* layer_name) { 296 OGRLayerShadow* layer = 297 (OGRLayerShadow*) GDALDatasetGetLayerByName(self, layer_name); 298 return layer; 299 } 300 301 bool TestCapability(const char * cap) { 302 return (GDALDatasetTestCapability(self, cap) > 0); 303 } 304 305 #ifndef SWIGJAVA 306 %feature( "kwargs" ) StartTransaction; 307 #endif 308 OGRErr StartTransaction(int force = FALSE) 309 { 310 return GDALDatasetStartTransaction(self, force); 311 } 312 313 OGRErr CommitTransaction() 314 { 315 return GDALDatasetCommitTransaction(self); 316 } 317 318 OGRErr RollbackTransaction() 319 { 320 return GDALDatasetRollbackTransaction(self); 321 } 322 323 } 324 }; 325 326 /************************************************************************/ 327 /* GNMGenericNetworkShadow */ 328 /************************************************************************/ 329 330 %rename (GenericNetwork) GNMGenericNetworkShadow; 331 332 class GNMGenericNetworkShadow : public GNMNetworkShadow 333 { GNMGenericNetworkShadow()334 GNMGenericNetworkShadow(){} 335 336 public: 337 338 %extend 339 { ~GNMGenericNetworkShadow()340 ~GNMGenericNetworkShadow() 341 { 342 if ( GDALDereferenceDataset( self ) <= 0 ) { 343 GDALClose(self); 344 } 345 } 346 ConnectFeatures(GNMGFID nSrcFID,GNMGFID nTgtFID,GNMGFID nConFID,double dfCost,double dfInvCost,GNMDirection eDir)347 CPLErr ConnectFeatures (GNMGFID nSrcFID, GNMGFID nTgtFID, 348 GNMGFID nConFID, double dfCost, 349 double dfInvCost, 350 GNMDirection eDir) { 351 return GNMConnectFeatures(self, nSrcFID, nTgtFID, 352 nConFID, dfCost, dfInvCost, eDir); 353 } 354 DisconnectFeatures(GNMGFID nSrcFID,GNMGFID nTgtFID,GNMGFID nConFID)355 CPLErr DisconnectFeatures (GNMGFID nSrcFID, GNMGFID nTgtFID, 356 GNMGFID nConFID) { 357 return GNMDisconnectFeatures(self, nSrcFID, nTgtFID, 358 nConFID); 359 } 360 DisconnectFeaturesWithId(GNMGFID nFID)361 CPLErr DisconnectFeaturesWithId(GNMGFID nFID) { 362 return GNMDisconnectFeaturesWithId(self, nFID); 363 } 364 ReconnectFeatures(GNMGFID nSrcFID,GNMGFID nTgtFID,GNMGFID nConFID,double dfCost,double dfInvCost,GNMDirection eDir)365 CPLErr ReconnectFeatures (GNMGFID nSrcFID, GNMGFID nTgtFID, GNMGFID nConFID, 366 double dfCost, double dfInvCost, 367 GNMDirection eDir) { 368 return GNMReconnectFeatures(self, nSrcFID, nTgtFID, nConFID, dfCost, dfInvCost, eDir); 369 } 370 371 %apply Pointer NONNULL {const char * pszRuleStr}; CreateRule(const char * pszRuleStr)372 CPLErr CreateRule (const char *pszRuleStr) { 373 return GNMCreateRule(self, pszRuleStr); 374 } 375 %clear const char * pszRuleStr; 376 DeleteAllRules()377 CPLErr DeleteAllRules() { 378 return GNMDeleteAllRules(self); 379 } 380 381 %apply Pointer NONNULL {const char * pszRuleStr}; DeleteRule(const char * pszRuleStr)382 CPLErr DeleteRule(const char *pszRuleStr) { 383 return GNMDeleteRule(self, pszRuleStr); 384 } 385 %clear const char * pszRuleStr; 386 387 %apply (char **CSL) {char **}; GetRules()388 char** GetRules() { 389 return GNMGetRules(self); 390 } 391 %clear char **; 392 393 #ifndef SWIGJAVA 394 %feature( "kwargs" ) ConnectPointsByLines; 395 #endif 396 %apply (char **options) { char ** papszLayerList }; ConnectPointsByLines(char ** papszLayerList,double dfTolerance,double dfCost,double dfInvCost,GNMDirection eDir)397 CPLErr ConnectPointsByLines (char **papszLayerList, 398 double dfTolerance, 399 double dfCost, 400 double dfInvCost, 401 GNMDirection eDir) { 402 return GNMConnectPointsByLines(self, papszLayerList, dfTolerance, dfCost, dfInvCost, eDir); 403 } 404 %clear char **papszLayerList; 405 ChangeBlockState(GNMGFID nFID,bool bIsBlock)406 CPLErr ChangeBlockState (GNMGFID nFID, bool bIsBlock) { 407 return GNMChangeBlockState(self, nFID, bIsBlock); 408 } 409 410 CPLErr ChangeAllBlockState (bool bIsBlock = false) { 411 return GNMChangeAllBlockState(self, bIsBlock); 412 } 413 } 414 }; 415