Daha çox

PyQGIS istifadə edərək poliqonda nöqtələrin sayılması

PyQGIS istifadə edərək poliqonda nöqtələrin sayılması


QGIS-Python inteqrasiyasından istifadə edərək çoxbucaqlı nöqtələrin sayını hesablamaq üçün sadə bir inteqrasiya varmı?

Başqa sözlə, python istifadə edərək QGIS poliqonundakı nöqtələr üçün python skriptimizdə istifadə edə biləcəyimiz əvvəlcədən müəyyən edilmiş funksiyalar varmı?


Mükəmməl metodlar artıq yerləşdirilib! Ayrıca alətlər var Alət qutusu işlənir skriptinizdən zəng edə biləcəyiniz (bu, skript işlədiyinizi düşünürəm içəri QGIS):

  • Çoxbucaqlı nöqtələri sayın
  • Çoxbucaqlı nöqtələri hesablayır (ağırlıqlı)
  • Poligonda misilsiz nöqtələri sayın

İlk aləti götürərək aşağıdakıları istifadə edərək zəng edə bilərsiniz.

idxal emalı Nəticə = "path  to  saved_output.shp" processing.runalg ("qgis: countpointsinpolygon", "path  to  polygon_layer.shp", "path  to  point_layer.shp", 'NUMPOINTS', Result)

haradaNÖMRƏLƏRbal sayını saxlayan sahənin adıdır.

QGIS 2.8.2-Wien istifadə edirəm, v2.9.3 plaginini işləyirəm. Ümid edirəm kömək edər!


Cavabımı cari atlas xüsusiyyətindəki nöqtələri sayan paralel sualdan yenidən yazdım: QGIS 2.8-də mövcud Print bəstəkar atlas xüsusiyyətindəki balları necə hesablamaq olar?

İfadə redaktorunda yeni bir funksiya yaradın:

qgis.core import * dan qgis.gui import * qgis.utils from iface @qgsfunction (args = "auto", group = "Custom") def countPointsInPolygon (pointLayerName, geom, feature, parent): # Əgər nöqtə geomu boş, 0 qaytarın, əgər (geom None deyil): return 0 # layner name from point lay reference reference pointLayer = QgsMapLayerRegistry.instance (). mapLayersByName (pointLayerName) [0] # PointLayer None olduqda qat tapılmadığını qaldırın: İstisnanı qaldırın (") Layer tapılmadı: "+ pointLayerName) # Cari çoxbucaqlı xüsusiyyət daxilində sayma nöqtəsi countPoint = 0 for pointFeature in pointLayer.getFeatures (): pointGeom = pointFeature.geometry () if (pointGeom None): pointGeom.within (geom) əgər davam edin: countPoint + = 1 countPoint qaytarır

Onu 'çox nöqtələr' nöqtə qatının adı olduğu çoxbucaqlı təbəqədə bir ifadə olaraq istifadə edin:countPointsInPolygon ('nöqtələr', $ həndəsə)

Bunun bir ifadə olaraq həyata keçirilməsini istəmirsinizsə, funksiyanı hər bir xüsusiyyət üçün countPointsInPolygon çağıran çoxbucaqlı təbəqənin xüsusiyyətlərini dövrələyən öz skriptinizdən çağıra bilərsiniz.


ən sadə yol "atributu məkana görə qoşul" istifadə etməkdir. Bunu menyudan (məlumatların idarə edilməsi> Yerə görə qoşulma) və ya "kəsişən xüsusiyyətlərin xülasəsini götür" seçimi ilə Python ("qgis: joinbylocation") ilə edə bilərsiniz, hər nöqtədə "1" olan bir sahənin cəmini hesablayın. .


Heç vaxt QGIS-in python API-si ilə işləməmişəm, buna görə cavabım çılğın bir təxmindir. Ancaq görünür ki, QGIS djangoya bənzər GEOS həndəsə obyektlərindən istifadə edir. Beləliklə, bu QGIS-də də işləyə bilər:

len (geom.coords)

Çoxbucağınızın qgsfeature olduğunu düşünürəm:

http://qgis.org/api/classQgsFeature.html

Test etmədim, amma işləyəcəyini düşünürəm:

len (çoxbucaqlı.geometriya (). asPolygon ())

polygon.geometry () bir qgsgeometry sinfi verir.

qgsgeometry.asPolygon () çoxbucağınızın nöqtəsinin siyahısını verir.

Düzəliş: Çoxbucağın içərisindəki nöqtələri istəyirsiniz? Başqa bir təbəqədə nöqtələriniz var və çoxbucağınızın hansının kəsişdiyini görəsən?


Videoya baxın: Calculation of Area using Python program in QGIS