أكثر

Vector -> أدوات الهندسة -> استخراج مكافئ للعقد في PyQGIS API

Vector -> أدوات الهندسة -> استخراج مكافئ للعقد في PyQGIS API


سؤالي مباشر إلى حد ما.

هل يعرف أي شخص مكافئ PyQGIS لأداة Extract Nodes في QGIS؟ لا يبدو أنني أجدها في وثائق API. إذا قمت بذلك ، يرجى مشاركة الوثائق أيضًا.


يمكنك أن تأخذنقاط الاستخراج ()وظيفة من البرنامج المساعد fTools بواسطة Carson Farmer:

# إنشاء قائمة QgsPoints من هندسة الإدخال (يمكن أن تكون نقطة أو خطًا أو مضلعًا) def extractPoints (geom): multi_geom = QgsGeometry () temp_geom = [] if geom.type () == 0: # إنها نقطة إذا كانت geom. isMultipart (): temp_geom = geom.asMultiPoint () else: temp_geom.append (geom.asPoint ()) elif geom.type () == 1: # إنه سطر إذا geom.isMultipart (): multi_geom = geom.asMultiPolyline ( ) #multi_geog هو متعدد الأسطر لـ i في multi_geom: #i هو خط temp_geom.extend (i) else: temp_geom = geom.asPolyline () elif geom.type () == 2: # إنه مضلع إذا geom.isMultipart ( ): multi_geom = geom.asMultiPolygon () #multi_geom هو متعدد المضلع لـ i في multi_geom: #i هو مضلع لـ j في i: #j هو خط temp_geom.extend (j) else: multi_geom = geom.asPolygon () # multi_geom هو مضلع لـ i في multi_geom: #i عبارة عن خط temp_geom.extend (i) # FIXME - إذا لم يكن هناك أي من geoms (نقطة ، خط ، مضلع) تظهر رسالة تحذير إرجاع temp_geom

ثم قم فقط بتمرير علم الهندسة الخاص بك كحجة:

النقاط = extractPoints (feature.geometry ())

نقاطسوف تحتوي على قائمة بايثون بالنقاط (أزواج من الإحداثيات). يمكنك الوصول ، على سبيل المثال ، إلىصتنسيق النقطة الأولى مثل هذا:

نقاط الطباعة [0] [1]

لقد اختبرته على QGIS 2.6.1 ، باستخدام QGIS Python Console.

بشكل عام ، بالنسبة لأدوات المعالجة الجغرافية للمتجهات ، لديك كود مصدر Python في متناول اليد. في جهاز الكمبيوتر الخاص بي ، يقع fTools في/ usr / share / qgis / python / plugins / fTools /


إذا كنت مرتاحًا مع Python ، فأنت تحتاج فقط إلى Python الكلاسيكية وقائمة الفهم وفهم PyQGIS: Geometry Handling:

  • تم بناء نقطة في PyQGIS باستخدامQgsPoint (س ، ص);
  • A LineString معQgsGeometry.fromPolyline ([QgsPoint (x1، y1)، QgsPoint (x2، y2)]))
  • مضلع معQgsGeometry.fromPolygon ([[QgsPoint (x1، y1)، QgsPoint (x2، y2)، QgsPoint (x3، y3)، QgsPoint (x1، y1)]])

إذن ، الحلقة الخطية / حدود المضلع هي[[QgsPoint (x1، y1)، QgsPoint (x2، y2)، QgsPoint (x3، y3)، QgsPoint (x1، y1)]] [0] = [QgsPoint (x1، y1)، QgsPoint (x2، y2) ، QgsPoint (x3، y3)، QgsPoint (x1، y1)].

باستخدام طبقة المضلع كمثال:

layer = qgis.utils.iface.activeLayer () # افحص العنصر الأول elem = layer.getFeatures (). next () geom = elem.geometry () # or elem = layer.getFeatures (). next (). geometry () ) first_poly = geom.asPolygon () print first_poly [[(6.97738،53.361) ، (7.18994،52.8886) ، (6.70577،52.5698) ، (7.16632،52.2509) ، (6.59948،51.8258) ، (6.04445،51.8258) ، (5.87913 ، 50.763) ، (5.70199 ، 50.8575) ، (5.89093،51.2708) ، (5.31229،51.2472) ، (5.08791،51.4125) ، (4.69821،51.4833) ، (4.22584،51.3416) ، (3.49368،51.3534) ، (4.02509،52.062) ) ، (4.82811،52.9241) ، (5.18239،52.4399) ، (5.61932،52.5934) ، (5.59571،52.8532) ، (5.40676،52.9004) ، (5.43038،53.2547) ، (6.39873،53.4555) ، (6.74119،53.4791) ، (6.97738،53.361)]]

الآن ، إذا كنت تريد الحلقة الخطية لهذا المضلع:

ring = first_poly [0]) print ring # = قائمة إحداثيات النقاط [(6.97738،53.361)، (7.18994،52.8886)، (6.70577،52.5698)، (7.16632،52.2509)، (6.59948،51.8258)، ( 6.04445،51.8258) ، (5.87913،50.763) ، (5.70199،50.8575) ، (5.89093،51.2708) ، (5.31229،51.2472) ، (5.08791،51.4125) ، (4.69821،51.4833) ، (4.22584،51.3416) ، (3.49368 ، 51.3534) ، (4.02509،52.062) ، (4.82811،52.9241) ، (5.18239،52.4399) ، (5.61932،52.5934) ، (5.59571،52.8532) ، (5.40676،52.9004) ، (5.43038،53.2547) ، (6.39873،53.4555) ، (6.74119،53.4791)، (6.97738،53.361)]

والعقد / النقاط:

بالنسبة إلى pt في الحلقة: اطبع QgsPoint (pt) (6.97738،53.361) (7.18994،52.8886) (6.70577،52.5698) ...

أو

ring = QgsGeometry.fromPolyline (first_poly [0]) للنقطة في الحلقة .asPolyline (): نقطة الطباعة

لذلك يتم تقديم قائمة العقد من خلال:

العقد = [نقطة لنقطة في ring.asPolyline ()] = [نقطة لنقطة في الهندسة [0] .asPolygon () [0]]

ويمكنك استخراج جميع عقد طبقة Polygon باستخدام:

للعنصر في layer.getFeatures (): للنقطة في elem.geometry (). asPolygon () [0]: نقطة طباعة

يمكنك أن تجرب بقائمة استيعاب مزدوجة ولكن PyQGIS لا تحبهم كثيرًا ...

العقد = [نقطة نقطة في elem.geometry (). asPolygon () [0] للعنصر في layer.getFeatures ()] عقد الطباعة [(6.97738،53.361)، (6.97738،53.361)، (6.97738،53.361)، ( 7.18994،52.8886) ، (7.18994،52.8886) ، (7.18994،52.8886) ، (6.70577،52.5698) ، (6.70577،52.5698) ، (6.70577،52.5698) ، (7.16632،52.2509) ، (7.16632،52.2509) ، (7.16632 ، 52.2509) ، (6.59948،51.8258) ، (6.59948،51.8258) ، (6.59948،51.8258) ، (6.04445،51.8258) ، (6.04445،51.8258) ، (6.04445،51.8258) ، (5.87913،50.763) ، (5.87913،50.763) ، (5.87913،50.763) ، (5.70199،50.8575) ، (5.70199،50.8575) ، (5.70199،50.8575) ، (5.89093،51.2708) ، (5.89093،51.2708) ، (5.89093،51.2708) ، (5.31229،51.2472) ، ( 5.31229،51.2472) ، (5.31229،51.2472) ، (5.08791،51.4125) ، (5.08791،51.4125) ، (5.08791،51.4125) ، (4.69821،51.4833) ، (4.69821،51.4833) ، (4.69821،51.4833) ، (4.22584 ، 51.3416) ، (4.22584،51.3416) ، (4.22584،51.3416) ، (3.49368،51.3534) ، (3.49368،51.3534) ، (3.49368،51.3534) ، (4.02509،52.062) ، (4.02509،52.062) ، (4.02509،52.062) ، (4.82811،52.9241)، (4.82811،52.9241)، (4.82811،52) .9241) ، (5.18239،52.4399) ، (5.18239،52.4399) ، (5.18239،52.4399) ، (5.61932 ، 52.5934) ، (5.61932 ، 52.5934) ، (5.61932 ، 52.5934) ، (5.59571 ، 52.8532) ، (5.59571 ، 52.8532) ) ، (5.59571،52.8532) ، (5.40676،52.9004) ، (5.40676،52.9004) ، (5.40676،52.9004) ، (5.43038،53.2547) ، (5.43038،53.2547) ، (5.43038،53.2547) ، (6.39873،53.4555) ، (6.39873،53.4555) ، (6.39873،53.4555) ، (6.74119،53.4791) ، (6.74119،53.4791) ، (6.74119،53.4791) ، (6.97738،53.361) ، (6.97738،53.361) ، (6.97738،53.361)]

وعقد طبقة LineStrings:

للعنصر في layer.getFeatures (): للنقطة في elem.geometry (). asPolyline (): نقطة الطباعة

أو بنفس القيود:

العقد = [نقطة نقطة في elem.geometry (). asPolyline () للعنصر في layer.getFeatures ()]

هو نفسه بالنسبة لـ MultiGeometries ، أضف حلقة for /


Vector -> أدوات الهندسة -> استخراج مكافئ للعقد في PyQGIS API - أنظمة المعلومات الجغرافية

يستخدم مؤشر نقاء البكسل (PPI) للعثور على وحدات البكسل الأكثر نقاءً (أقصى) طيفيًا في الصور متعددة الأطياف وفائقة الأطياف. تتوافق هذه عادةً مع الأعضاء النهائيين المختلط. يتم حساب PPI عن طريق الإسقاط المتكرر لمخططات التشتت n-D على متجه وحدة عشوائي. يسجل ENVI وحدات البكسل القصوى في كل إسقاط (تلك البكسلات التي تقع في نهايات متجه الوحدة) ويلاحظ العدد الإجمالي لمرات وضع علامة على كل بكسل على أنها متطرفة. يتم إنشاء صورة Pixel Purity حيث تتوافق قيمة كل بكسل مع عدد المرات التي تم فيها تسجيل هذا البكسل على أنه أقصى.

يمكن لوظيفة PPI إنشاء نطاق إخراج جديد أو متابعة تكراراته وإضافة النتائج إلى نطاق إخراج موجود. يتم تشغيل PPI عادةً على نتيجة تحويل MNF ، باستثناء نطاقات الضوضاء. عادة ما تستخدم نتائج PPI كمدخل في متخيل n-D.

يمكنك كتابة برنامج نصي لإنشاء صورة PPI باستخدام ENVIPixelPurityIndexTask.

ملحوظة: راجع معالج الساعة الرملية الطيفية للحصول على إرشادات حول تدفق معالجة الساعة الرملية في ENVI ، بما في ذلك PPI ، للعثور على الأعضاء النهائيين الطيفيين للصورة وتعيينها من بيانات فائقة الأطياف أو متعددة الأطياف.

راجع الأقسام التالية:


شاهد الفيديو: QGIS Python PyQGIS - Loading and symbolizing vector layers