Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# CHANGELOG

## 4.19.14 - dev
## 4.19.15 - dev

Novas Funcionalidades:

Expand Down Expand Up @@ -30,6 +30,7 @@ Correção de bugs:
- Corrige bug no processo de corrigir conectividade de linhas;
- Corrige bug no processo de identificação de erros de ângulos pequenos na cobertura;
- Corrige bug no carregamento de arquivo json no assign format rules;
- Corrige bug no processo de identificação de mudança de atributos em linhas (permitir a entrada de camada LineString e MultiLineString);


## 4.18.1 - 2025-06-04
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
QgsProcessingParameterField,
QgsProcessingParameterNumber,
QgsGeometry,
QgsLineString,
QgsExpression,
QgsWkbTypes,
QgsVectorLayer,
Expand All @@ -56,14 +57,14 @@ class IdentifyAttributeChangesInLines(ValidationAlgorithm):
def initAlgorithm(self, config=None):
self.addParameter(
QgsProcessingParameterVectorLayer(
"INPUT_LAYER",
self.INPUT_LAYER,
self.tr("Input Layer"),
types=[QgsProcessing.TypeVectorLine],
)
)
self.addParameter(
QgsProcessingParameterField(
"INPUT_FIELDS",
self.INPUT_FIELDS,
self.tr("Fields to consider"),
type=QgsProcessingParameterField.Any,
parentLayerParameterName="INPUT_LAYER",
Expand All @@ -73,7 +74,7 @@ def initAlgorithm(self, config=None):

self.addParameter(
QgsProcessingParameterNumber(
"INPUT_ANGLE",
self.INPUT_ANGLE,
self.tr("Maximum angle between lines"),
type=QgsProcessingParameterNumber.Double,
minValue=0,
Expand All @@ -82,7 +83,7 @@ def initAlgorithm(self, config=None):

self.addParameter(
QgsProcessingParameterNumber(
"INPUT_MAX_SIZE",
self.INPUT_MAX_SIZE,
self.tr("Maximum size"),
type=QgsProcessingParameterNumber.Double,
optional=True,
Expand All @@ -97,10 +98,10 @@ def initAlgorithm(self, config=None):
)

def processAlgorithm(self, parameters, context, feedback):
layer = self.parameterAsVectorLayer(parameters, "INPUT_LAYER", context)
inputFields = self.parameterAsFields(parameters, "INPUT_FIELDS", context)
angle = self.parameterAsDouble(parameters, "INPUT_ANGLE", context)
maxLength = self.parameterAsDouble(parameters, "INPUT_MAX_SIZE", context)
layer = self.parameterAsVectorLayer(parameters, self.INPUT_LAYER, context)
inputFields = self.parameterAsFields(parameters, self.INPUT_FIELDS, context)
angle = self.parameterAsDouble(parameters, self.INPUT_ANGLE, context)
maxLength = self.parameterAsDouble(parameters, self.INPUT_MAX_SIZE, context)
algRunner = AlgRunner()
self.prepareFlagSink(parameters, layer, QgsWkbTypes.MultiPoint, context)
multiStepFeedback = QgsProcessingMultiStepFeedback(4, feedback)
Expand All @@ -125,9 +126,13 @@ def processAlgorithm(self, parameters, context, feedback):
if multiStepFeedback.isCanceled():
return {self.FLAGS: self.flag_id}
featGeom = feature.geometry()
for geometry in featGeom.constGet():
geometry = featGeom.constGet()
if featGeom.isMultipart():
for line in geometry:
ptFin = QgsGeometry.fromPointXY(QgsPointXY(line[-1]))
else:
ptFin = QgsGeometry.fromPointXY(QgsPointXY(geometry[-1]))
lineTouched = self.linesTouchedOnPoint(inputLyr, feature, ptFin)
lineTouched = self.linesTouchedOnPoint(inputLyr, feature, ptFin)
if len(lineTouched) == 0:
continue
smallerAngle = 360
Expand Down Expand Up @@ -202,12 +207,19 @@ def linesTouchedOnPoint(
return lines

def adjacentPoint(self, line: QgsFeature, point) -> QgsPointXY:
vertexPoint = line.geometry().closestVertexWithContext(point)[1]
adjpoints = line.geometry().adjacentVertices(vertexPoint)
if isinstance(line, QgsFeature):
geometry = line.geometry()
elif isinstance(line, QgsLineString):
geometry = QgsGeometry(line)
else:
print('oi')
pass
vertexPoint = geometry.closestVertexWithContext(point)[1]
adjpoints = geometry.adjacentVertices(vertexPoint)
adjptvertex = adjpoints[0]
if adjptvertex < 0:
adjptvertex = adjpoints[1]
adjpt = line.geometry().vertexAt(adjptvertex)
adjpt = geometry.vertexAt(adjptvertex)
return QgsPointXY(adjpt)

def anglesBetweenLines(
Expand Down Expand Up @@ -257,7 +269,12 @@ def filterFlagsInMultipleIntersectionsCenario(
lineAndPointArray = []
for line in lineLayer.getFeatures():
lineGeom = line.geometry()
for geometry in lineGeom.constGet():
geometry = lineGeom.constGet()
if lineGeom.isMultipart():
for l in geometry:
ptFin = QgsGeometry.fromPointXY(QgsPointXY(l[-1]))
ptIni = QgsGeometry.fromPointXY(QgsPointXY(l[0]))
else:
ptFin = QgsGeometry.fromPointXY(QgsPointXY(geometry[-1]))
ptIni = QgsGeometry.fromPointXY(QgsPointXY(geometry[0]))
if ptFin.intersects(point[0]):
Expand Down
2 changes: 1 addition & 1 deletion DsgTools/metadata.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
name=DSG Tools
qgisMinimumVersion=3.22
description=Brazilian Army Cartographic Production Tools
version=4.19.14
version=4.19.15
author=Brazilian Army Geographic Service
[email protected]
about=
Expand Down
Loading