mirror of
https://github.com/qgis/QGIS.git
synced 2025-11-28 00:06:23 -05:00
move common function to tools package
This commit is contained in:
parent
72997dca6d
commit
6e4fbf8d10
@ -38,7 +38,7 @@ from processing.core.ProcessingLog import ProcessingLog
|
|||||||
from processing.parameters.ParameterExtent import ParameterExtent
|
from processing.parameters.ParameterExtent import ParameterExtent
|
||||||
from processing.parameters.ParameterNumber import ParameterNumber
|
from processing.parameters.ParameterNumber import ParameterNumber
|
||||||
from processing.outputs.OutputVector import OutputVector
|
from processing.outputs.OutputVector import OutputVector
|
||||||
|
from processing.tools import vector
|
||||||
|
|
||||||
class RandomPointsExtent(GeoAlgorithm):
|
class RandomPointsExtent(GeoAlgorithm):
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ class RandomPointsExtent(GeoAlgorithm):
|
|||||||
pnt = QgsPoint(rx, ry)
|
pnt = QgsPoint(rx, ry)
|
||||||
geom = QgsGeometry.fromPoint(pnt)
|
geom = QgsGeometry.fromPoint(pnt)
|
||||||
if geom.within(extent) and \
|
if geom.within(extent) and \
|
||||||
self.checkMinDistance(pnt, index, minDistance, points):
|
vector.checkMinDistance(pnt, index, minDistance, points):
|
||||||
f = QgsFeature(nPoints)
|
f = QgsFeature(nPoints)
|
||||||
f.initAttributes(1)
|
f.initAttributes(1)
|
||||||
f.setFields(fields)
|
f.setFields(fields)
|
||||||
@ -110,18 +110,3 @@ class RandomPointsExtent(GeoAlgorithm):
|
|||||||
'number of attempts exceeded.')
|
'number of attempts exceeded.')
|
||||||
|
|
||||||
del writer
|
del writer
|
||||||
|
|
||||||
def checkMinDistance(self, point, index, distance, points):
|
|
||||||
if distance == 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
neighbors = index.nearestNeighbor(point, 1)
|
|
||||||
if len(neighbors) == 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if neighbors[0] in points:
|
|
||||||
np = points[neighbors[0]]
|
|
||||||
if np.sqrDist(point) < (distance * distance):
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|||||||
@ -92,7 +92,7 @@ class RandomPointsLayer(GeoAlgorithm):
|
|||||||
geom = QgsGeometry.fromPoint(pnt)
|
geom = QgsGeometry.fromPoint(pnt)
|
||||||
ids = idxLayer.intersects(geom.buffer(5, 5).boundingBox())
|
ids = idxLayer.intersects(geom.buffer(5, 5).boundingBox())
|
||||||
if len(ids) > 0 and \
|
if len(ids) > 0 and \
|
||||||
self.checkMinDistance(pnt, index, minDistance, points):
|
vector.checkMinDistance(pnt, index, minDistance, points):
|
||||||
for i in ids:
|
for i in ids:
|
||||||
f = layer.getFeatures(request.setFilterFid(i)).next()
|
f = layer.getFeatures(request.setFilterFid(i)).next()
|
||||||
tmpGeom = QgsGeometry(f.geometry())
|
tmpGeom = QgsGeometry(f.geometry())
|
||||||
@ -116,18 +116,3 @@ class RandomPointsLayer(GeoAlgorithm):
|
|||||||
'number of attempts exceeded.')
|
'number of attempts exceeded.')
|
||||||
|
|
||||||
del writer
|
del writer
|
||||||
|
|
||||||
def checkMinDistance(self, point, index, distance, points):
|
|
||||||
if distance == 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
neighbors = index.nearestNeighbor(point, 1)
|
|
||||||
if len(neighbors) == 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if neighbors[0] in points:
|
|
||||||
np = points[neighbors[0]]
|
|
||||||
if np.sqrDist(point) < (distance * distance):
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|||||||
@ -55,14 +55,15 @@ class RandomPointsPolygonsFixed(GeoAlgorithm):
|
|||||||
]
|
]
|
||||||
|
|
||||||
def defineCharacteristics(self):
|
def defineCharacteristics(self):
|
||||||
self.name = 'Random points inside polygons'
|
self.name = 'Random points inside polygons (fixed)'
|
||||||
self.group = 'Vector creation tools'
|
self.group = 'Vector creation tools'
|
||||||
self.addParameter(ParameterVector(self.VECTOR,
|
self.addParameter(ParameterVector(self.VECTOR,
|
||||||
'Input layer',[ParameterVector.VECTOR_TYPE_POLYGON]))
|
'Input layer',[ParameterVector.VECTOR_TYPE_POLYGON]))
|
||||||
self.addParameter(ParameterSelection(
|
self.addParameter(ParameterSelection(
|
||||||
self.STRATEGY, 'Sampling strategy', self.STRATEGIES, 0))
|
self.STRATEGY, 'Sampling strategy', self.STRATEGIES, 0))
|
||||||
self.addParameter(
|
self.addParameter(
|
||||||
ParameterNumber(self.VALUE, 'Number or density of points', 0.0001, 9999999.0, 1.0))
|
ParameterNumber(self.VALUE, 'Number or density of points',
|
||||||
|
0.0001, 9999999.0, 1.0))
|
||||||
self.addParameter(ParameterNumber(
|
self.addParameter(ParameterNumber(
|
||||||
self.MIN_DISTANCE, 'Minimum distance', 0.0, 9999999, 0.0))
|
self.MIN_DISTANCE, 'Minimum distance', 0.0, 9999999, 0.0))
|
||||||
self.addOutput(OutputVector(self.OUTPUT, 'Random points'))
|
self.addOutput(OutputVector(self.OUTPUT, 'Random points'))
|
||||||
@ -107,7 +108,7 @@ class RandomPointsPolygonsFixed(GeoAlgorithm):
|
|||||||
pnt = QgsPoint(rx, ry)
|
pnt = QgsPoint(rx, ry)
|
||||||
geom = QgsGeometry.fromPoint(pnt)
|
geom = QgsGeometry.fromPoint(pnt)
|
||||||
if geom.within(fGeom) and \
|
if geom.within(fGeom) and \
|
||||||
self.checkMinDistance(pnt, index, minDistance, points):
|
vector.checkMinDistance(pnt, index, minDistance, points):
|
||||||
f = QgsFeature(nPoints)
|
f = QgsFeature(nPoints)
|
||||||
f.initAttributes(1)
|
f.initAttributes(1)
|
||||||
f.setFields(fields)
|
f.setFields(fields)
|
||||||
@ -129,18 +130,3 @@ class RandomPointsPolygonsFixed(GeoAlgorithm):
|
|||||||
progress.setPercentage(0)
|
progress.setPercentage(0)
|
||||||
|
|
||||||
del writer
|
del writer
|
||||||
|
|
||||||
def checkMinDistance(self, point, index, distance, points):
|
|
||||||
if distance == 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
neighbors = index.nearestNeighbor(point, 1)
|
|
||||||
if len(neighbors) == 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if neighbors[0] in points:
|
|
||||||
np = points[neighbors[0]]
|
|
||||||
if np.sqrDist(point) < (distance * distance):
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|||||||
@ -324,3 +324,21 @@ def duplicateInMemory(layer, newName='', addToRegistry=False):
|
|||||||
raise RuntimeError('Layer invalid')
|
raise RuntimeError('Layer invalid')
|
||||||
|
|
||||||
return memLayer
|
return memLayer
|
||||||
|
|
||||||
|
def checkMinDistance(point, index, distance, points):
|
||||||
|
"""Check if distance from given point to all other points is greater
|
||||||
|
than given value.
|
||||||
|
"""
|
||||||
|
if distance == 0:
|
||||||
|
return True
|
||||||
|
|
||||||
|
neighbors = index.nearestNeighbor(point, 1)
|
||||||
|
if len(neighbors) == 0:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if neighbors[0] in points:
|
||||||
|
np = points[neighbors[0]]
|
||||||
|
if np.sqrDist(point) < (distance * distance):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user