PyQGIS में बफरिंग?


17

मैं QGIS में सरल अजगर लिपियों को करने के लिए कुछ उदाहरणों की तलाश कर रहा हूं। मैं डेटासेट पर बफर विश्लेषण कैसे करूंगा?

मैं मैनुअल और क्यूजीआईएस अजगर में बहुत कुछ ढूंढ नहीं पा रहा हूं जो एस्री प्रलेखन से काफी मेल खाता है।

जवाबों:


5

PyQGIS कुकबुक पर एक नजर है ।

एक वेक्टर परत पर पुनरावृति कैसे करें, इस पर उदाहरण का अनुसरण करें। ज्यामिति तक पहुंचकर, आप बफर () विधि को लागू कर सकते हैं। QGIS API भी देखें: http://www.qgis.org/api/classQgsGeometry.html#a98208752e1beb1a5d3a7eedffbfdb2e4


12

आपके पास PyQGIS कंसोल द्वारा प्राप्त करने के विभिन्न तरीके हैं:

  1. आरागॉन का सुझाव;
  2. QgsGeometryAnalyzer वर्ग का उपयोग करके:
from qgis.utils import iface
from qgis.analysis import QgsGeometryAnalyzer 
mc = iface.mapCanvas() 
layer = mc.currentLayer()
QgsGeometryAnalyzer().buffer(layer, "path_to/output.shp", 500, False, False, -1)
  1. Sextante वर्ग का उपयोग करके:
from sextante.core.Sextante import Sextante
Sextante.runalg("ftools:fixeddistancebuffer","input_path.shp", False, 500, 5, True, "output_path_buffer.shp")

Sextante.alghelp("ftools:fixeddistancebuffer")PyQGIS कंसोल में sextante पैरामीटर टाइप करने के लिए ।

उम्मीद है की यह मदद करेगा !


11

यदि आप मूल कोड चाहते हैं, तो आप कोशिश कर सकते हैं:

#Don't forget to Toggle Editing

lyr = qgis.utils.iface.activeLayer()
provider = lyr.dataProvider()
feat= QgsFeature()
alls = provider.attributeIndexes()
provider.select(alls)

while provider.nextFeature(feat):
    buff = feat.geometry().buffer(5,2)
    lyr.dataProvider().changeGeometryValues({feat.id(): buff})

धन्यवाद - QgsFeature लेयर नेम है या इसमें एक निरपेक्ष पथ शामिल होना चाहिए? और बफर (5,2) वह दूरी है?
GIS डैनी

1
आप इसे लूप के लिए भी कर सकते हैं और अगर आप की जरूरत नहीं है तो आप विशेषताओं को चुनने से बच सकते हैं। gith.github.com/4094707
नाथन डब्ल्यू

1
@GISDanny QgsFeature एक विशेषता के लिए एक कंटेनर वर्ग है जैसे कि QGIS में विशेषता और ज्यामिति। परत qgis.utils.iface.activeLayer () बिट है, जो QGIS में वर्तमान में सक्रिय परत का उपयोग करेगा।
नाथन डब्ल्यू

क्या पायथन में बफरिंग करते समय इकाइयों को निर्दिष्ट करना संभव है? मैं एक बिंदु परत को बफर करने की कोशिश करता हूं, मेरा मानना ​​है कि मैंने पैरों में इकाइयों के साथ एक सीआरएस के लिए सेट किया है, लेकिन मुझे जो बफ़र्स मिल रहे हैं वे बहुत बड़े हैं- बिंदु परत मूल रूप से सीएसवी से लेट लॉन्ग डोरियों के साथ आयात की गई थी, लेकिन जब मैंने एक वेक्टर परत बनाई थी मैंने एक स्थानीय प्रणाली निर्दिष्ट की। स्पष्ट रूप से कुछ गलत है।
क्फ्फाल

9

आखिरी जवाब में जोड़ने के लिए बस एक छोटी सी बात।

किसी दिए गए विषय के बारे में SEXTANTE एल्गोरिथ्म की खोज करने के लिए, Sextante.alglist () का उपयोग करें। उदाहरण के लिए, "बफर" वाली किसी चीज़ को खोजने के मामले में, आप ऐसा करेंगे

>>> from sextante.core.Sextante import Sextante
>>> Sextante.alglist("buffer")

और आपको मिलेगा:

Grid Buffer------------------------------------------>saga:gridbuffer
Grid Proximity Buffer-------------------------------->saga:gridproximitybuffer
Shapes Buffer---------------------------------------->saga:shapesbuffer
Threshold Buffer------------------------------------->saga:thresholdbuffer
Fixed distance buffer-------------------------------->ftools:fixeddistancebuffer
Variable distance buffer----------------------------->ftools:variabledistancebuffer
r.buffer - Creates a raster map layer showing buffer zones surrounding cells that contain non-NULL category values.--->grass:r.buffer
v.buffer.angle--------------------------------------->grass:v.buffer.angl
v.buffer.column - Creates a buffer around features of given type.--->grass:v.buffer.column
v.buffer.distance - Creates a buffer around features of given type.--->grass:v.buffer.distance
v.buffer.minordistance------------------------------->grass:v.buffer.minordistance

इस तरह, आप कॉल करने के लिए एल्गोरिथ्म का नाम पा सकते हैं (ftools: फिक्स्डस्टांसबफ़र, ऊपर दिए गए उत्तर में प्रस्तावित उदाहरण में)

आप अपनी स्क्रिप्ट को SEXTANTE में एक नए एल्गोरिथ्म में बदल सकते हैं। SEXTANTE प्रलेखन में उसके बारे में विस्तृत जानकारी है।


कि आपके sextante ब्लॉग पर उल्लेख के लायक एक महान टिप। मैं इस कल की तलाश में था।
UnderDark
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.