mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
Merge pull request #4863 from nyalldawson/nn
Port 2 more processing algorithms
This commit is contained in:
commit
aec6a79462
@ -31,12 +31,16 @@ import math
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
from qgis.PyQt.QtCore import QVariant
|
||||
|
||||
from qgis.core import QgsFeature, QgsGeometry, QgsWkbTypes, QgsField, QgsFeatureSink, QgsProcessingUtils
|
||||
from qgis.core import (QgsFeature,
|
||||
QgsGeometry,
|
||||
QgsWkbTypes,
|
||||
QgsField,
|
||||
QgsFeatureSink,
|
||||
QgsProcessing,
|
||||
QgsProcessingParameterFeatureSource,
|
||||
QgsProcessingParameterFeatureSink)
|
||||
|
||||
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
|
||||
from processing.core.parameters import ParameterVector
|
||||
from processing.core.outputs import OutputVector
|
||||
from processing.tools import dataobjects, vector
|
||||
|
||||
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
|
||||
@ -56,12 +60,10 @@ class ExtractNodes(QgisAlgorithm):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(ParameterVector(self.INPUT,
|
||||
self.tr('Input layer'),
|
||||
[dataobjects.TYPE_VECTOR_POLYGON,
|
||||
dataobjects.TYPE_VECTOR_LINE]))
|
||||
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
|
||||
self.tr('Input layer')))
|
||||
|
||||
self.addOutput(OutputVector(self.OUTPUT, self.tr('Nodes'), datatype=[dataobjects.TYPE_VECTOR_POINT]))
|
||||
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Nodes'), QgsProcessing.TypeVectorPoint))
|
||||
|
||||
def name(self):
|
||||
return 'extractnodes'
|
||||
@ -70,36 +72,51 @@ class ExtractNodes(QgisAlgorithm):
|
||||
return self.tr('Extract nodes')
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
layer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context)
|
||||
source = self.parameterAsSource(parameters, self.INPUT, context)
|
||||
|
||||
fields = layer.fields()
|
||||
fields = source.fields()
|
||||
fields.append(QgsField('node_index', QVariant.Int))
|
||||
fields.append(QgsField('distance', QVariant.Double))
|
||||
fields.append(QgsField('angle', QVariant.Double))
|
||||
|
||||
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, QgsWkbTypes.Point, layer.crs(), context)
|
||||
out_wkb = QgsWkbTypes.Point
|
||||
if QgsWkbTypes.hasM(source.wkbType()):
|
||||
out_wkb = QgsWkbTypes.addM(out_wkb)
|
||||
if QgsWkbTypes.hasZ(source.wkbType()):
|
||||
out_wkb = QgsWkbTypes.addZ(out_wkb)
|
||||
|
||||
features = QgsProcessingUtils.getFeatures(layer, context)
|
||||
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
|
||||
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
|
||||
fields, out_wkb, source.sourceCrs())
|
||||
|
||||
features = source.getFeatures()
|
||||
total = 100.0 / source.featureCount() if source.featureCount() else 0
|
||||
for current, f in enumerate(features):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
input_geometry = f.geometry()
|
||||
if not input_geometry:
|
||||
writer.addFeature(f, QgsFeatureSink.FastInsert)
|
||||
sink.addFeature(f, QgsFeatureSink.FastInsert)
|
||||
else:
|
||||
points = vector.extractPoints(input_geometry)
|
||||
i = 0
|
||||
for part in input_geometry.geometry().coordinateSequence():
|
||||
for ring in part:
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
for i, point in enumerate(points):
|
||||
distance = input_geometry.distanceToVertex(i)
|
||||
angle = math.degrees(input_geometry.angleAtVertex(i))
|
||||
attrs = f.attributes()
|
||||
attrs.append(i)
|
||||
attrs.append(distance)
|
||||
attrs.append(angle)
|
||||
output_feature = QgsFeature()
|
||||
output_feature.setAttributes(attrs)
|
||||
output_feature.setGeometry(QgsGeometry.fromPoint(point))
|
||||
writer.addFeature(output_feature, QgsFeatureSink.FastInsert)
|
||||
for point in ring:
|
||||
distance = input_geometry.distanceToVertex(i)
|
||||
angle = math.degrees(input_geometry.angleAtVertex(i))
|
||||
attrs = f.attributes()
|
||||
attrs.append(i)
|
||||
attrs.append(distance)
|
||||
attrs.append(angle)
|
||||
output_feature = QgsFeature()
|
||||
output_feature.setAttributes(attrs)
|
||||
output_feature.setGeometry(QgsGeometry(point.clone()))
|
||||
sink.addFeature(output_feature, QgsFeatureSink.FastInsert)
|
||||
i += 1
|
||||
|
||||
feedback.setProgress(int(current * total))
|
||||
|
||||
del writer
|
||||
return {self.OUTPUT: dest_id}
|
||||
|
@ -31,21 +31,28 @@ import os
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
from qgis.PyQt.QtCore import QVariant
|
||||
|
||||
from qgis.core import QgsField, QgsFeature, QgsGeometry, QgsPointXY, QgsWkbTypes, QgsProcessingUtils, QgsFeatureSink, QgsFields
|
||||
from qgis.core import (QgsField,
|
||||
QgsFeature,
|
||||
QgsGeometry,
|
||||
QgsPointXY,
|
||||
QgsWkbTypes,
|
||||
QgsFeatureRequest,
|
||||
QgsFeatureSink,
|
||||
QgsFields,
|
||||
QgsProcessing,
|
||||
QgsProcessingParameterFeatureSink,
|
||||
QgsProcessingParameterField,
|
||||
QgsProcessingParameterFeatureSource,
|
||||
QgsProcessingException)
|
||||
|
||||
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
|
||||
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
|
||||
from processing.core.parameters import ParameterTableField
|
||||
from processing.core.parameters import ParameterVector
|
||||
from processing.core.outputs import OutputVector
|
||||
from processing.tools import dataobjects, vector
|
||||
from processing.tools import vector
|
||||
|
||||
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
|
||||
|
||||
class MeanCoords(QgisAlgorithm):
|
||||
|
||||
POINTS = 'POINTS'
|
||||
INPUT = 'INPUT'
|
||||
WEIGHT = 'WEIGHT'
|
||||
OUTPUT = 'OUTPUT'
|
||||
UID = 'UID'
|
||||
@ -61,19 +68,19 @@ class MeanCoords(QgisAlgorithm):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(ParameterVector(self.POINTS,
|
||||
self.tr('Input layer')))
|
||||
self.addParameter(ParameterTableField(self.WEIGHT,
|
||||
self.tr('Weight field'),
|
||||
MeanCoords.POINTS,
|
||||
ParameterTableField.DATA_TYPE_NUMBER,
|
||||
optional=True))
|
||||
self.addParameter(ParameterTableField(self.UID,
|
||||
self.tr('Unique ID field'),
|
||||
MeanCoords.POINTS,
|
||||
optional=True))
|
||||
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
|
||||
self.tr('Input layer')))
|
||||
self.addParameter(QgsProcessingParameterField(self.WEIGHT, self.tr('Weight field'),
|
||||
parentLayerParameterName=MeanCoords.INPUT,
|
||||
type=QgsProcessingParameterField.Numeric,
|
||||
optional=True))
|
||||
self.addParameter(QgsProcessingParameterField(self.UID,
|
||||
self.tr('Unique ID field'),
|
||||
parentLayerParameterName=MeanCoords.INPUT,
|
||||
optional=True))
|
||||
|
||||
self.addOutput(OutputVector(MeanCoords.OUTPUT, self.tr('Mean coordinates'), datatype=[dataobjects.TYPE_VECTOR_POINT]))
|
||||
self.addParameter(QgsProcessingParameterFeatureSink(MeanCoords.OUTPUT, self.tr('Mean coordinates'),
|
||||
QgsProcessing.TypeVectorPoint))
|
||||
|
||||
def name(self):
|
||||
return 'meancoordinates'
|
||||
@ -82,46 +89,58 @@ class MeanCoords(QgisAlgorithm):
|
||||
return self.tr('Mean coordinate(s)')
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
layer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.POINTS), context)
|
||||
weightField = self.getParameterValue(self.WEIGHT)
|
||||
uniqueField = self.getParameterValue(self.UID)
|
||||
source = self.parameterAsSource(parameters, self.INPUT, context)
|
||||
|
||||
if weightField is None:
|
||||
weightIndex = -1
|
||||
weight_field = self.parameterAsString(parameters, self.WEIGHT, context)
|
||||
unique_field = self.parameterAsString(parameters, self.UID, context)
|
||||
|
||||
attributes = []
|
||||
if not weight_field:
|
||||
weight_index = -1
|
||||
else:
|
||||
weightIndex = layer.fields().lookupField(weightField)
|
||||
weight_index = source.fields().lookupField(weight_field)
|
||||
if weight_index >= 0:
|
||||
attributes.append(weight_index)
|
||||
|
||||
if uniqueField is None:
|
||||
uniqueIndex = -1
|
||||
if not unique_field:
|
||||
unique_index = -1
|
||||
else:
|
||||
uniqueIndex = layer.fields().lookupField(uniqueField)
|
||||
unique_index = source.fields().lookupField(unique_field)
|
||||
if unique_index >= 0:
|
||||
attributes.append(unique_index)
|
||||
|
||||
fieldList = QgsFields()
|
||||
fieldList.append(QgsField('MEAN_X', QVariant.Double, '', 24, 15))
|
||||
fieldList.append(QgsField('MEAN_Y', QVariant.Double, '', 24, 15))
|
||||
fieldList.append(QgsField('UID', QVariant.String, '', 255))
|
||||
field_list = QgsFields()
|
||||
field_list.append(QgsField('MEAN_X', QVariant.Double, '', 24, 15))
|
||||
field_list.append(QgsField('MEAN_Y', QVariant.Double, '', 24, 15))
|
||||
if unique_index >= 0:
|
||||
field_list.append(QgsField('UID', QVariant.String, '', 255))
|
||||
|
||||
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList, QgsWkbTypes.Point, layer.crs(), context)
|
||||
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
|
||||
field_list, QgsWkbTypes.Point, source.sourceCrs())
|
||||
|
||||
features = QgsProcessingUtils.getFeatures(layer, context)
|
||||
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
|
||||
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes(attributes))
|
||||
total = 100.0 / source.featureCount() if source.featureCount() else 0
|
||||
means = {}
|
||||
for current, feat in enumerate(features):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
feedback.setProgress(int(current * total))
|
||||
if uniqueIndex == -1:
|
||||
if unique_index == -1:
|
||||
clazz = "Single class"
|
||||
else:
|
||||
clazz = str(feat.attributes()[uniqueIndex]).strip()
|
||||
if weightIndex == -1:
|
||||
clazz = str(feat.attributes()[unique_index]).strip()
|
||||
if weight_index == -1:
|
||||
weight = 1.00
|
||||
else:
|
||||
try:
|
||||
weight = float(feat.attributes()[weightIndex])
|
||||
weight = float(feat.attributes()[weight_index])
|
||||
except:
|
||||
weight = 1.00
|
||||
|
||||
if weight < 0:
|
||||
raise GeoAlgorithmExecutionException(self.tr('Negative weight value found. Please fix your data and try again.'))
|
||||
raise QgsProcessingException(
|
||||
self.tr('Negative weight value found. Please fix your data and try again.'))
|
||||
|
||||
if clazz not in means:
|
||||
means[clazz] = (0, 0, 0)
|
||||
@ -138,15 +157,21 @@ class MeanCoords(QgisAlgorithm):
|
||||
current = 0
|
||||
total = 100.0 / len(means) if means else 1
|
||||
for (clazz, values) in list(means.items()):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
outFeat = QgsFeature()
|
||||
cx = values[0] / values[2]
|
||||
cy = values[1] / values[2]
|
||||
meanPoint = QgsPointXY(cx, cy)
|
||||
|
||||
outFeat.setGeometry(QgsGeometry.fromPoint(meanPoint))
|
||||
outFeat.setAttributes([cx, cy, clazz])
|
||||
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
|
||||
attributes = [cx, cy]
|
||||
if unique_index >= 0:
|
||||
attributes.append(clazz)
|
||||
outFeat.setAttributes(attributes)
|
||||
sink.addFeature(outFeat, QgsFeatureSink.FastInsert)
|
||||
current += 1
|
||||
feedback.setProgress(int(current * total))
|
||||
|
||||
del writer
|
||||
return {self.OUTPUT: dest_id}
|
||||
|
@ -32,29 +32,38 @@ import os
|
||||
import math
|
||||
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
from qgis.PyQt.QtCore import QVariant
|
||||
|
||||
from qgis.core import QgsFeatureRequest, QgsProject, QgsDistanceArea, QgsFeatureSink, QgsProcessingUtils
|
||||
from qgis.core import (QgsFeatureRequest,
|
||||
QgsField,
|
||||
QgsFields,
|
||||
QgsProject,
|
||||
QgsFeature,
|
||||
QgsGeometry,
|
||||
QgsDistanceArea,
|
||||
QgsFeatureSink,
|
||||
QgsProcessingParameterFeatureSource,
|
||||
QgsProcessing,
|
||||
QgsProcessingParameterEnum,
|
||||
QgsProcessingParameterField,
|
||||
QgsProcessingParameterNumber,
|
||||
QgsProcessingParameterFeatureSink,
|
||||
QgsSpatialIndex,
|
||||
QgsWkbTypes)
|
||||
|
||||
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
|
||||
from processing.core.parameters import ParameterNumber
|
||||
from processing.core.parameters import ParameterVector
|
||||
from processing.core.parameters import ParameterSelection
|
||||
from processing.core.parameters import ParameterTableField
|
||||
from processing.core.outputs import OutputTable
|
||||
from processing.tools import dataobjects
|
||||
|
||||
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
|
||||
|
||||
class PointDistance(QgisAlgorithm):
|
||||
|
||||
INPUT_LAYER = 'INPUT_LAYER'
|
||||
INPUT = 'INPUT'
|
||||
INPUT_FIELD = 'INPUT_FIELD'
|
||||
TARGET_LAYER = 'TARGET_LAYER'
|
||||
TARGET = 'TARGET'
|
||||
TARGET_FIELD = 'TARGET_FIELD'
|
||||
MATRIX_TYPE = 'MATRIX_TYPE'
|
||||
NEAREST_POINTS = 'NEAREST_POINTS'
|
||||
DISTANCE_MATRIX = 'DISTANCE_MATRIX'
|
||||
OUTPUT = 'OUTPUT'
|
||||
|
||||
def icon(self):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'matrix.png'))
|
||||
@ -70,22 +79,26 @@ class PointDistance(QgisAlgorithm):
|
||||
self.tr('Standard (N x T) distance matrix'),
|
||||
self.tr('Summary distance matrix (mean, std. dev., min, max)')]
|
||||
|
||||
self.addParameter(ParameterVector(self.INPUT_LAYER,
|
||||
self.tr('Input point layer'), [dataobjects.TYPE_VECTOR_POINT]))
|
||||
self.addParameter(ParameterTableField(self.INPUT_FIELD,
|
||||
self.tr('Input unique ID field'), self.INPUT_LAYER,
|
||||
ParameterTableField.DATA_TYPE_ANY))
|
||||
self.addParameter(ParameterVector(self.TARGET_LAYER,
|
||||
self.tr('Target point layer'), dataobjects.TYPE_VECTOR_POINT))
|
||||
self.addParameter(ParameterTableField(self.TARGET_FIELD,
|
||||
self.tr('Target unique ID field'), self.TARGET_LAYER,
|
||||
ParameterTableField.DATA_TYPE_ANY))
|
||||
self.addParameter(ParameterSelection(self.MATRIX_TYPE,
|
||||
self.tr('Output matrix type'), self.mat_types, 0))
|
||||
self.addParameter(ParameterNumber(self.NEAREST_POINTS,
|
||||
self.tr('Use only the nearest (k) target points'), 0, 9999, 0))
|
||||
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
|
||||
self.tr('Input point layer'),
|
||||
[QgsProcessing.TypeVectorPoint]))
|
||||
self.addParameter(QgsProcessingParameterField(self.INPUT_FIELD,
|
||||
self.tr('Input unique ID field'),
|
||||
parentLayerParameterName=self.INPUT,
|
||||
type=QgsProcessingParameterField.Any))
|
||||
self.addParameter(QgsProcessingParameterFeatureSource(self.TARGET,
|
||||
self.tr('Target point layer'),
|
||||
[QgsProcessing.TypeVectorPoint]))
|
||||
self.addParameter(QgsProcessingParameterField(self.TARGET_FIELD,
|
||||
self.tr('Target unique ID field'),
|
||||
parentLayerParameterName=self.TARGET,
|
||||
type=QgsProcessingParameterField.Any))
|
||||
self.addParameter(QgsProcessingParameterEnum(self.MATRIX_TYPE,
|
||||
self.tr('Output matrix type'), options=self.mat_types, defaultValue=0))
|
||||
self.addParameter(QgsProcessingParameterNumber(self.NEAREST_POINTS,
|
||||
self.tr('Use only the nearest (k) target points'), type=QgsProcessingParameterNumber.Integer, minValue=0, maxValue=9999, defaultValue=0))
|
||||
|
||||
self.addOutput(OutputTable(self.DISTANCE_MATRIX, self.tr('Distance matrix')))
|
||||
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Distance matrix'), QgsProcessing.TypeVectorPoint))
|
||||
|
||||
def name(self):
|
||||
return 'distancematrix'
|
||||
@ -94,65 +107,86 @@ class PointDistance(QgisAlgorithm):
|
||||
return self.tr('Distance matrix')
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
inLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT_LAYER), context)
|
||||
inField = self.getParameterValue(self.INPUT_FIELD)
|
||||
targetLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.TARGET_LAYER), context)
|
||||
targetField = self.getParameterValue(self.TARGET_FIELD)
|
||||
matType = self.getParameterValue(self.MATRIX_TYPE)
|
||||
nPoints = self.getParameterValue(self.NEAREST_POINTS)
|
||||
|
||||
outputFile = self.getOutputFromName(self.DISTANCE_MATRIX)
|
||||
source = self.parameterAsSource(parameters, self.INPUT, context)
|
||||
source_field = self.parameterAsString(parameters, self.INPUT_FIELD, context)
|
||||
target_source = self.parameterAsSource(parameters, self.TARGET, context)
|
||||
target_field = self.parameterAsString(parameters, self.TARGET_FIELD, context)
|
||||
matType = self.parameterAsEnum(parameters, self.MATRIX_TYPE, context)
|
||||
nPoints = self.parameterAsInt(parameters, self.NEAREST_POINTS, context)
|
||||
|
||||
if nPoints < 1:
|
||||
nPoints = QgsProcessingUtils.featureCount(targetLayer, context)
|
||||
|
||||
self.writer = outputFile.getTableWriter([])
|
||||
nPoints = target_source.featureCount()
|
||||
|
||||
if matType == 0:
|
||||
# Linear distance matrix
|
||||
self.linearMatrix(context, inLayer, inField, targetLayer, targetField,
|
||||
matType, nPoints, feedback)
|
||||
return self.linearMatrix(parameters, context, source, source_field, target_source, target_field,
|
||||
matType, nPoints, feedback)
|
||||
elif matType == 1:
|
||||
# Standard distance matrix
|
||||
self.regularMatrix(context, inLayer, inField, targetLayer, targetField,
|
||||
nPoints, feedback)
|
||||
return self.regularMatrix(parameters, context, source, source_field, target_source, target_field,
|
||||
nPoints, feedback)
|
||||
elif matType == 2:
|
||||
# Summary distance matrix
|
||||
self.linearMatrix(context, inLayer, inField, targetLayer, targetField,
|
||||
matType, nPoints, feedback)
|
||||
return self.linearMatrix(parameters, context, source, source_field, target_source, target_field,
|
||||
matType, nPoints, feedback)
|
||||
|
||||
def linearMatrix(self, context, inLayer, inField, targetLayer, targetField,
|
||||
def linearMatrix(self, parameters, context, source, inField, target_source, targetField,
|
||||
matType, nPoints, feedback):
|
||||
inIdx = source.fields().lookupField(inField)
|
||||
outIdx = target_source.fields().lookupField(targetField)
|
||||
|
||||
fields = QgsFields()
|
||||
input_id_field = source.fields()[inIdx]
|
||||
input_id_field.setName('InputID')
|
||||
fields.append(input_id_field)
|
||||
if matType == 0:
|
||||
self.writer.addRecord(['InputID', 'TargetID', 'Distance'])
|
||||
target_id_field = target_source.fields()[outIdx]
|
||||
target_id_field.setName('TargetID')
|
||||
fields.append(target_id_field)
|
||||
fields.append(QgsField('Distance', QVariant.Double))
|
||||
else:
|
||||
self.writer.addRecord(['InputID', 'MEAN', 'STDDEV', 'MIN', 'MAX'])
|
||||
fields.append(QgsField('MEAN', QVariant.Double))
|
||||
fields.append(QgsField('STDDEV', QVariant.Double))
|
||||
fields.append(QgsField('MIN', QVariant.Double))
|
||||
fields.append(QgsField('MAX', QVariant.Double))
|
||||
|
||||
index = QgsProcessingUtils.createSpatialIndex(targetLayer, context)
|
||||
out_wkb = QgsWkbTypes.multiType(source.wkbType()) if matType == 0 else source.wkbType()
|
||||
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
|
||||
fields, out_wkb, source.sourceCrs())
|
||||
|
||||
inIdx = inLayer.fields().lookupField(inField)
|
||||
outIdx = targetLayer.fields().lookupField(targetField)
|
||||
index = QgsSpatialIndex(target_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setDestinationCrs(source.sourceCrs())), feedback)
|
||||
|
||||
distArea = QgsDistanceArea()
|
||||
distArea.setSourceCrs(inLayer.crs())
|
||||
distArea.setSourceCrs(source.sourceCrs())
|
||||
distArea.setEllipsoid(QgsProject.instance().ellipsoid())
|
||||
|
||||
features = QgsProcessingUtils.getFeatures(inLayer, context)
|
||||
total = 100.0 / inLayer.featureCount() if inLayer.featureCount() else 0
|
||||
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([inIdx]))
|
||||
total = 100.0 / source.featureCount() if source.featureCount() else 0
|
||||
for current, inFeat in enumerate(features):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
inGeom = inFeat.geometry()
|
||||
inID = str(inFeat.attributes()[inIdx])
|
||||
featList = index.nearestNeighbor(inGeom.asPoint(), nPoints)
|
||||
distList = []
|
||||
vari = 0.0
|
||||
request = QgsFeatureRequest().setFilterFids(featList).setSubsetOfAttributes([outIdx])
|
||||
for outFeat in targetLayer.getFeatures(request):
|
||||
request = QgsFeatureRequest().setFilterFids(featList).setSubsetOfAttributes([outIdx]).setDestinationCrs(source.sourceCrs())
|
||||
for outFeat in target_source.getFeatures(request):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
outID = outFeat.attributes()[outIdx]
|
||||
outGeom = outFeat.geometry()
|
||||
dist = distArea.measureLine(inGeom.asPoint(),
|
||||
outGeom.asPoint())
|
||||
|
||||
if matType == 0:
|
||||
self.writer.addRecord([inID, str(outID), str(dist)])
|
||||
out_feature = QgsFeature()
|
||||
out_geom = QgsGeometry.unaryUnion([inFeat.geometry(), outFeat.geometry()])
|
||||
out_feature.setGeometry(out_geom)
|
||||
out_feature.setAttributes([inID, outID, dist])
|
||||
sink.addFeature(out_feature, QgsFeatureSink.FastInsert)
|
||||
else:
|
||||
distList.append(float(dist))
|
||||
|
||||
@ -161,44 +195,61 @@ class PointDistance(QgisAlgorithm):
|
||||
for i in distList:
|
||||
vari += (i - mean) * (i - mean)
|
||||
vari = math.sqrt(vari / len(distList))
|
||||
self.writer.addRecord([inID, str(mean),
|
||||
str(vari), str(min(distList)),
|
||||
str(max(distList))])
|
||||
|
||||
out_feature = QgsFeature()
|
||||
out_feature.setGeometry(inFeat.geometry())
|
||||
out_feature.setAttributes([inID, mean, vari, min(distList), max(distList)])
|
||||
sink.addFeature(out_feature, QgsFeatureSink.FastInsert)
|
||||
|
||||
feedback.setProgress(int(current * total))
|
||||
|
||||
def regularMatrix(self, context, inLayer, inField, targetLayer, targetField,
|
||||
nPoints, feedback):
|
||||
index = QgsProcessingUtils.createSpatialIndex(targetLayer, context)
|
||||
return {self.OUTPUT: dest_id}
|
||||
|
||||
inIdx = inLayer.fields().lookupField(inField)
|
||||
def regularMatrix(self, parameters, context, source, inField, target_source, targetField,
|
||||
nPoints, feedback):
|
||||
|
||||
index = QgsSpatialIndex(target_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setDestinationCrs(source.sourceCrs())), feedback)
|
||||
inIdx = source.fields().lookupField(inField)
|
||||
|
||||
distArea = QgsDistanceArea()
|
||||
distArea.setSourceCrs(inLayer.sourceCrs())
|
||||
distArea.setSourceCrs(source.sourceCrs())
|
||||
distArea.setEllipsoid(QgsProject.instance().ellipsoid())
|
||||
|
||||
first = True
|
||||
features = QgsProcessingUtils.getFeatures(inLayer, context)
|
||||
total = 100.0 / inLayer.featureCount() if inLayer.featureCount() else 0
|
||||
sink = None
|
||||
dest_id = None
|
||||
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([inIdx]))
|
||||
total = 100.0 / source.featureCount() if source.featureCount() else 0
|
||||
for current, inFeat in enumerate(features):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
inGeom = inFeat.geometry()
|
||||
inID = str(inFeat.attributes()[inIdx])
|
||||
featList = index.nearestNeighbor(inGeom.asPoint(), nPoints)
|
||||
if first:
|
||||
first = False
|
||||
data = ['ID']
|
||||
fields = QgsFields()
|
||||
input_id_field = source.fields()[inIdx]
|
||||
input_id_field.setName('ID')
|
||||
fields.append(input_id_field)
|
||||
for i in range(len(featList)):
|
||||
data.append('DIST_{0}'.format(i + 1))
|
||||
self.writer.addRecord(data)
|
||||
fields.append(QgsField('DIST_{0}'.format(i + 1), QVariant.Double))
|
||||
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
|
||||
fields, source.wkbType(), source.sourceCrs())
|
||||
|
||||
data = [inID]
|
||||
for i in featList:
|
||||
request = QgsFeatureRequest().setFilterFid(i)
|
||||
outFeat = next(targetLayer.getFeatures(request))
|
||||
outGeom = outFeat.geometry()
|
||||
for target in target_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setFilterFids(featList).setDestinationCrs(source.sourceCrs())):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
outGeom = target.geometry()
|
||||
dist = distArea.measureLine(inGeom.asPoint(),
|
||||
outGeom.asPoint())
|
||||
data.append(str(float(dist)))
|
||||
self.writer.addRecord(data)
|
||||
|
||||
data.append(float(dist))
|
||||
out_feature = QgsFeature()
|
||||
out_feature.setGeometry(inGeom)
|
||||
out_feature.setAttributes(data)
|
||||
sink.addFeature(out_feature, QgsFeatureSink.FastInsert)
|
||||
feedback.setProgress(int(current * total))
|
||||
|
||||
return {self.OUTPUT: dest_id}
|
||||
|
@ -57,6 +57,7 @@ from .DensifyGeometriesInterval import DensifyGeometriesInterval
|
||||
from .Difference import Difference
|
||||
from .DropGeometry import DropGeometry
|
||||
from .ExtentFromLayer import ExtentFromLayer
|
||||
from .ExtractNodes import ExtractNodes
|
||||
from .FixGeometry import FixGeometry
|
||||
from .GridPolygon import GridPolygon
|
||||
from .Heatmap import Heatmap
|
||||
@ -66,8 +67,10 @@ from .ImportIntoSpatialite import ImportIntoSpatialite
|
||||
from .Intersection import Intersection
|
||||
from .LinesIntersection import LinesIntersection
|
||||
from .LinesToPolygons import LinesToPolygons
|
||||
from .MeanCoords import MeanCoords
|
||||
from .Merge import Merge
|
||||
from .NearestNeighbourAnalysis import NearestNeighbourAnalysis
|
||||
from .PointDistance import PointDistance
|
||||
from .PointsInPolygon import PointsInPolygon
|
||||
from .PointsLayerFromTable import PointsLayerFromTable
|
||||
from .PolygonsToLines import PolygonsToLines
|
||||
@ -87,17 +90,14 @@ from .SpatialiteExecuteSQL import SpatialiteExecuteSQL
|
||||
from .SumLines import SumLines
|
||||
from .SymmetricalDifference import SymmetricalDifference
|
||||
from .Union import Union
|
||||
from .UniqueValues import UniqueValues
|
||||
from .VectorSplit import VectorSplit
|
||||
from .VoronoiPolygons import VoronoiPolygons
|
||||
from .ZonalStatistics import ZonalStatistics
|
||||
|
||||
# from .ExtractByLocation import ExtractByLocation
|
||||
# from .MeanCoords import MeanCoords
|
||||
# from .PointDistance import PointDistance
|
||||
# from .UniqueValues import UniqueValues
|
||||
# from .ExportGeometryInfo import ExportGeometryInfo
|
||||
# from .SinglePartsToMultiparts import SinglePartsToMultiparts
|
||||
# from .ExtractNodes import ExtractNodes
|
||||
# from .ConvexHull import ConvexHull
|
||||
# from .FixedDistanceBuffer import FixedDistanceBuffer
|
||||
# from .VariableDistanceBuffer import VariableDistanceBuffer
|
||||
@ -183,11 +183,10 @@ class QGISAlgorithmProvider(QgsProcessingProvider):
|
||||
self.externalAlgs = []
|
||||
|
||||
def getAlgs(self):
|
||||
# algs = [MeanCoords(),
|
||||
# UniqueValues(), PointDistance(),
|
||||
# algs = [
|
||||
#
|
||||
# ExportGeometryInfo(),
|
||||
# SinglePartsToMultiparts(),
|
||||
# ExtractNodes(),
|
||||
# ConvexHull(), FixedDistanceBuffer(),
|
||||
# VariableDistanceBuffer(),
|
||||
# RandomSelection(), RandomSelectionWithinSubsets(),
|
||||
@ -251,6 +250,7 @@ class QGISAlgorithmProvider(QgsProcessingProvider):
|
||||
Difference(),
|
||||
DropGeometry(),
|
||||
ExtentFromLayer(),
|
||||
ExtractNodes(),
|
||||
FixGeometry(),
|
||||
GridPolygon(),
|
||||
Heatmap(),
|
||||
@ -260,8 +260,10 @@ class QGISAlgorithmProvider(QgsProcessingProvider):
|
||||
Intersection(),
|
||||
LinesIntersection(),
|
||||
LinesToPolygons(),
|
||||
MeanCoords(),
|
||||
Merge(),
|
||||
NearestNeighbourAnalysis(),
|
||||
PointDistance(),
|
||||
PointsInPolygon(),
|
||||
PointsLayerFromTable(),
|
||||
PolygonsToLines(),
|
||||
@ -281,6 +283,7 @@ class QGISAlgorithmProvider(QgsProcessingProvider):
|
||||
SumLines(),
|
||||
SymmetricalDifference(),
|
||||
Union(),
|
||||
UniqueValues(),
|
||||
VectorSplit(),
|
||||
VoronoiPolygons(),
|
||||
ZonalStatistics()
|
||||
|
@ -31,25 +31,32 @@ import codecs
|
||||
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
|
||||
from qgis.core import QgsProcessingUtils, QgsFeatureSink
|
||||
from qgis.core import (QgsCoordinateReferenceSystem,
|
||||
QgsWkbTypes,
|
||||
QgsFeature,
|
||||
QgsFeatureSink,
|
||||
QgsFields,
|
||||
QgsProcessingParameterField,
|
||||
QgsProcessingParameterFeatureSource,
|
||||
QgsProcessingParameterFeatureSink,
|
||||
QgsProcessingOutputNumber,
|
||||
QgsProcessingOutputString,
|
||||
QgsProcessingParameterFileDestination,
|
||||
QgsProcessingOutputHtml)
|
||||
|
||||
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
|
||||
from processing.core.parameters import ParameterVector
|
||||
from processing.core.parameters import ParameterTableField
|
||||
from processing.core.outputs import OutputHTML
|
||||
from processing.core.outputs import OutputNumber
|
||||
from processing.core.outputs import OutputString
|
||||
|
||||
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
|
||||
|
||||
class UniqueValues(QgisAlgorithm):
|
||||
|
||||
INPUT_LAYER = 'INPUT_LAYER'
|
||||
INPUT = 'INPUT'
|
||||
FIELD_NAME = 'FIELD_NAME'
|
||||
TOTAL_VALUES = 'TOTAL_VALUES'
|
||||
UNIQUE_VALUES = 'UNIQUE_VALUES'
|
||||
OUTPUT = 'OUTPUT'
|
||||
OUTPUT_HTML_FILE = 'OUTPUT_HTML_FILE'
|
||||
|
||||
def icon(self):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'unique.png'))
|
||||
@ -61,14 +68,18 @@ class UniqueValues(QgisAlgorithm):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(ParameterVector(self.INPUT_LAYER,
|
||||
self.tr('Input layer')))
|
||||
self.addParameter(ParameterTableField(self.FIELD_NAME,
|
||||
self.tr('Target field'),
|
||||
self.INPUT_LAYER, ParameterTableField.DATA_TYPE_ANY))
|
||||
self.addOutput(OutputHTML(self.OUTPUT, self.tr('Unique values')))
|
||||
self.addOutput(OutputNumber(self.TOTAL_VALUES, self.tr('Total unique values')))
|
||||
self.addOutput(OutputString(self.UNIQUE_VALUES, self.tr('Unique values')))
|
||||
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
|
||||
self.tr('Input layer')))
|
||||
self.addParameter(QgsProcessingParameterField(self.FIELD_NAME,
|
||||
self.tr('Target field'),
|
||||
parentLayerParameterName=self.INPUT, type=QgsProcessingParameterField.Any))
|
||||
|
||||
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Unique values'), optional=True, defaultValue=''))
|
||||
|
||||
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT_HTML_FILE, self.tr('HTML report'), self.tr('HTML files (*.html)'), None, True))
|
||||
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT_HTML_FILE, self.tr('HTML report')))
|
||||
self.addOutput(QgsProcessingOutputNumber(self.TOTAL_VALUES, self.tr('Total unique values')))
|
||||
self.addOutput(QgsProcessingOutputString(self.UNIQUE_VALUES, self.tr('Unique values')))
|
||||
|
||||
def name(self):
|
||||
return 'listuniquevalues'
|
||||
@ -77,14 +88,36 @@ class UniqueValues(QgisAlgorithm):
|
||||
return self.tr('List unique values')
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
layer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT_LAYER), context)
|
||||
fieldName = self.getParameterValue(self.FIELD_NAME)
|
||||
outputFile = self.getOutputValue(self.OUTPUT)
|
||||
values = QgsProcessingUtils.uniqueValues(layer, layer.fields().lookupField(fieldName), context)
|
||||
self.createHTML(outputFile, values)
|
||||
self.setOutputValue(self.TOTAL_VALUES, len(values))
|
||||
self.setOutputValue(self.UNIQUE_VALUES, ';'.join([str(v) for v in
|
||||
values]))
|
||||
source = self.parameterAsSource(parameters, self.INPUT, context)
|
||||
field_name = self.parameterAsString(parameters, self.FIELD_NAME, context)
|
||||
values = source.uniqueValues(source.fields().lookupField(field_name))
|
||||
|
||||
fields = QgsFields()
|
||||
field = source.fields()[source.fields().lookupField(field_name)]
|
||||
field.setName('VALUES')
|
||||
fields.append(field)
|
||||
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
|
||||
fields, QgsWkbTypes.NoGeometry, QgsCoordinateReferenceSystem())
|
||||
results = {}
|
||||
if sink:
|
||||
for value in values:
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
f = QgsFeature()
|
||||
f.setAttributes([value])
|
||||
sink.addFeature(f, QgsFeatureSink.FastInsert)
|
||||
results[self.OUTPUT] = dest_id
|
||||
|
||||
output_file = self.parameterAsFileOutput(parameters, self.OUTPUT_HTML_FILE, context)
|
||||
if output_file:
|
||||
self.createHTML(output_file, values)
|
||||
results[self.OUTPUT_HTML_FILE] = output_file
|
||||
|
||||
results[self.TOTAL_VALUES] = len(values)
|
||||
results[self.UNIQUE_VALUES] = ';'.join([str(v) for v in
|
||||
values])
|
||||
return results
|
||||
|
||||
def createHTML(self, outputFile, algData):
|
||||
with codecs.open(outputFile, 'w', encoding='utf-8') as f:
|
||||
|
@ -239,7 +239,7 @@ def createTest(text):
|
||||
|
||||
definition['params'] = params
|
||||
|
||||
for i, out in enumerate([out for out in alg.destinationParameterDefinitions() if not out.flags() & QgsProcessingParameterDefinition.FlagHiddenn]):
|
||||
for i, out in enumerate([out for out in alg.destinationParameterDefinitions() if not out.flags() & QgsProcessingParameterDefinition.FlagHidden]):
|
||||
token = tokens[i - len(alg.destinationParameterDefinitions())]
|
||||
|
||||
if isinstance(out, (OutputNumber, OutputString)):
|
||||
|
33
python/plugins/processing/tests/testdata/expected/distance_matrix.gfs
vendored
Normal file
33
python/plugins/processing/tests/testdata/expected/distance_matrix.gfs
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
<GMLFeatureClassList>
|
||||
<GMLFeatureClass>
|
||||
<Name>distance_matrix</Name>
|
||||
<ElementPath>distance_matrix</ElementPath>
|
||||
<!--MULTIPOINT-->
|
||||
<GeometryType>4</GeometryType>
|
||||
<SRSName>EPSG:4326</SRSName>
|
||||
<DatasetSpecificInfo>
|
||||
<FeatureCount>81</FeatureCount>
|
||||
<ExtentXMin>0.00000</ExtentXMin>
|
||||
<ExtentXMax>8.00000</ExtentXMax>
|
||||
<ExtentYMin>-5.00000</ExtentYMin>
|
||||
<ExtentYMax>3.00000</ExtentYMax>
|
||||
</DatasetSpecificInfo>
|
||||
<PropertyDefn>
|
||||
<Name>InputID</Name>
|
||||
<ElementPath>InputID</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>8</Width>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>TargetID</Name>
|
||||
<ElementPath>TargetID</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>8</Width>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>Distance</Name>
|
||||
<ElementPath>Distance</ElementPath>
|
||||
<Type>Real</Type>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
662
python/plugins/processing/tests/testdata/expected/distance_matrix.gml
vendored
Normal file
662
python/plugins/processing/tests/testdata/expected/distance_matrix.gml
vendored
Normal file
@ -0,0 +1,662 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation=""
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:boundedBy>
|
||||
<gml:Box>
|
||||
<gml:coord><gml:X>0</gml:X><gml:Y>-5</gml:Y></gml:coord>
|
||||
<gml:coord><gml:X>8</gml:X><gml:Y>3</gml:Y></gml:coord>
|
||||
</gml:Box>
|
||||
</gml:boundedBy>
|
||||
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.0">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>2.82842712474619</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.1">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.2">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>6.32455532033676</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.3">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>7.28010988928052</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.4">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>6.08276253029822</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.5">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>3</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.6">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.7">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>4.12310562561766</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.8">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.0</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>1.4142135623731</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.9">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.10">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>2.82842712474619</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.11">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>5.65685424949238</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.12">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>6.40312423743285</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.13">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>8.54400374531753</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.14">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.15">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>5</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.16">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.17">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.1</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>1.4142135623731</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.18">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>1.4142135623731</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.19">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>1.4142135623731</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.20">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>5.8309518948453</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.21">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>6.70820393249937</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.22">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>7.28010988928052</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.23">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.24">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>3.60555127546399</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.25">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>3</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.26">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.2</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.27">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.28">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>4.12310562561766</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.29">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>3.60555127546399</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.30">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>4.24264068711928</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.31">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>8.60232526704263</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.32">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>1.4142135623731</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.33">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>5.8309518948453</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.34">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.35">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.3</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>3</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.36">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.37">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>3</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.38">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>3.60555127546399</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.39">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>4.47213595499958</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.40">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>7.21110255092798</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.41">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.42">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>4.47213595499958</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.43">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>1.4142135623731</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.44">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.4</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.45">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>8.54400374531753</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.46">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>6.08276253029822</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.47">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>8.06225774829855</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.48">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>8.94427190999916</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.49">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.50">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>7.21110255092798</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.51">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>4</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.52">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>8.60232526704263</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.53">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.5</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>7.28010988928052</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.54">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>6.40312423743285</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.55">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>7.28010988928052</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.56">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>1</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.57">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.58">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>8.94427190999916</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.59">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>4.47213595499958</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.60">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>8</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.61">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>4.24264068711928</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.62">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.6</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>6.70820393249937</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.63">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>5.65685424949238</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.64">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>6.32455532033676</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.65">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.66">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>1</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.67">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>8.06225774829855</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.68">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>3.60555127546399</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.69">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>7</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.70">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>3.60555127546399</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.71">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.7</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>5.8309518948453</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.72">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.1</ogr:TargetID>
|
||||
<ogr:Distance>5</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.73">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.0</ogr:TargetID>
|
||||
<ogr:Distance>2.23606797749979</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.74">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.7</ogr:TargetID>
|
||||
<ogr:Distance>7</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.75">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.6</ogr:TargetID>
|
||||
<ogr:Distance>8</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.76">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.5</ogr:TargetID>
|
||||
<ogr:Distance>4</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.77">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.4</ogr:TargetID>
|
||||
<ogr:Distance>4.47213595499958</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.78">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.8</ogr:TargetID>
|
||||
<ogr:Distance>0</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.79">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.3</ogr:TargetID>
|
||||
<ogr:Distance>5.8309518948453</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:distance_matrix fid="distance_matrix.80">
|
||||
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
|
||||
<ogr:InputID>points.8</ogr:InputID>
|
||||
<ogr:TargetID>points.2</ogr:TargetID>
|
||||
<ogr:Distance>3.60555127546399</ogr:Distance>
|
||||
</ogr:distance_matrix>
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
@ -22,11 +22,5 @@
|
||||
<ElementPath>MEAN_Y</ElementPath>
|
||||
<Type>Real</Type>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>UID</Name>
|
||||
<ElementPath>UID</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>12</Width>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
||||
|
@ -16,7 +16,6 @@
|
||||
<ogr:geometryProperty><gml:Point srsName="EPSG:4326"><gml:coordinates>3.33333333333333,0.111111111111111</gml:coordinates></gml:Point></ogr:geometryProperty>
|
||||
<ogr:MEAN_X>3.333333333333333</ogr:MEAN_X>
|
||||
<ogr:MEAN_Y>0.111111111111111</ogr:MEAN_Y>
|
||||
<ogr:UID>Single class</ogr:UID>
|
||||
</ogr:mean_coordinates>
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
||||
|
15
python/plugins/processing/tests/testdata/expected/unique_values.gfs
vendored
Normal file
15
python/plugins/processing/tests/testdata/expected/unique_values.gfs
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<GMLFeatureClassList>
|
||||
<GMLFeatureClass>
|
||||
<Name>unique_values</Name>
|
||||
<ElementPath>unique_values</ElementPath>
|
||||
<GeometryType>100</GeometryType>
|
||||
<DatasetSpecificInfo>
|
||||
<FeatureCount>3</FeatureCount>
|
||||
</DatasetSpecificInfo>
|
||||
<PropertyDefn>
|
||||
<Name>VALUES</Name>
|
||||
<ElementPath>VALUES</ElementPath>
|
||||
<Type>Integer</Type>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
24
python/plugins/processing/tests/testdata/expected/unique_values.gml
vendored
Normal file
24
python/plugins/processing/tests/testdata/expected/unique_values.gml
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation=""
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:boundedBy><gml:null>missing</gml:null></gml:boundedBy>
|
||||
|
||||
<gml:featureMember>
|
||||
<ogr:unique_values fid="unique_values.0">
|
||||
<ogr:VALUES>0</ogr:VALUES>
|
||||
</ogr:unique_values>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:unique_values fid="unique_values.1">
|
||||
<ogr:VALUES>1</ogr:VALUES>
|
||||
</ogr:unique_values>
|
||||
</gml:featureMember>
|
||||
<gml:featureMember>
|
||||
<ogr:unique_values fid="unique_values.2">
|
||||
<ogr:VALUES>2</ogr:VALUES>
|
||||
</ogr:unique_values>
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
@ -241,6 +241,19 @@ tests:
|
||||
# geometry:
|
||||
# precision: 7
|
||||
#
|
||||
|
||||
- algorithm: qgis:listuniquevalues
|
||||
name: Unique values
|
||||
params:
|
||||
INPUT:
|
||||
name: points.gml
|
||||
type: vector
|
||||
FIELD_NAME: id2
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/unique_values.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: qgis:addautoincrementalfield
|
||||
name: Add autoincremental field
|
||||
params:
|
||||
@ -876,50 +889,50 @@ tests:
|
||||
# OUTPUT_LAYER:
|
||||
# name: expected/single_sided_buffer_multiline_bevel.gml
|
||||
# type: vector
|
||||
#
|
||||
# - algorithm: qgis:extractnodes
|
||||
# name: Test (qgis:extractnodes)
|
||||
# params:
|
||||
# INPUT:
|
||||
# name: multipolys.gml
|
||||
# type: vector
|
||||
# results:
|
||||
# OUTPUT:
|
||||
# name: expected/extract_nodes_multipolys.gml
|
||||
# type: vector
|
||||
#
|
||||
# - algorithm: qgis:extractnodes
|
||||
# name: Extract nodes from polygons
|
||||
# params:
|
||||
# INPUT:
|
||||
# name: polys.gml
|
||||
# type: vector
|
||||
# results:
|
||||
# OUTPUT:
|
||||
# name: expected/extract_nodes_polys.gml
|
||||
# type: vector
|
||||
#
|
||||
# - algorithm: qgis:extractnodes
|
||||
# name: Extract nodes from multilines
|
||||
# params:
|
||||
# INPUT:
|
||||
# name: multilines.gml
|
||||
# type: vector
|
||||
# results:
|
||||
# OUTPUT:
|
||||
# name: expected/extract_nodes_multilines.gml
|
||||
# type: vector
|
||||
#
|
||||
# - algorithm: qgis:extractnodes
|
||||
# name: Extract nodes from lines
|
||||
# params:
|
||||
# INPUT:
|
||||
# name: lines.gml
|
||||
# type: vector
|
||||
# results:
|
||||
# OUTPUT:
|
||||
# name: expected/extract_nodes_lines.gml
|
||||
# type: vector
|
||||
|
||||
- algorithm: qgis:extractnodes
|
||||
name: Test (qgis:extractnodes)
|
||||
params:
|
||||
INPUT:
|
||||
name: multipolys.gml
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/extract_nodes_multipolys.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: qgis:extractnodes
|
||||
name: Extract nodes from polygons
|
||||
params:
|
||||
INPUT:
|
||||
name: polys.gml
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/extract_nodes_polys.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: qgis:extractnodes
|
||||
name: Extract nodes from multilines
|
||||
params:
|
||||
INPUT:
|
||||
name: multilines.gml
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/extract_nodes_multilines.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: qgis:extractnodes
|
||||
name: Extract nodes from lines
|
||||
params:
|
||||
INPUT:
|
||||
name: lines.gml
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/extract_nodes_lines.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: qgis:simplifygeometries
|
||||
name: Simplify (lines)
|
||||
@ -2171,21 +2184,25 @@ tests:
|
||||
# name: expected/truncated.shp
|
||||
# type: vector
|
||||
# in_place_result: true
|
||||
#
|
||||
# - algorithm: qgis:distancematrix
|
||||
# name: Distance matrix (only tests for TableWriter, does not check result)
|
||||
# params:
|
||||
# INPUT_FIELD: fid
|
||||
# INPUT_LAYER:
|
||||
# name: points.gml
|
||||
# type: vector
|
||||
# MATRIX_TYPE: '0'
|
||||
# NEAREST_POINTS: 0
|
||||
# TARGET_FIELD: fid
|
||||
# TARGET_LAYER:
|
||||
# name: points.gml
|
||||
# type: vector
|
||||
# results: {}
|
||||
|
||||
- algorithm: qgis:distancematrix
|
||||
name: Distance matrix (only tests for run, does not check result as rows are in random order)
|
||||
params:
|
||||
INPUT_FIELD: fid
|
||||
INPUT:
|
||||
name: points.gml
|
||||
type: vector
|
||||
MATRIX_TYPE: '0'
|
||||
NEAREST_POINTS: 0
|
||||
TARGET_FIELD: fid
|
||||
TARGET:
|
||||
name: points.gml
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/count_unique_points.gml
|
||||
type: vector
|
||||
compare: false
|
||||
|
||||
- algorithm: qgis:countpointsinpolygon
|
||||
name: standard count unique points in polygon
|
||||
@ -2232,18 +2249,18 @@ tests:
|
||||
# OUTPUT:
|
||||
# name: expected/points_alog_lines.gml
|
||||
# type: vector
|
||||
#
|
||||
# - algorithm: qgis:meancoordinates
|
||||
# name: standard mean coordinates
|
||||
# params:
|
||||
# POINTS:
|
||||
# name: custom/points.shp
|
||||
# type: vector
|
||||
# results:
|
||||
# OUTPUT:
|
||||
# name: expected/mean_coordinates.gml
|
||||
# type: vector
|
||||
#
|
||||
|
||||
- algorithm: qgis:meancoordinates
|
||||
name: standard mean coordinates
|
||||
params:
|
||||
INPUT:
|
||||
name: custom/points.shp
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/mean_coordinates.gml
|
||||
type: vector
|
||||
|
||||
# # Temporarily disable until we figure out why it failed after merging
|
||||
# # into master
|
||||
# #- algorithm: qgis:singlepartstomultipart
|
||||
|
Loading…
x
Reference in New Issue
Block a user