أكثر

النقطة المركزية المضلع تنسق خطأ في التحديث

النقطة المركزية المضلع تنسق خطأ في التحديث


بعد أسبوع من القتال غير الناجح ، أجبرت على طلب مساعدتك.

لقد قمت بإنشاء جدول "t_excavations" يحتوي على الحقول "id_excavation" و "geom" (MULTIPOLYGONE) و "خطوط الطول" و "خطوط العرض"

إنشاء جدول عام.

ثم أنشأت قاعدة للتحديث التلقائي لأعمدة "خطوط الطول" و "خطوط العرض" للحصول على XY من النقطة المركزية المضلعة التي أضفتها من خلال QGIS

أنشئ أو استبدل القاعدة "insert_longlat" كما في INSERT TO "public". "t_excavations" DO (UPDATE t_excavations SET longitude = st_x (st_centroid (t_excavations.geom)) ؛ UPDATE t_excavations SET latitude = st_y (st_cavations) (tom_exx) ؛

تعمل هذه القاعدة عند حفظ التغييرات في QGIS ويتم احتساب الإحداثيات بشكل جيد

أريد الآن تحديث أعمدة "خط الطول" و "خط العرض" إذا تم تغيير حقل "geom" (على سبيل المثال ، إذا قمت بتحريك المضلع بالكامل أو نقطة واحدة فقط)

لقد أنشأت وظيفة:

إنشاء أو استبدال وظيفة update_longlat () إرجاع المشغل كـ $ BODY $ BEGIN NEW.longitude = ST_X (ST_Centroid (geom)) ؛ NEW.latitude = ST_Y (ST_Centroid (geom)) ؛ عودة جديدة ؛ نهاية؛ $ BODY $ LANGUAGE plpgsql التكلفة المتغيرة 100 ؛ ALTER FUNCTION update_longitude () OWNER TO postgres؛

وزناد:

إنشاء TRIGGER tr_update_longlat قبل التحديث في t_excavations لكل صف من إجراءات التنفيذ update_longlat () ؛

والآن عندما أحاول إضافة مضلع جديد أو تعديل مضلع موجود في QGIS ، أحصل على رسالة الخطأ هذه من postgres:

لا يمكن تغيير طبقة t_excavations

الأخطاء: خطأ: لم تتم إضافة كائن واحد.

أخطاء المصدر:

خطأ PostGIS أثناء إضافة الكائنات: خطأ: العمود "geom" غير موجود LINE 1: SELECT ST_X (ST_Centroid (geom)) ^ QUERY: SELECT ST_X (ST_Centroid (geom)) CONTEXT: الوظيفة PL / pgSQL update_longlat () ، الصف 3 ، مهمة تشغيل

ما الخطأ الذي أفعله في الوظيفة / المشغل؟


أعتقد أن وظيفة الزناد يجب أن تبدو كما يلي:

$ BODY $ أعلن عن دقة مضاعفة ؛ الدقة المزدوجة ؛ المعرف INTEGER ؛ خط عرض BEGIN: = ST_Y (ST_Centroid (NEW.geom)) ؛ lon: = ST_X (ST_Centroid (NEW.geom)) ؛ المعرف: = NEW.id_excavation ؛ تحديث t_excavations SET longitude = lon، latitude = lat حيث id_excavation = id ؛ عودة NULL ؛ نهاية؛ $ الجسم $

وستحتاج إلى تعريف المشغل على أنه بعد التحديث. يجب أن يمنع "RETURN NULL" حلقة تحديث لا نهاية لها.


شاهد الفيديو: QGIS Tutorial - How to add polygon layer, add a field, add XY for centroid of polygon -GIS Solutions