أكثر

QGIS Processing Input CRS من طبقة الإدخال

QGIS Processing Input CRS من طبقة الإدخال


أقوم بإنشاء خوارزمية معالجة تتطلب من المستخدم إدخال العديد من المعلمات بما في ذلك طبقة الإدخال ومخرج CRS. في الوقت الحالي ، يتم تعيين الأداة افتراضيًا على SRID 4326. أرغب في تعيين معلمة CRS افتراضيًا على أي طبقة يتم تحديدها كطبقة إدخال. هل هذا ممكن؟

لا أرى أي شيء قيد المعالجة. هل سأضطر إلى الدخول في عناصر Qt الداخلية وربط معالج حدث لتغيير اختيار الطبقة؟

الكود الحالي:

self.addParameter (ParameterCrs (self.TARGET_CRS، self.tr ('Target CRS')، 'EPSG: 4326'))

الكود الزائف المطلوب:

self.addParameter (ParameterCrs (self.TARGET_CRS، self.tr ('Target CRS')، Processing.parameters.getCrsFromInputLayer (INPUT_LAYER)))

أحاول القيام بذلك في البرنامج المساعد Multi Ring Buffer الخاص بي ، ولكن ربما يكون هناك حل أكثر أناقة.

يتم ذلك بعد الحصول على الطبقة المحددة وتطبيق CRS للطبقات المحددة ، من خلال AuthID ، على طبقة تم إنشاؤها حديثًا. إذا لم يتم التعرف على AuthID ، يطالب QGIS بإدخال واحد صالح.

# تحقق من CRS الحالي للطبقة النشطة buffer_crs_object = self.iface.activeLayer (). crs () # احصل على AuthID buffer_crs = buffer_crs_object.authid () # قم بتطبيق ذلك على الطبقة التي تم إنشاؤها إذا تم التعرف على buffer_input_crs = "Polygon؟ crs =٪ s "٪ buffer_crs # إنشاء طبقة متجه ذاكرة فارغة layer_name = active_vl.name () vl = QgsVectorLayer (buffer_input_crs ،"٪ s_MultiRingBuffer "٪ layer_name ،" memory ")

الكود الكامل: https://github.com/HeikkiVesanto/QGIS_Multi_Ring_Buffer/blob/master/multi_ring_buffer.py


شاهد الفيديو: QGIS + GeoServer. Layer publishing