QGIS Python [duplicate] kullanarak birkaç CSV dosyasını içe aktarma
Sep 03 2020
Python kullanarak birkaç CSV dosyasını içe aktarmaya çalışıyorum. Ancak kodum çalışmıyor. Dahası, koordinatlar DMS formatında ve bunu koduma nasıl uygulayacağımdan emin değilim.
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)
Kodumu çalıştırırken aşağıdaki hata mesajlarını alıyorum:
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
Aşağıda CSV dosyasındaki verilerin bir örneğini görebilirsiniz.
Yanıtlar
3 KadirŞahbaz Sep 03 2020 at 13:02
QGIS 3 için QgsMapLayerRegistryişlevselliği konumuna taşınmıştır QgsProject. Bu yüzden bu hatayı alıyorsun.
Yani, bir katman eklemek için şu yapıyı kullanmalısınız:
QgsProject.instance().addMapLayers(layers)
2 ComradeChe Sep 03 2020 at 12:51
Bu Python işlevini vektör dosyalarını rastgele metin formatlı nokta özellikleriyle ayrıştırmak için kullanıyorum:
Txt dosyası örneği:
y x
58 57 39.71;73 57 32.26
Python işlevi:
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
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'