From 8bb0c99dadd8298bb715da0a9a263ea65aa03cf5 Mon Sep 17 00:00:00 2001 From: Noelle Cheng Date: Wed, 27 Aug 2025 15:10:03 +0800 Subject: [PATCH 1/3] update BasalContactsAlgorithm --- .../algorithms/extract_basal_contacts.py | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/map2loop/processing/algorithms/extract_basal_contacts.py b/map2loop/processing/algorithms/extract_basal_contacts.py index 534958e..ba90572 100644 --- a/map2loop/processing/algorithms/extract_basal_contacts.py +++ b/map2loop/processing/algorithms/extract_basal_contacts.py @@ -22,10 +22,12 @@ QgsProcessingFeedback, QgsProcessingParameterFeatureSink, QgsProcessingParameterFeatureSource, + QgsProcessingParameterString, + QgsProcessingParameterField ) # Internal imports -from ...main.vectorLayerWrapper import qgsLayerToGeoDataFrame, GeoDataFrameToQgsLayer -from map2loop import ContactExtractor +from ...main.vectorLayerWrapper import qgsLayerToGeoDataFrame, GeoDataFrameToQgsLayer +from map2loop.contact_extractor import ContactExtractor class BasalContactsAlgorithm(QgsProcessingAlgorithm): @@ -63,6 +65,16 @@ def initAlgorithm(self, config: Optional[dict[str, Any]] = None) -> None: [QgsProcessing.TypeVectorPolygon], ) ) + self.addParameter( + QgsProcessingParameterField( + 'UNIT_NAME_FIELD', + 'Unit Name Field', + parentLayerParameterName=self.INPUT_GEOLOGY, + type=QgsProcessingParameterField.String, + defaultValue='unitname' + ) + ) + self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT_FAULTS, @@ -71,12 +83,13 @@ def initAlgorithm(self, config: Optional[dict[str, Any]] = None) -> None: optional=True, ) ) - + self.addParameter( - QgsProcessingParameterFeatureSource( + QgsProcessingParameterString( self.INPUT_STRATI_COLUMN, - "STRATIGRAPHIC_COLUMN", - [QgsProcessing.TypeVectorLine], + "Stratigraphic Column Names", + defaultValue="", + optional=True ) ) @@ -94,22 +107,31 @@ def processAlgorithm( feedback: QgsProcessingFeedback, ) -> dict[str, Any]: - geology = self.parameterAsSource(parameters, self.INPUT_GEOLOGY, context) - faults = self.parameterAsSource(parameters, self.INPUT_FAULTS, context) - strati_column = self.parameterAsSource(parameters, self.INPUT_STRATI_COLUMN, context) + geology = self.parameterAsVectorLayer(parameters, self.INPUT_GEOLOGY, context) + faults = self.parameterAsVectorLayer(parameters, self.INPUT_FAULTS, context) + strati_column = self.parameterAsString(parameters, self.INPUT_STRATI_COLUMN, context) + + if strati_column and strati_column.strip(): + strati_column = [unit.strip() for unit in strati_column.split(',')] + + unit_name_field = self.parameterAsString(parameters, 'UNIT_NAME_FIELD', context) geology = qgsLayerToGeoDataFrame(geology) faults = qgsLayerToGeoDataFrame(faults) if faults else None + if unit_name_field != 'UNITNAME' and unit_name_field in geology.columns: + geology = geology.rename(columns={unit_name_field: 'UNITNAME'}) + feedback.pushInfo("Extracting Basal Contacts...") - contact_extractor = ContactExtractor(geology, faults, feedback) - contact_extractor.extract_basal_contacts(strati_column) - + contact_extractor = ContactExtractor(geology, faults) + basal_contacts = contact_extractor.extract_basal_contacts(strati_column) + basal_contacts = GeoDataFrameToQgsLayer( self, contact_extractor.basal_contacts, parameters=parameters, context=context, + output_key=self.OUTPUT, feedback=feedback, ) return {self.OUTPUT: basal_contacts} From fcdf4a2934176cd5f7ad3d856361a432659f629c Mon Sep 17 00:00:00 2001 From: Noelle Cheng Date: Thu, 28 Aug 2025 09:29:44 +0800 Subject: [PATCH 2/3] fix import in vectorLayerWrapper.py --- map2loop/main/vectorLayerWrapper.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/map2loop/main/vectorLayerWrapper.py b/map2loop/main/vectorLayerWrapper.py index d68ed3d..7502ab4 100644 --- a/map2loop/main/vectorLayerWrapper.py +++ b/map2loop/main/vectorLayerWrapper.py @@ -9,7 +9,9 @@ QgsWkbTypes, QgsCoordinateReferenceSystem, QgsFeatureSink, - QgsProcessingException + QgsProcessingException, + QgsPoint, + QgsPointXY, ) from qgis.PyQt.QtCore import QVariant, QDateTime From 7aaa076306b684fadb65125d93809f1d4482a416 Mon Sep 17 00:00:00 2001 From: Noelle Cheng Date: Thu, 28 Aug 2025 09:36:39 +0800 Subject: [PATCH 3/3] rename unused loop idx in vectorLayerWrapper --- map2loop/main/vectorLayerWrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map2loop/main/vectorLayerWrapper.py b/map2loop/main/vectorLayerWrapper.py index 7502ab4..d89f6ff 100644 --- a/map2loop/main/vectorLayerWrapper.py +++ b/map2loop/main/vectorLayerWrapper.py @@ -394,7 +394,7 @@ def dataframeToQgsLayer( attr_columns = [f.name() for f in fields] # Iterate rows and write features - for i, (idx, row) in enumerate(df.iterrows(), start=1): + for i, (_idx, row) in enumerate(df.iterrows(), start=1): if feedback.isCanceled(): break