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


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.