Add new methods
This commit is contained in:
parent
514ef94567
commit
41e8924938
@ -1,6 +1,7 @@
|
||||
from qgis.core import QgsApplication, QgsField, QgsProject, \
|
||||
QgsProcessingFeedback, QgsVectorLayer, QgsVectorDataProvider, \
|
||||
QgsExpressionContext, QgsExpressionContextUtils
|
||||
QgsExpressionContext, QgsExpressionContextUtils, edit
|
||||
from qgis.PyQt.QtCore import QVariant
|
||||
from qgis.analysis import QgsNativeAlgorithms
|
||||
import processing
|
||||
|
||||
@ -43,9 +44,25 @@ class ScrubLayer:
|
||||
'OUTPUT': 'Output'
|
||||
}
|
||||
processing.run("native:createspatialindex", create_spatial_index_params)
|
||||
print(f'Creating spatial index for {self.layer_name} is completed.')
|
||||
print(f'Creating Spatial index for {self.layer_name} is completed.')
|
||||
|
||||
def spatial_join(self, joining_layer_path, joined_layer_path):
|
||||
"""In QGIS, it is called 'Join attributes by Location'"""
|
||||
params = {'INPUT': self.layer,
|
||||
'PREDICATE': [0],
|
||||
'JOIN': joining_layer_path,
|
||||
'JOIN_FIELDS': [],
|
||||
'METHOD': 0,
|
||||
'DISCARD_NONMATCHING': False,
|
||||
'PREFIX': '',
|
||||
'OUTPUT': joined_layer_path}
|
||||
|
||||
feedback = QgsProcessingFeedback()
|
||||
processing.run('native:joinattributesbylocation', params, feedback=feedback)
|
||||
print(f'Spatial Join with input layer {self.layer_name} is completed.')
|
||||
|
||||
def clip_layer(self, overlay_layer, clipped_layer):
|
||||
"""This must be tested"""
|
||||
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
|
||||
clip_layer_params = {
|
||||
'INPUT': self.layer_path,
|
||||
@ -57,6 +74,55 @@ class ScrubLayer:
|
||||
processing.run("native:clip", clip_layer_params)
|
||||
print(f'Clipping of {self.layer_name} is completed.')
|
||||
|
||||
def merge_layers(self, layers_path, mered_layer_path):
|
||||
pass
|
||||
|
||||
def multipart_to_singleparts(self):
|
||||
pass
|
||||
|
||||
def split_layer(self):
|
||||
pass
|
||||
|
||||
def delete_duplicates(self, deleted_duplicates_layer):
|
||||
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
|
||||
params = {'INPUT': self.layer_path,
|
||||
'OUTPUT': deleted_duplicates_layer}
|
||||
processing.run("native:deleteduplicategeometries", params)
|
||||
|
||||
def delete_field(self, field_name):
|
||||
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
|
||||
with edit(self.layer):
|
||||
# Get the index of the column to delete
|
||||
idx = self.layer.fields().indexFromName(field_name)
|
||||
|
||||
# Delete the field
|
||||
self.layer.deleteAttribute(idx)
|
||||
|
||||
# Update layer fields
|
||||
self.layer.updateFields()
|
||||
|
||||
def add_field(self, new_field_name):
|
||||
functionalities = self.layer.dataProvider().capabilities()
|
||||
|
||||
if functionalities & QgsVectorDataProvider.AddAttributes:
|
||||
new_field = QgsField(new_field_name, QVariant.Double)
|
||||
self.layer.dataProvider().addAttributes([new_field])
|
||||
self.layer.updateFields()
|
||||
|
||||
def assign_area(self, field_name):
|
||||
self.layer.startEditing()
|
||||
idx = self.layer.fields().indexFromName(field_name)
|
||||
|
||||
context = QgsExpressionContext()
|
||||
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(self.layer))
|
||||
|
||||
for feature in self.layer.getFeatures():
|
||||
area = feature.geometry().area()
|
||||
feature[idx] = area
|
||||
self.layer.updateFeature(feature)
|
||||
|
||||
self.layer.commitChanges()
|
||||
|
||||
def __str__(self):
|
||||
return f'The {self.layer_name} has {self.data_count} records.'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user