🗺️ PyQGIS გეოსივრცითი გამოთვლების სკრიპტები¶
ეს დოკუმენტი შეიცავს Python სკრიპტებს QGIS-ში გეოსივრცითი გამოთვლების შესასრულებლად, მათ შორის:
- ხაზოვანი შრის სიგრძის გამოთვლა
- პოლიგონალური შრის ფართობისა და პერიმეტრის გამოთვლა
- მოსახლეობის სიმჭიდროვის გამოთვლა ცხრილში
ყველა სკრიპტი იყენებს QGIS-ის Python API-ს (PyQGIS) და ითვალისწინებს შესაბამისი შრეების არსებობას QGIS პროექტში.
1️⃣ ხაზოვანი შრის სიგრძის გამოთვლა¶
ეს სკრიპტი ითვლის ხაზოვანი შრის (მაგ., Rivers) ობიექტების სიგრძეს და ინახავს შედეგს ახალ ველში Len_M.
📜 კოდი¶
# შრის მიღება სახელით 'Rivers'
layers = QgsProject.instance().mapLayersByName('Rivers')
layer = layers[0]
# მონაცემთა პროვაიდერზე წვდომა
pv = layer.dataProvider()
# ახალი ველის 'Len_M' დამატება სიგრძისთვის (double ტიპი)
pv.addAttributes([QgsField('Len_M', QVariant.Double)])
layer.updateFields()
# გამოთვლის გამოსახულების განსაზღვრა
expr1 = QgsExpression('length($geometry)')
# გამოსახულების კონტექსტის შექმნა
cntx = QgsExpressionContext()
cntx.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))
# შრის რედაქტირება და სიგრძის გამოთვლა
with edit(layer):
for i in layer.getFeatures():
cntx.setFeature(i)
i['Len_M'] = expr1.evaluate(cntx)
layer.updateFeature(i)
💡 განმარტება¶
- შრის არჩევა: იღებს შრეს სახელით
'Rivers'QGIS პროექტიდან. - ველი: ქმნის ახალ ველს
Len_Mთითოეული ობიექტის სიგრძის შესანახად. - გამოსახულება: გამოიყენება
length($geometry)თითოეული ობიექტის გეომეტრიის სიგრძის გამოსათვლელად. - განახლება: თითოეულ ობიექტზე ხდება გამოსახულების შეფასება და
Len_Mველის განახლება.
2️⃣ პოლიგონალური შრის ფართობისა და პერიმეტრის გამოთვლა¶
ეს სკრიპტი ითვლის პოლიგონალური შრის (მაგ., nakveti) ობიექტების ფართობსა და პერიმეტრს და შედეგებს ინახავს ახალ ველებში Area_sq_m და Perimeter.
📜 კოდი¶
# შრის მიღება სახელით 'nakveti'
layers = QgsProject.instance().mapLayersByName('nakveti')
layer = layers[0]
# მონაცემთა პროვაიდერზე წვდომა
pv = layer.dataProvider()
# ახალი ველების დამატება ფართობისა და პერიმეტრისთვის
pv.addAttributes([QgsField('Area_sq_m', QVariant.Double)])
pv.addAttributes([QgsField('Perimeter', QVariant.Double)])
layer.updateFields()
# გამოთვლის გამოსახულებების განსაზღვრა
expr1 = QgsExpression('area($geometry)')
expr2 = QgsExpression('perimeter($geometry)')
# გამოსახულების კონტექსტის შექმნა
cntx = QgsExpressionContext()
cntx.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))
# შრის რედაქტირება და ფართობისა და პერიმეტრის გამოთვლა
with edit(layer):
for i in layer.getFeatures():
cntx.setFeature(i)
i['Area_sq_m'] = expr1.evaluate(cntx)
i['Perimeter'] = expr2.evaluate(cntx)
layer.updateFeature(i)
💡 განმარტება¶
- შრის არჩევა: იღებს შრეს სახელით
'nakveti'. - ველი: ქმნის ორ ახალ ველს:
Area_sq_mფართობისთვის დაPerimeterპერიმეტრისთვის. - გამოსახულებები:
area($geometry)— ითვლის ფართობსperimeter($geometry)— ითვლის პერიმეტრს- განახლება: თითოეულ ობიექტზე ხდება ორივე გამოსახულების შეფასება და ველების განახლება.
3️⃣ მოსახლეობის სიმჭიდროვის გამოთვლა ცხრილში¶
ეს სკრიპტი ითვლის მოსახლეობის სიმჭიდროვეს შრეში (მაგ., Municipalitys) ფორმულით:
[ D = \frac{P}{A} ]
სადაც:
- D — მოსახლეობის სიმჭიდროვე
- P — მოსახლეობის რაოდენობა (ველი
Mosaxl_200) - A — ფართობი (კვ. მეტრში ან კვ. კმ-ში)
📜 კოდი¶
# შრის მიღება სახელით 'Municipalitys'
layers = QgsProject.instance().mapLayersByName('Municipalitys')
layer = layers[0]
# მონაცემთა პროვაიდერზე წვდომა
pv = layer.dataProvider()
# ახალი ველების დამატება ფართობის, ფართობის კვ.კმ-ში და სიმჭიდროვისთვის
pv.addAttributes([
QgsField('area', QVariant.Double),
QgsField('area_km', QVariant.Double),
QgsField('simwidrove', QVariant.Double)
])
layer.updateFields()
# გამოთვლის გამოსახულებების განსაზღვრა
expr1 = QgsExpression('$area') # ფართობი კვ. მეტრში
expr2 = QgsExpression('"area"/1000000') # ფართობი კვ. კილომეტრში
expr3 = QgsExpression('"Mosaxl_200"/area_km') # მოსახლეობის სიმჭიდროვე
# გამოსახულების კონტექსტის შექმნა
cntx = QgsExpressionContext()
cntx.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))
# ფართობის გამოთვლა
with edit(layer):
for i in layer.getFeatures():
cntx.setFeature(i)
i['area'] = expr1.evaluate(cntx)
layer.updateFeature(i)
# ფართობის გარდაქმნა კვ. კილომეტრში
with edit(layer):
for i in layer.getFeatures():
cntx.setFeature(i)
i['area_km'] = expr2.evaluate(cntx)
layer.updateFeature(i)
# მოსახლეობის სიმჭიდროვის გამოთვლა
with edit(layer):
for i in layer.getFeatures():
cntx.setFeature(i)
i['simwidrove'] = expr3.evaluate(cntx)
layer.updateFeature(i)
💡 განმარტება¶
- შრის არჩევა: იღებს შრეს სახელით
'Municipalitys'. - ველი: ქმნის სამ ახალ ველს —
area(კვ.მ),area_km(კვ.კმ),simwidrove(სიმჭიდროვე). - გამოსახულებები:
expr1:$area— ითვლის ფართობს კვ. მეტრშიexpr2:"area"/1000000— გარდაქმნის ფართობს კვ. კილომეტრშიexpr3:"Mosaxl_200"/area_km— ითვლის მოსახლეობის სიმჭიდროვეს- განახლება: გამოთვლები სრულდება სამ ცალკე ციკლში, რათა სწორად შეიქმნას დამოკიდებულებები (
area→area_km→simwidrove).
⚙️ შენიშვნები¶
- წინაპირობები: დარწმუნდით, რომ შრეები (
Rivers,nakveti,Municipalitys) არსებობს QGIS პროექტში და შეიცავს საჭირო ველებს (მაგ.,Mosaxl_200მოსახლეობისთვის). - შესრულება: სკრიპტები უნდა გაეშვას QGIS-ის Python კონსოლში ან QGIS პლაგინის ფარგლებში.
- შეცდომების მართვა: რეკომენდებულია შრის არსებობისა და ველების ხელმისაწვდომობის შემოწმება.
- ეფექტურობა: დიდი მონაცემთა ნაკრებისთვის განიხილეთ ოპტიმიზაცია (მაგ., ერთჯერადი რედაქტირების სესიები).
📘 Autogenerated educational resource for QGIS scripting with PyQGIS.