def openOSM(self, filename=None):
"""Converts an OSM file to GeoPackage, loads and styles it."""
if not filename:
filename = QFileDialog.getOpenFileName(
parent=None,
caption=self.tr(u'Select OpenStreetMap file'),
filter=self.tr(u'OSM or GeoPackage File') + u' (*.osm *.pbf *.gpkg)')
if not filename or not os.path.isfile(filename):
return
filename = os.path.abspath(filename)
gpkgFile = os.path.splitext(filename)[0] + '.gpkg'
if filename.endswith('.gpkg'):
self.openGeoPackage(filename)
return
if os.path.isfile(gpkgFile):
os.remove(gpkgFile)
if isWindows():
cmd = ['cmd.exe', '/C', 'ogr2ogr.exe']
else:
cmd = ['ogr2ogr']
cmd.extend(['--config', 'OSM_USE_CUSTOM_INDEXING', 'NO'])
iniFile = os.path.join(self.path, 'res', 'osmconf.ini')
cmd.extend(['--config', 'OSM_CONFIG_FILE', iniFile])
cmd.extend(['-t_srs', 'EPSG:3857'])
cmd.extend(['-overwrite'])
cmd.extend(['-f', 'GPKG', gpkgFile, filename])
try:
GdalUtils.runGdal(cmd, ProgressMock())
except IOError as e:
self.iface.messageBar().pushCritical(
self.tr(u'Open OSM Data'), self.tr(u'Error running ogr2ogr: {}').format(e))
return
if 'FAILURE' in GdalUtils.consoleOutput:
self.iface.messageBar().pushCritical(
self.tr(u'Open OSM Data'), self.tr(u'Error converting OSM to GeoPackage.'))
return
self.openGeoPackage(gpkgFile)
评论列表
文章目录