-
Notifications
You must be signed in to change notification settings - Fork 0
reusable_utils_plan
Patrón repetitivo:
temp_layer = QgsVectorLayer(geom_type, "temp_name", "memory")
temp_layer.setCrs(crs)
temp_feat = QgsFeature()
temp_feat.setGeometry(geometry)
temp_layer.dataProvider().addFeatures([temp_feat])Propuesta: Crear create_memory_layer(geometry, crs, name="temp")
Patrón repetitivo:
if geom.isMultipart():
vertices = geom.asMultiPolyline()[0]
else:
vertices = geom.asPolyline()Propuesta: Crear get_line_vertices(geometry) -> list[QgsPointXY]
Patrón repetitivo:
if line_geom.isMultipart():
line_start = line_geom.asMultiPolyline()[0][0]
else:
line_start = line_geom.asPolyline()[0]Ya existe: get_line_start_point() pero se repite el código inline
Acción: Usar consistentemente la función existente
Patrón repetitivo:
from qgis import processing
from qgis.core import QgsProcessingFeedback
feedback = QgsProcessingFeedback()
result = processing.run("algorithm_name", {...}, feedback=feedback)Propuesta: Crear run_processing_algorithm(algorithm, params, silent=True)
def create_memory_layer(
geometry: QgsGeometry,
crs: QgsCoordinateReferenceSystem,
name: str = "temp",
fields: QgsFields = None
) -> QgsVectorLayer:
"""Create a temporary memory layer with a single geometry feature.
Args:
geometry: Geometry to add to the layer
crs: Coordinate reference system
name: Layer name (default: "temp")
fields: Optional fields definition
Returns:
QgsVectorLayer: Memory layer with the geometry
"""def get_line_vertices(geometry: QgsGeometry) -> list[QgsPointXY]:
"""Extract vertices from a line geometry (handles multipart).
Args:
geometry: Line geometry (LineString or MultiLineString)
Returns:
list[QgsPointXY]: List of vertices from the first part
Raises:
ValueError: If geometry is not a line
"""def run_processing_algorithm(
algorithm: str,
parameters: dict,
silent: bool = True
) -> dict:
"""Run a QGIS processing algorithm with consistent error handling.
Args:
algorithm: Algorithm name (e.g., "native:buffer")
parameters: Algorithm parameters
silent: If True, suppress feedback output
Returns:
dict: Algorithm result
Raises:
RuntimeError: If algorithm fails
"""-
core/utils/geometry.py
- Agregar
create_memory_layer() - Agregar
get_line_vertices() - Agregar
run_processing_algorithm() - Refactorizar
create_buffer_geometry()para usar helpers - Refactorizar
densify_line_by_interval()para usar helpers
- Agregar
-
core/utils/sampling.py
- Usar
get_line_vertices()ensample_elevation_along_line()
- Usar
-
core/services/geology_service.py
- Usar
get_line_start_point()consistentemente - Usar
run_processing_algorithm()para intersection
- Usar
-
core/services/structure_service.py
- Usar
get_line_start_point()consistentemente
- Usar
✅ Menos código duplicado: Reducir ~100 líneas de código repetitivo
✅ Más consistencia: Mismo comportamiento en todos los lugares
✅ Mejor testabilidad: Funciones helper pueden testearse independientemente
✅ Más mantenible: Cambios en un solo lugar
✅ Mejor documentación: Funciones con docstrings claros
- Crear nuevas funciones helper en
geometry.py - Refactorizar código existente para usar helpers
- Verificar que todo compile
- Probar funcionalidad en QGIS
- Commit con mensaje descriptivo