अजगर कंसोल से बहुभुज कैसे आकर्षित करें?


14

मैं PyQGIS कुकबुक में ज्योमेट्री हैंडलिंग पर पेज को विजिट और रीविजिट कर रहा हूं: http://documentation.qgis.org/2.0/en/docs/pyqgis_developer_cookbook/geometry.html। यह पता नहीं लग सकता कि कैसे प्राप्त करें। बहुभुज को पायथन कंसोल से खींचना है। क्या कोई मदद कर सकता है?

जवाबों:


27

यह वास्तव में जटिल नहीं है, वेक्टर में मेमोरी प्रदाता को देखें :

  • एक बिंदु के साथ बनाया गया है QgsPoint(x,y)औरQgsGeometry.fromPoint(QgsPoint(x,y))
  • एक लाइन दो बिंदुओं के साथ बनाई गई है: QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))
  • बहुभुज बिंदुओं की सूची के साथ बनाया गया है: QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])

1) दो अंक:

# create a memory layer with two points
layer =  QgsVectorLayer('Point', 'points' , "memory")
pr = layer.dataProvider() 
# add the first point
pt = QgsFeature()
point1 = QgsPoint(50,50)
pt.setGeometry(QgsGeometry.fromPoint(point1))
pr.addFeatures([pt])
# update extent of the layer
layer.updateExtents()
# add the second point
pt = QgsFeature()
point2 = QgsPoint(100,150)
pt.setGeometry(QgsGeometry.fromPoint(point2))
pr.addFeatures([pt])
# update extent
layer.updateExtents()
# add the layer to the canvas
QgsMapLayerRegistry.instance().addMapLayers([layer])

यहाँ छवि विवरण दर्ज करें

2) दो बिंदुओं को जोड़ने वाली रेखा

layer =  QgsVectorLayer('LineString', 'line' , "memory")
pr = layer.dataProvider() 
line = QgsFeature()
line.setGeometry(QgsGeometry.fromPolyline([point1,point2]))
pr.addFeatures([line])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])

यहाँ छवि विवरण दर्ज करें

3) अंक को कवर करने वाला बहुभुज

layer =  QgsVectorLayer('Polygon', 'poly' , "memory")
pr = layer.dataProvider() 
poly = QgsFeature()
points = [point1,QgsPoint(50,150),point2,QgsPoint(100,50)]
# or points = [QgsPoint(50,50),QgsPoint(50,150),QgsPoint(100,150),QgsPoint(100,50)] 
poly.setGeometry(QgsGeometry.fromPolygon([points]))
pr.addFeatures([poly])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])

यहाँ छवि विवरण दर्ज करें

-

QGIS 3.0 और बाद में परिवर्तन:

QGIS 3.0 के लिए और इसके बाद के संस्करण उपरोक्त वर्कफ़्लो अभी भी सही है, लेकिन कुछ फ़ंक्शन बदल गए हैं। Https://qgis.org/api/api_break.html देखें

उपरोक्त कोड को अपडेट करने के लिए, निम्नलिखित कार्यों को बदलें:

QgsPoint -> QgsPointXY
QgsfromPoint -> QgsfromPointXY
QgsfromPolyline -> QgsfromPolylineXY
QgsfromPolygon -> QgsfromPolylineXY
QgsfromPolyline -> QgsfromPolylineXY
QgsMapLayerRegistry -> QgsProject

कोड के लिए बहुत बहुत धन्यवाद। मैं सोच रहा था कि कोड चलाने के बाद मैं सीआरएस चयन संवाद से कैसे छुटकारा पा सकता हूं?
वणिक

मैं शैली कैसे जोड़ सकता हूं?
changhangir

यह अद्यतन मेरे लिए अत्यंत उपयोगी था, लेकिन यह दस्तावेज में नहीं लगता है- मैंने अपने उपकरणों के लिए इस उत्तर का उपयोग कई बार किया है। बहुत बहुत धन्यवाद!
जीआईएस_पी

3

बस परत परिभाषा में सीआरएस का चयन करें: QgsVectorLayer('Polygon?crs=epsg:2154', 'poly' , "memory")उदाहरण के लिए (यहां ईपीएसजी 2154 लाम्बर्ट 93 प्रक्षेपण के लिए है, मेट्रोपॉलिटन फ्रांस में मानक है, लेकिन आप जो चाहें डाल सकते हैं)


मैं शैली कैसे जोड़ सकता हूं?
changhangir
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.