def processAlgorithm(self, progress): polyLayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POLYGONS)) pointLayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS)) fieldName = self.getParameterValue(self.FIELD) polyProvider = polyLayer.dataProvider() pointProvider = pointLayer.dataProvider() if polyProvider.crs() != pointProvider.crs(): SextanteLog.addToLog(SextanteLog.LOG_WARNING, "CRS warning: Input layers have non-matching CRS. This may cause unexpected results.") idxCount, fieldList = utils.findOrCreateField(polyLayer, polyLayer.pendingFields(), fieldName) writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList, polyProvider.geometryType(), polyProvider.crs()) spatialIndex = utils.createSpatialIndex(pointLayer) pointProvider.rewind() pointProvider.select() allAttrs = polyLayer.pendingAllAttributesList() polyLayer.select(allAttrs) ftPoly = QgsFeature() ftPoint = QgsFeature() outFeat = QgsFeature() geom = QgsGeometry() current = 0 hasIntersections = False features = QGisLayers.features(polyLayer) total = 100.0 / float(len(features)) for ftPoly in features: geom = ftPoly.geometry() atMap = ftPoly.attributeMap() count = 0 hasIntersections = False points = spatialIndex.intersects(geom.boundingBox()) if len(points) > 0: hasIntersections = True if hasIntersections: for i in points: pointLayer.featureAtId(int(i), ftPoint, True, False) tmpGeom = QgsGeometry(ftPoint.geometry()) if geom.contains(tmpGeom): count += 1 outFeat.setGeometry(geom) outFeat.setAttributeMap(atMap) outFeat.addAttribute(idxCount, QVariant(count)) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue( self.POINTS)) output = self.getOutputValue(self.OUTPUT) provider = layer.dataProvider() spatialIndex = utils.createSpatialIndex(layer) provider.rewind() provider.select() neighbour = QgsFeature() distance = QgsDistanceArea() sumDist = 0.00 A = layer.extent() A = float(A.width() * A.height()) current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) for feat in features: neighbourID = spatialIndex.nearestNeighbor( feat.geometry().asPoint(), 2)[1] provider.featureAtId(neighbourID, neighbour, True) sumDist += distance.measureLine(neighbour.geometry().asPoint(), feat.geometry().asPoint()) current += 1 progress.setPercentage(int(current * total)) count = provider.featureCount() do = float(sumDist) / count de = float(0.5 / math.sqrt(count / A)) d = float(do / de) SE = float(0.26136 / math.sqrt((count**2) / A)) zscore = float((do - de) / SE) data = [] data.append("Observed mean distance: " + unicode(do)) data.append("Expected mean distance: " + unicode(de)) data.append("Nearest neighbour index: " + unicode(d)) data.append("Number of points: " + unicode(count)) data.append("Z-Score: " + unicode(zscore)) self.createHTML(output, data) self.setOutputValue(self.OBSERVED_MD, float(data[0].split(": ")[1])) self.setOutputValue(self.EXPECTED_MD, float(data[1].split(": ")[1])) self.setOutputValue(self.NN_INDEX, float(data[2].split(": ")[1])) self.setOutputValue(self.POINT_COUNT, float(data[3].split(": ")[1])) self.setOutputValue(self.Z_SCORE, float(data[4].split(": ")[1]))
def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS)) output = self.getOutputValue(self.OUTPUT) provider = layer.dataProvider() spatialIndex = utils.createSpatialIndex(layer) provider.rewind() provider.select() neighbour = QgsFeature() distance = QgsDistanceArea() sumDist = 0.00 A = layer.extent() A = float(A.width() * A.height()) current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) for feat in features: neighbourID = spatialIndex.nearestNeighbor(feat.geometry().asPoint(), 2)[1] provider.featureAtId(neighbourID, neighbour, True) sumDist += distance.measureLine(neighbour.geometry().asPoint(), feat.geometry().asPoint()) current += 1 progress.setPercentage(int(current * total)) count = provider.featureCount() do = float(sumDist) / count de = float(0.5 / math.sqrt(count / A)) d = float(do / de) SE = float(0.26136 / math.sqrt(( count ** 2) / A)) zscore = float((do - de) / SE) data = [] data.append("Observed mean distance: " + unicode(do)) data.append("Expected mean distance: " + unicode(de)) data.append("Nearest neighbour index: " + unicode(d)) data.append("Number of points: " + unicode(count)) data.append("Z-Score: " + unicode(zscore)) self.createHTML(output, data) self.setOutputValue(self.OBSERVED_MD, float( data[ 0 ].split( ": " )[ 1 ] ) ) self.setOutputValue(self.EXPECTED_MD, float( data[ 1 ].split( ": " )[ 1 ] ) ) self.setOutputValue(self.NN_INDEX, float( data[ 2 ].split( ": " )[ 1 ] ) ) self.setOutputValue(self.POINT_COUNT, float( data[ 3 ].split( ": " )[ 1 ] ) ) self.setOutputValue(self.Z_SCORE, float( data[ 4 ].split( ": " )[ 1 ] ) )
def processAlgorithm(self, progress): polyLayer = QGisLayers.getObjectFromUri( self.getParameterValue(self.POLYGONS)) pointLayer = QGisLayers.getObjectFromUri( self.getParameterValue(self.POINTS)) fieldName = self.getParameterValue(self.FIELD) fieldidx = pointLayer.dataProvider().fieldNameIndex( self.getParameterValue(self.WEIGHT)) polyProvider = polyLayer.dataProvider() pointProvider = pointLayer.dataProvider() if polyProvider.crs() != pointProvider.crs(): SextanteLog.addToLog( SextanteLog.LOG_WARNING, "CRS warning: Input layers have non-matching CRS. This may cause unexpected results." ) idxCount, fieldList = utils.findOrCreateField( polyLayer, polyLayer.pendingFields(), fieldName) writer = self.getOutputFromName(self.OUTPUT).getVectorWriter( fieldList, polyProvider.geometryType(), polyProvider.crs()) spatialIndex = utils.createSpatialIndex(pointLayer) pointProvider.rewind() pointProvider.select() allAttrs = polyLayer.pendingAllAttributesList() polyLayer.select(allAttrs) ftPoint = QgsFeature() outFeat = QgsFeature() geom = QgsGeometry() current = 0 hasIntersections = False features = QGisLayers.features(polyLayer) total = 100.0 / float(len(features)) for ftPoly in features: geom = ftPoly.geometry() atMap = ftPoly.attributeMap() count = 0 hasIntersections = False points = spatialIndex.intersects(geom.boundingBox()) if len(points) > 0: hasIntersections = True if hasIntersections: for i in points: pointLayer.featureAtId(int(i), ftPoint, True, True) tmpGeom = QgsGeometry(ftPoint.geometry()) if geom.contains(tmpGeom): try: weight = float(ftPoint.attributeMap()[fieldidx]) except: weight = 1 count += weight outFeat.setGeometry(geom) outFeat.setAttributeMap(atMap) outFeat.addAttribute(idxCount, QVariant(count)) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): layerA = QGisLayers.getObjectFromUri( self.getParameterValue(self.INPUT_A)) layerB = QGisLayers.getObjectFromUri( self.getParameterValue(self.INPUT_B)) fieldA = self.getParameterValue(self.FIELD_A) fieldB = self.getParameterValue(self.FIELD_B) providerA = layerA.dataProvider() providerB = layerB.dataProvider() idxA = layerA.fieldNameIndex(fieldA) idxB = layerB.fieldNameIndex(fieldB) fieldList = { 0: layerA.pendingFields()[idxA], 1: layerB.pendingFields()[idxB] } writer = self.getOutputFromName(self.OUTPUT).getVectorWriter( fieldList, QGis.WKBPoint, providerA.crs()) spatialIndex = utils.createSpatialIndex(layerB) providerA.rewind() layerA.select([idxA]) providerB.rewind() layerB.select([idxB]) inFeatA = QgsFeature() inFeatB = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() tmpGeom = QgsGeometry() current = 0 total = 100.0 / float(providerA.featureCount()) hasIntersections = False while layerA.nextFeature(inFeatA): inGeom = inFeatA.geometry() hasIntersections = False lines = spatialIndex.intersects(inGeom.boundingBox()) if len(lines) > 0: hasIntersections = True if hasIntersections: layerB.select([idxB]) for i in lines: layerB.featureAtId(int(i), inFeatB) tmpGeom = QgsGeometry(inFeatB.geometry()) points = [] atMapA = inFeatA.attributeMap() atMapB = inFeatB.attributeMap() if inGeom.intersects(tmpGeom): tempGeom = inGeom.intersection(tmpGeom) if tempGeom.type() == QGis.Point: if tempGeom.isMultipart(): points = tempGeom.asMultiPoint() else: points.append(tempGeom.asPoint()) for j in points: outFeat.setGeometry(tempGeom.fromPoint(j)) outFeat.addAttribute(0, atMapA[idxA]) outFeat.addAttribute(1, atMapB[idxB]) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): lineLayer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LINES)) polyLayer = QGisLayers.getObjectFromUri( self.getParameterValue(self.POLYGONS)) lengthFieldName = self.getParameterValue(self.LEN_FIELD) countFieldName = self.getParameterValue(self.COUNT_FIELD) polyProvider = polyLayer.dataProvider() lineProvider = lineLayer.dataProvider() if polyProvider.crs() != lineProvider.crs(): SextanteLog.addToLog( SextanteLog.LOG_WARNING, "CRS warning: Input layers have non-matching CRS. This may cause unexpected results." ) idxLength, fieldList = utils.findOrCreateField( polyLayer, polyLayer.pendingFields(), lengthFieldName) idxCount, fieldList = utils.findOrCreateField(polyLayer, fieldList, countFieldName) writer = self.getOutputFromName(self.OUTPUT).getVectorWriter( fieldList, polyProvider.geometryType(), polyProvider.crs()) spatialIndex = utils.createSpatialIndex(lineLayer) lineProvider.rewind() lineProvider.select() allAttrs = polyLayer.pendingAllAttributesList() polyLayer.select(allAttrs) ftLine = QgsFeature() ftPoly = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() distArea = QgsDistanceArea() current = 0 features = QGisLayers.features(polyLayer) total = 100.0 / float(len(features)) hasIntersections = False for ftPoly in features: inGeom = QgsGeometry(ftPoly.geometry()) atMap = ftPoly.attributeMap() count = 0 length = 0 hasIntersections = False lines = spatialIndex.intersects(inGeom.boundingBox()) if len(lines) > 0: hasIntersections = True if hasIntersections: for i in lines: lineProvider.featureAtId(int(i), ftLine) tmpGeom = QgsGeometry(ftLine.geometry()) if inGeom.intersects(tmpGeom): outGeom = inGeom.intersection(tmpGeom) length += distArea.measure(outGeom) count += 1 outFeat.setGeometry(inGeom) outFeat.setAttributeMap(atMap) outFeat.addAttribute(idxLength, QVariant(length)) outFeat.addAttribute(idxCount, QVariant(count)) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): layerA = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_A)) layerB = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_B)) fieldA = self.getParameterValue(self.FIELD_A) fieldB = self.getParameterValue(self.FIELD_B) providerA = layerA.dataProvider() providerB = layerB.dataProvider() idxA = layerA.fieldNameIndex(fieldA) idxB = layerB.fieldNameIndex(fieldB) fieldList = {0 : layerA.pendingFields()[idxA], 1 : layerB.pendingFields()[idxB] } writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList, QGis.WKBPoint, providerA.crs()) spatialIndex = utils.createSpatialIndex(layerB) providerA.rewind() layerA.select([idxA]) providerB.rewind() layerB.select([idxB]) inFeatA = QgsFeature() inFeatB = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() tmpGeom = QgsGeometry() current = 0 total = 100.0 / float(providerA.featureCount()) hasIntersections = False while layerA.nextFeature(inFeatA): inGeom = inFeatA.geometry() hasIntersections = False lines = spatialIndex.intersects(inGeom.boundingBox()) if len(lines) > 0: hasIntersections = True if hasIntersections: layerB.select([idxB]) for i in lines: layerB.featureAtId(int(i), inFeatB) tmpGeom = QgsGeometry(inFeatB.geometry()) points = [] atMapA = inFeatA.attributeMap() atMapB = inFeatB.attributeMap() if inGeom.intersects(tmpGeom): tempGeom = inGeom.intersection(tmpGeom) if tempGeom.type() == QGis.Point: if tempGeom.isMultipart(): points = tempGeom.asMultiPoint() else: points.append(tempGeom.asPoint()) for j in points: outFeat.setGeometry(tempGeom.fromPoint(j)) outFeat.addAttribute(0, atMapA[idxA]) outFeat.addAttribute(1, atMapB[idxB]) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): lineLayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LINES)) polyLayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POLYGONS)) lengthFieldName = self.getParameterValue(self.LEN_FIELD) countFieldName = self.getParameterValue(self.COUNT_FIELD) polyProvider = polyLayer.dataProvider() lineProvider = lineLayer.dataProvider() if polyProvider.crs() != lineProvider.crs(): SextanteLog.addToLog(SextanteLog.LOG_WARNING, "CRS warning: Input layers have non-matching CRS. This may cause unexpected results.") idxLength, fieldList = utils.findOrCreateField(polyLayer, polyLayer.pendingFields(), lengthFieldName) idxCount, fieldList = utils.findOrCreateField(polyLayer, fieldList, countFieldName) writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList, polyProvider.geometryType(), polyProvider.crs()) spatialIndex = utils.createSpatialIndex(lineLayer) lineProvider.rewind() lineProvider.select() allAttrs = polyLayer.pendingAllAttributesList() polyLayer.select(allAttrs) ftLine = QgsFeature() ftPoly = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() distArea = QgsDistanceArea() current = 0 features = QGisLayers.features(polyLayer) total = 100.0 / float(len(features)) hasIntersections = False for ftPoly in features: inGeom = QgsGeometry(ftPoly.geometry()) atMap = ftPoly.attributeMap() count = 0 length = 0 hasIntersections = False lines = spatialIndex.intersects(inGeom.boundingBox()) if len(lines) > 0: hasIntersections = True if hasIntersections: for i in lines: lineProvider.featureAtId(int(i), ftLine) tmpGeom = QgsGeometry(ftLine.geometry()) if inGeom.intersects(tmpGeom): outGeom = inGeom.intersection(tmpGeom) length += distArea.measure(outGeom) count += 1 outFeat.setGeometry(inGeom) outFeat.setAttributeMap(atMap) outFeat.addAttribute(idxLength, QVariant(length)) outFeat.addAttribute(idxCount, QVariant(count)) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer