def convert_and_import(xml_file):
QgsProject.instance().clear()
with tempfile.NamedTemporaryFile(delete=True) as f:
out_f = f.name
config_file = os.path.join(os.path.dirname(__file__), "gmlasconf.xml")
gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF")
ds = gdal.OpenEx("GMLAS:{}".format(xml_file), open_options=['EXPOSE_METADATA_LAYERS=YES', 'CONFIG_FILE={}'.format(config_file)])
srs = osr.SpatialReference()
qgs_srs = QgsCoordinateReferenceSystem("EPSG:4326")
srs.ImportFromWkt(qgs_srs.toWkt())
params = {
'destNameOrDestDS': out_f
, 'srcDS': ds
, 'format': "SQLite"
, 'accessMode': "overwrite"
, 'datasetCreationOptions': ['SPATIALITE=YES']
, 'options' : ['-forceNullable', '-skipfailures']
#, 'srcSRS': srs
#, 'dstSRS': srs
, 'geometryType': 'CONVERT_TO_LINEAR'
, 'reproject': False
}
# call gdal to convert
gdal.VectorTranslate(**params)
# fix geometry types
ds = None
# populate the qgis project
import_in_qgis(out_f, "SQLite")
layers = []
for lid in sorted(QgsProject.instance().mapLayers().keys()):
vl = QgsProject.instance().mapLayer(lid)
layers.append((vl.name(), vl.wkbType()))
rels = []
relations = QgsProject.instance().relationManager().relations()
for relid in sorted(relations.keys()):
rel = relations[relid]
p = rel.fieldPairs()
rels.append((rel.id()[0:3], rel.referencingLayer().name(), list(p.keys())[0], rel.referencedLayer().name(), list(p.values())[0]))
return sorted(layers), sorted(rels)
test_load_in_qgis.py 文件源码
python
阅读 42
收藏 0
点赞 0
评论 0
评论列表
文章目录