QGIS Importando vários arquivos CSV usando Python [duplicado]
Sep 03 2020
Estou tentando importar vários arquivos CSV usando Python. No entanto, meu código não funciona. Além disso, as coordenadas estão no formato DMS e não tenho certeza de como implementar isso no meu código.
import os.path, glob
layers=[]
for file in glob.glob('/Users/NAME/Desktop/gis/weights/*'):
uri="file:///"+file+"?type=csv&xField=LON&yField=LAT&spatialIndex=no&subsetIndex=no&watchFile=no&crs=epsg:4326"
vlayer = QgsVectorLayer(uri, os.path.basename(file), "delimitedtext")
vlayer.addAttributeAlias(0,'x')
vlayer.addAttributeAlias(1,'y')
layers.append(vlayer)
QgsMapLayerRegistry.instance().addMapLayers(layers)
Ao executar meu código, recebo as seguintes mensagens de erro:
Traceback (most recent call last):
File "/Applications/QGIS3.10.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.7/code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module>
File "<string>", line 10, in <module> NameError: name 'QgsMapLayerRegistry' is not defined
Abaixo está uma amostra dos dados no arquivo CSV.
Respostas
3 KadirŞahbaz Sep 03 2020 at 13:02
Para QGIS 3, QgsMapLayerRegistrya funcionalidade de foi movida para QgsProject. É por isso que você obtém esse erro.
Portanto, para adicionar uma camada, você deve usar essa estrutura:
QgsProject.instance().addMapLayers(layers)
2 ComradeChe Sep 03 2020 at 12:51
Eu uso esta função Python para analisar arquivos vetoriais com recursos de ponto formatado de texto aleatório:
Exemplo de arquivo txt:
y x
58 57 39.71;73 57 32.26
Função Python:
def load_layer_from_text(text_file_path, x_field_name, y_field_name, delimeter, decimal_separator, epsg_number, DMS=False):
'''Add layer from text file'''
uri = qgis.core.QgsDataSourceUri()
layer_name = 'temp_layer'
text_file_path_encoded = urllib.parse.quote(text_file_path)
uri_as_string = \
f'file:///{text_file_path_encoded}?' \
f'delimiter={delimeter}' \
f'&xField={x_field_name}' \
f'&yField={y_field_name}' \
f'&crs=epsg:{str(epsg_number)}' \
f'&detectTypes=yes' \
f'&decimalPoint={decimal_separator}'
if DMS:
uri_as_string += '&xyDms=yes'
layer = qgis.core.QgsVectorLayer(uri_as_string, layer_name, 'delimitedtext')
if layer.isValid():
return layer
else:
print('Error! Vector layer was not validated:')
print(uri_as_string)
return None
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino