def gnm_filenetwork_create(): try: shutil.rmtree('tmp/test_gnm') except OSError: pass ogrtest.drv = None ogrtest.have_gnm = 0 ogrtest.drv = gdal.GetDriverByName('GNMFile') if ogrtest.drv is None: return 'skip' ds = ogrtest.drv.Create('tmp/', 0, 0, 0, gdal.GDT_Unknown, options=['net_name=test_gnm', 'net_description=Test file based GNM', 'net_srs=EPSG:4326']) # cast to GNM dn = gnm.CastToNetwork(ds) if dn is None: gdaltest.post_reason('fail') return 'fail' if dn.GetVersion() != 100: gdaltest.post_reason('GNM: Check GNM version failed') return 'fail' if dn.GetName() != 'test_gnm': gdaltest.post_reason('GNM: Check GNM name failed') return 'fail' if dn.GetDescription() != 'Test file based GNM': gdaltest.post_reason('GNM: Check GNM description failed') return 'fail' dn = None ogrtest.have_gnm = 1 return 'success'
def test_gnm_filenetwork_create(): try: shutil.rmtree('tmp/test_gnm') except OSError: pass ogrtest.drv = None ogrtest.have_gnm = 0 ogrtest.drv = gdal.GetDriverByName('GNMFile') if ogrtest.drv is None: pytest.skip() ds = ogrtest.drv.Create('tmp/', 0, 0, 0, gdal.GDT_Unknown, options=['net_name=test_gnm', 'net_description=Test file based GNM', 'net_srs=EPSG:4326']) # cast to GNM dn = gnm.CastToNetwork(ds) assert dn is not None assert dn.GetVersion() == 100, 'GNM: Check GNM version failed' assert dn.GetName() == 'test_gnm', 'GNM: Check GNM name failed' assert dn.GetDescription() == 'Test file based GNM', \ 'GNM: Check GNM description failed' dn = None ogrtest.have_gnm = 1
def onReadClicked(self): self.teditMain.clear() fullpath = self.editFile.text() if fullpath == '': self.butLoad.setEnabled(False) return dataset = gdal.OpenEx(str(fullpath)) network = gnm.CastToNetwork(dataset) if network is None: self.butLoad.setEnabled(False) self.teditMain.append( self.tr(u'Unable to read network at the given path')) return self.teditMain.append(self.tr(u'Network read successfully!')) self.teditMain.append(self.tr(u'Information: ')) self.teditMain.append(self.tr(u' Path: ') + fullpath) self.teditMain.append( self.tr(u' GNM version: ') + str(network.GetVersion())) #self.teditMain.append(self.tr(u' Format: ') + ) self.teditMain.append(self.tr(u' Name: ') + network.GetName()) self.teditMain.append( self.tr(u' Description: ') + network.GetDescription()) #self.teditMain.append(self.tr(u' Rules: ')) self.NETWORK_DS = dataset self.NETWORK_FULLPATH = fullpath self.butLoad.setEnabled(True)
def test_gnm_filenetwork_open(): if not ogrtest.have_gnm: pytest.skip() ds = gdal.OpenEx('tmp/test_gnm') # cast to GNM dn = gnm.CastToNetwork(ds) assert dn is not None assert dn.GetVersion() == 100, 'GNM: Check GNM version failed' assert dn.GetName() == 'test_gnm', 'GNM: Check GNM name failed' assert dn.GetDescription() == 'Test file based GNM', \ 'GNM: Check GNM description failed' dn = None
def test_gnm_graph_connectedcomponents(): if not ogrtest.have_gnm: pytest.skip() ds = gdal.OpenEx('tmp/test_gnm') dn = gnm.CastToNetwork(ds) assert dn is not None, 'cast to GNMNetwork failed' lyr = dn.GetPath(61, 50, gnm.GATConnectedComponents) assert lyr is not None, 'failed to get path' if lyr.GetFeatureCount() == 0: dn.ReleaseResultSet(lyr) pytest.fail('failed to get path') dn.ReleaseResultSet(lyr) dn = None
def test_gnm_graph_kshortest(): if not ogrtest.have_gnm: pytest.skip() ds = gdal.OpenEx('tmp/test_gnm') dn = gnm.CastToNetwork(ds) assert dn is not None, 'cast to GNMNetwork failed' lyr = dn.GetPath(61, 50, gnm.GATKShortestPath, options=['num_paths=3']) assert lyr is not None, 'failed to get path' if lyr.GetFeatureCount() < 20: dn.ReleaseResultSet(lyr) pytest.fail('failed to get path') dn.ReleaseResultSet(lyr) dn = None
def gnm_graph_kshortest(): if not ogrtest.have_gnm: return 'skip' ds = gdal.OpenEx('tmp/test_gnm') dn = gnm.CastToNetwork(ds) if dn is None: gdaltest.post_reason('cast to GNMNetwork failed') return 'fail' lyr = dn.GetPath(61, 50, gnm.GATKShortestPath, options=['num_paths=3']) if lyr is None: gdaltest.post_reason('failed to get path') return 'fail' if lyr.GetFeatureCount() < 20: gdaltest.post_reason('failed to get path') return 'fail' dn.ReleaseResultSet(lyr) dn = None return 'success'
def gnm_filenetwork_open(): if not ogrtest.have_gnm: return 'skip' ds = gdal.OpenEx('tmp/test_gnm') # cast to GNM dn = gnm.CastToNetwork(ds) if dn is None: gdaltest.post_reason('fail') return 'fail' if dn.GetVersion() != 100: gdaltest.post_reason('GNM: Check GNM version failed') return 'fail' if dn.GetName() != 'test_gnm': gdaltest.post_reason('GNM: Check GNM name failed') return 'fail' if dn.GetDescription() != 'Test file based GNM': gdaltest.post_reason('GNM: Check GNM description failed') return 'fail' dn = None return 'success'
def gnm_graph_connectedcomponents(): if not ogrtest.have_gnm: return 'skip' ds = gdal.OpenEx('tmp/test_gnm') dn = gnm.CastToNetwork(ds) if dn is None: gdaltest.post_reason('cast to GNMNetwork failed') return 'fail' lyr = dn.GetPath(61, 50, gnm.GATConnectedComponents) if lyr is None: gdaltest.post_reason('failed to get path') return 'fail' if lyr.GetFeatureCount() == 0: dn.ReleaseResultSet(lyr) gdaltest.post_reason('failed to get path') return 'fail' dn.ReleaseResultSet(lyr) dn = None return 'success'
def onCreateClicked(self): #gdal.SetConfigOption('CPL_DEBUG','ON'); #gdal.SetConfigOption('CPL_LOG','D:/nextgis/gnmmanager/gdal_log.txt'); #gdal.SetConfigOption('CPL_LOG_ERRORS','ON'); # Start creating network. self.butCreate.setEnabled(False) self.msg(self.tr(u'Starting network creation...')) self.progress(0) # Obtain network parameters from the dialog. # TODO: replace it with real saving params via according group of widgets: path = self.editFileParams.text() # TODO: replace it with real format selection via combobox: format = self.comboFormat.currentText() gnm_format = self.GNM_CONST_FILEFORMAT srs = self.comboSrs.currentText() name = self.editName.text() descr = self.editDescr.text() if self.isStrVoid(path): self.msgErr(self.tr(u'The network\'s saving path is set incorrectly!')) self.progress(0) return if self.isStrVoid(name): self.msgErr(self.tr(u'The network\'s name is set incorrectly!')) self.progress(0) return options = [] self.addOption(options,self.GNM_CONST_OPT_NAME,name) self.addOption(options,self.GNM_CONST_OPT_DESCR,descr) self.addOption(options,self.GNM_CONST_OPT_SRS,self.getSrsKeyname(srs)) layer_other_paths = [] layer_names = [] cnt = self.listLayers.count() if cnt == 0: self.msgWarn(self.tr(u'No layers were defined for import. The network will be void!')) for i in range(0,cnt): #layer_other_name = str(self.listLayers.item(i).text()) #layer_other_data = str(self.listLayers.item(i).data(Qt.UserRole)) layer_other_paths.append(self.listLayers.item(i).text()) try: tolerance = float(str(self.editTolerance.text())) except ValueError: tolerance = 0 if tolerance < 0: self.msgWarn(self.tr(u'Tolerance for layers connection was set incorrectly [ = ') +self.editTolerance.text()+u']. ' +self.tr(u'The default value [ = 0] will be used!')) tolerance = 0 self.progress(5) # Initialize network via creation. self.msg(u'') self.msg(self.tr(u'Creating network dataset...')) self.msg(self.tr(u'Format: ')+format) self.msg(self.tr(u'Path: ')+path) self.msg(self.tr(u'SRS: ')+srs) driver = gdal.GetDriverByName(str(gnm_format)) if driver is None: self.msgErr(self.tr(u'Unable to initialize network driver via GDAL')) self.progress(0) return dataset = driver.Create(str(path), 0, 0, 0, gdal.GDT_Unknown, options) network = gnm.CastToNetwork(dataset) if network is None: self.msgErr(self.tr(u'Unable to initialize network dataset via GDAL')) self.progress(0) return gen_network = gnm.CastToGenericNetwork(dataset) if gen_network is None: self.msgErr(self.tr(u'Unable to initialize (generic) network dataset via GDAL')) self.progress(0) return self.msg(self.tr(u'...done')) self.progress(20) # Fill network with layers. self.msg(u'') has_point_layer = False has_line_layer = False for layer_other_path in layer_other_paths: self.msg(self.tr(u'Importing layer: ')+layer_other_path) dataset_other = gdal.OpenEx(str(layer_other_path), gdal.OF_VECTOR) if dataset_other is None: self.msgErr(self.tr(u'Failed to open side dataset')) self.progress(0) return layer_other = dataset_other.GetLayerByIndex(0) if layer_other is None: self.msgErr(self.tr(u'Failed to fetch layer in a side dataset')) self.progress(0) return layer_name_other = layer_other.GetName() layer = network.CopyLayer(layer_other, layer_name_other) if layer is None: self.msgErr(self.tr(u'Failed to import layer to the network')) return layer_geom = layer.GetGeomType() if layer_geom == ogr.wkbPoint: has_point_layer = True elif layer_geom == ogr.wkbLineString: has_line_layer = True layer_names.append(layer.GetName()) dataset_other = None # TODO: we do not need such checks if there is some other algorithm of automatic topology creation: if not has_point_layer: self.msgWarn(self.tr(u'No layer with point geometry was imported. ' 'At least one required to properly build network\'s topology')) if not has_line_layer: self.msgWarn(self.tr(u'No layer with line geometry was imported. ' 'At least one required to properly build network\'s topology')) self.msg(self.tr(u'...done')) self.progress(55) # Establish network connectivity. self.msg(u'') self.msg(self.tr(u'Creating network\'s topology...')) # TODO: get weights for the graph edges from the layer's fields via ChangeEdge method: err = gen_network.ConnectPointsByLines(layer_names, tolerance, 1, 1, gnm.GNM_EDGE_DIR_BOTH) if err != 0: self.msgWarn(self.tr(u'Failed to create topology. Features in the network will be unconnected')) self.msg(self.tr(u'...done')) self.progress(85) # Close network for successfull saving all data. gen_network = None network = None dataset = None # Open network for further returning it outside the dialog. net_fullpath = path + '/' + name dataset = gdal.OpenEx(net_fullpath) network = gnm.CastToNetwork(dataset) if network is None: self.msgErr(self.tr(u'Network created successfully but it is not able to open it')) return self.NETWORK_DS = dataset self.NETWORK_FULLPATH = net_fullpath self.butBack.setEnabled(False) # no way to return back self.butOk.show() self.msg(u'') self.msg(self.tr(u'Network was successfully created!')) self.progress(99)