अगला कोड QGIS के मेरे पायथन कंसोल में काम करता है। यह बहुभुज के साथ एक स्मृति परत का उत्पादन करता है जो लाल क्षेत्रों द्वारा> 90% ओवरलैप किया जाता है।
mapcanvas = iface.mapCanvas()
layers = mapcanvas.layers()
#for polygon_intersects
feats_lyr1 = [ feat for feat in layers[0].getFeatures() ]
#for xwRcl
feats_lyr2 = [ feat for feat in layers[1].getFeatures() ]
selected_feats = []
for i, feat1 in enumerate(feats_lyr1):
area1 = 0
area2 = 0
for j, feat2 in enumerate(feats_lyr2):
if feat1.geometry().intersects(feat2.geometry()):
area = feat1.geometry().intersection(feat2.geometry()).area()
print i, j, area, feat2.attribute('class')
if feat2.attribute('class') == 1:
area1 += area
else:
area2 += area
crit = area1/(area1 + area2)
print crit
if crit > 0.9:
selected_feats.append(feat1)
epsg = layers[0].crs().postgisSrid()
uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
mem_layer = QgsVectorLayer(uri,
"mem_layer",
"memory")
prov = mem_layer.dataProvider()
for i, feat in enumerate(selected_feats):
feat.setAttributes([i])
prov.addFeatures(selected_feats)
QgsMapLayerRegistry.instance().addMapLayer(mem_layer)
मैंने इन दो वेक्टर परतों के साथ कोड आज़माया:
परिणामों की पुष्टि के लिए QGIS के पायथन कंसोल पर कोड चलाने के बाद, अनुक्रमणिका i, सम्मिलित सुविधाएँ, चौराहे क्षेत्र, polygons_intersects में फ़ील्ड की विशेषता (लाल क्षेत्रों के लिए 1 और ग्रे क्षेत्रों के लिए 2) और अतिव्यापी मानदंड मुद्रित किए गए थे। ।
0 0 9454207.56892 1
0 1 17429206.7906 2
0 2 10326705.2376 2
0 4 40775341.6814 1
0 5 26342803.0964 2
0 7 11875753.3216 2
0.432253120382
1 6 1198411.02558 2
1 7 1545489.96614 2
1 10 27511427.9909 1
0.90930850584
2 7 750262.940888 2
2 8 12012343.5859 1
0.941213972294
3 6 23321277.5158 2
0.0
अगली मेमोरी में बनाई गई मेमोरी लेयर (ग्रीन फीचर्स) देखी जा सकती है। जैसी उम्मीद थी।